开发网站需要什么人员电子邮件怎么注册

当前位置: 首页 > news >正文

开发网站需要什么人员,电子邮件怎么注册,网站开发技术对比,会员卡管理系统怎么制作Elasticsearch优化 1、优化-硬件选择 Elasticsearch 的基础是 Lucene#xff0c;所有的索引和文档数据是存储在本地的磁盘中#xff0c;具体的路径可在 ES 的配置文件…/config/elasticsearch.yml中配置#xff0c;如下#xff1a; # #Path to directory where to store …Elasticsearch优化 1、优化-硬件选择 Elasticsearch 的基础是 Lucene所有的索引和文档数据是存储在本地的磁盘中具体的路径可在 ES 的配置文件…/config/elasticsearch.yml中配置如下 # #Path to directory where to store the data (separate multiple locations by comma): # path.data: /path/to/data # #Path to log files: # path.logs: /path/to/logs磁盘在现代服务器上通常都是瓶颈。Elasticsearch重度使用磁盘你的磁盘能处理的吞吐量越大你的节点就越稳定。这里有一些优化磁盘I/O的技巧 使用SSD就像其他地方提过的他们比机械磁盘优秀多了。 使用RAID0。条带化RAID会提高磁盘IO代价显然就是当一块硬盘故障时整个就故障了。不要使用镜像或者奇偶校验RAID因为副本已经提供了这个功能。 另外使用多块硬盘并允许Elasticsearch 通过多个path data目录配置把数据条带化分配到它们上面。 不要使用远程挂载的存储比如NFS或者SMB/CIFS。这个引入的延迟对性能来说完全是背道而驰的。 2、优化-分片策略 合理设置分片数 分片和副本的设计为 ES 提供了支持分布式和故障转移的特性但并不意味着分片和副本是可以无限分配的。而且索引的分片完成分配后由于索引的路由机制我们是不能重新修改分片数的。 可能有人会说我不知道这个索引将来会变得多大并且过后我也不能更改索引的大小所以为了保险起见还是给它设为 1000 个分片吧。但是需要知道的是一个分片并不是没有代价的。需要了解 一个分片的底层即为一个 Lucene 索引会消耗一定文件句柄、内存、以及 CPU运转。 每一个搜索请求都需要命中索引中的每一个分片如果每一个分片都处于不同的节点还好 但如果多个分片都需要在同一个节点上竞争使用相同的资源就有些糟糕了。 用于计算相关度的词项统计信息是基于分片的。如果有许多分片每一个都只有很少的数据会导致很低的相关度。 一个业务索引具体需要分配多少分片可能需要架构师和技术人员对业务的增长有个预先的判断横向扩展应当分阶段进行。为下一阶段准备好足够的资源。 只有当你进入到下一个阶段你才有时间思考需要作出哪些改变来达到这个阶段。一般来说我们遵循一些原则 控制每个分片占用的硬盘容量不超过 ES 的最大 JVM 的堆空间设置一般设置不超过 32G参考下文的 JVM 设置原则因此如果索引的总容量在 500G 左右那分片大小在 16 个左右即可当然最好同时考虑原则 2。 考虑一下 node 数量一般一个节点有时候就是一台物理机如果分片数过多大大超过了节点数很可能会导致一个节点上存在多个分片一旦该节点故障即使保持了 1 个以上的副本同样有可能会导致数据丢失集群无法恢复。所以 一般都设置分片数不超过节点数的 3 倍。 主分片副本和节点最大数之间数量我们分配的时候可以参考以下关系 ​ 节点数主分片数 *副本数1 推迟分片分配 对于节点瞬时中断的问题默认情况集群会等待一分钟来查看节点是否会重新加入如果这个节点在此期间重新加入重新加入的节点会保持其现有的分片数据不会触发新的分片分配。这样就可以减少 ES 在自动再平衡可用分片时所带来的极大开销。 通过修改参数 delayed_timeout 可以延长再均衡的时间可以全局设置也可以在索引级别进行修改 #PUT /_all/_settings {settings: {index.unassigned.node_left.delayed_timeout: 5m} }3、优化-路由选择 当我们查询文档的时候 Elasticsearch 如何知道一个文档应该存放到哪个分片中呢它其实是通过下面这个公式来计算出来 shard hash(routing) % number_of_primary_shards routing 默认值是文档的 id也可以采用自定义值比如用户 id。 不带routing查询 在查询的时候因为不知道要查询的数据具体在哪个分片上所以整个过程分为2个步骤 分发请求到达协调节点后协调节点将查询请求分发到每个分片上。 聚合协调节点搜集到每个分片上查询结果在将查询的结果进行排序之后给用户返回结果。 带routing查询 查询的时候可以直接根据routing 信息定位到某个分配查询不需要查询所有的分配经过协调节点排序。向上面自定义的用户查询如果routing 设置为userid 的话就可以直接查询出数据来效率提升很多。 4、优化-写入速度优化 ES 的默认配置是综合了数据可靠性、写入速度、搜索实时性等因素。实际使用时我们需要根据公司要求进行偏向性的优化。 针对于搜索性能要求不高但是对写入要求较高的场景我们需要尽可能的选择恰当写优化策略。综合来说可以考虑以下几个方面来提升写索引的性能 加大Translog Flush目的是降低Iops、Writeblock。 增加Index Refesh间隔目的是减少Segment Merge的次数。 调整Bulk 线程池和队列。 优化节点间的任务分布。 优化Lucene层的索引建立目的是降低CPU及IO。 优化存储设备 ES 是一种密集使用磁盘的应用在段合并的时候会频繁操作磁盘所以对磁盘要求较高当磁盘速度提升之后集群的整体性能会大幅度提高。 合理使用合并 Lucene 以段的形式存储数据。当有新的数据写入索引时 Lucene 就会自动创建一个新的段。 随着数据量的变化段的数量会越来越多消耗的多文件句柄数及 CPU 就越多查询效率就会下降。 由于 Lucene 段合并的计算量庞大会消耗大量的 I/O所以 ES 默认采用较保守的策略让后台定期进行段合并。 减少 Refresh 的次数 Lucene 在新增数据时采用了延迟写入的策略默认情况下索引的refresh_interval 为1 秒。 Lucene 将待写入的数据先写到内存中超过 1 秒默认时就会触发一次 Refresh然后 Refresh 会把内存中的的数据刷新到操作系统的文件缓存系统中。 如果我们对搜索的实效性要求不高可以将 Refresh 周期延长例如 30 秒。 这样还可以有效地减少段刷新次数但这同时意味着需要消耗更多的 Heap 内存。 加大 Flush 设置 Flush 的主要目的是把文件缓存系统中的段持久化到硬盘当 Translog 的数据量达到 512MB 或者 30 分钟时会触发一次 Flush。 index.translog.flush_threshold_size 参数的默认值是 512MB我们进行修改。 增加参数值意味着文件缓存系统中可能需要存储更多的数据所以我们需要为操作系统的文件缓存系统留下足够的空间。 减少副本的数量 ES 为了保证集群的可用性提供了 Replicas副本支持然而每个副本也会执行分析、索引及可能的合并过程所以 Replicas 的数量会严重影响写索引的效率。 当写索引时需要把写入的数据都同步到副本节点副本节点越多写索引的效率就越慢。 如果我们需要大批量进行写入操作可以先禁止Replica复制设置 index.number_of_replicas: 0 关闭副本。在写入完成后 Replica 修改回正常的状态。 优化-内存设置 ES 默认安装后设置的内存是 1GB对于任何一个现实业务来说这个设置都太小了。如果是通过解压安装的 ES则在 ES 安装文件中包含一个 jvm.option 文件添加如下命令来设置 ES 的堆大小 Xms 表示堆的初始大小 Xmx 表示可分配的最大内存都是 1GB。 确保 Xmx 和 Xms 的大小是相同的其目的是为了能够在 Java 垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源可以减轻伸缩堆大小带来的压力。 假设你有一个 64G 内存的机器按照正常思维思考你可能会认为把 64G 内存都给ES 比较好但现实是这样吗 越大越好虽然内存对 ES 来说是非常重要的但是答案是否定的 因为 ES 堆内存的分配需要满足以下两个原则 不要超过物理内存的 50% Lucene 的设计目的是把底层 OS 里的数据缓存到内存中。Lucene 的段是分别存储到单个文件中的这些文件都是不会变化的所以很利于缓存同时操作系统也会把这些段文件缓存起来以便更快的访问。如果我们设置的堆内存过大 Lucene 可用的内存将会减少就会严重影响降低 Lucene 的全文本查询性能。 堆内存的大小最好不要超过 32GB在 Java 中所有对象都分配在堆上然后有一个 Klass Pointer 指针指向它的类元数据。这个指针在 64 位的操作系统上为 64 位 64 位的操作系统可以使用更多的内存2^64。在 32 位 的系统上为 32 位 32 位的操作系统的最大寻址空间为 4GB2^32。 但是 64 位的指针意味着更大的浪费因为你的指针本身大了。浪费内存不算更糟糕的是更大的指针在主内存和缓存器例如 LLC, L1 等之间移动数据的时候会占用更多的带宽。 最终我们都会采用 31 G 设置 -Xms 31g -Xmx 31g 假设你有个机器有 128 GB 的内存你可以创建两个节点每个节点内存分配不超过 32 GB。也就是说不超过 64 GB 内存给 ES 的堆内存剩下的超过 64 GB 的内存给 Lucene。 5、优化-重要配置