这是泥瓦匠(bysocket.com)的第27篇精华分享html
ES (ElasticSearch)是分布式搜索引擎。引擎太晦涩,其实相似一个 MySQL ,一个存储。方便提供下面功能:数据库
那么存储在 ES 数据哪里来?json
答案是数据同步。方式推荐以下:运维
数据传输(Data Transmission)是阿里云提供的一种支持RDBMS(关系型数据库)、NoSQL、OLAP等多种数据源之间数据交互的数据服务。【阿里的】 https://help.aliyun.com/product/26590.htmlsocket
有赞亿级订单同步的探索与实践【小弟我呆的小组搞的】 https://mp.weixin.qq.com/s/33KACMxXkgzZyIL9m6q4YA分布式
回归到 ES 演进性能
当时在创业公司,同步每次都是全量的,而后凌晨任务跑一下便可。或者直接同步往 ES CRUD 数据。优化
单机伪集群,也能够跑。具体全文检索思路:搜索引擎
具体看我系列 ES 博客和 GitHub。阿里云
这个量级预估是 百万 / 千万数据同步和查询。
就不能单机伪集群了,运维层面能解决这个量:
如何水平扩容
主分片在索引建立已经肯定。读操做能够同时被主分片和副分片处理。所以,更多的分片,会拥有更高的吞吐量。天然,须要增长更多的硬件资源支持吞吐量。说明,这里没法提升性能,由于每一个分片得到的资源会变少。动态调整副本分片数,按需伸缩集群,好比把副本数默认值为 1 增长到 2:
PUT /blogs/_settings { "number_of_replicas" : 2 }
基本一个集群 Cluster 含着各个业务搜搜:订单、商品等
忽然发现一个问题:
好比如今同一个 订单 索引大了,慢查。影响了其余业务。那不该该呀,咋办?
答案是:物理隔离为多集群:
每每这时候问题由来了:业务单点如何优化升级?
一个索引 project , 存储项目相关的数据。项目的数量级愈来愈大,亿量级,万亿量级。那一个大索引的查询啥的都会出现瓶颈。这时候该怎么优化呢?
解决方案:冷热分离;拆分
大索引的拆分,也不是很难。相似分片的路由规则,根据具体业务指定便可。
这里,咱们能够定义 1000 个索引,分别名为 project_一、project_二、project_3…
而后在 ES 集群上面架一层简单的 proxy 。里面核心的业务路由规则能够这样:
project_id 项目自增 ID index_id 得出来的索引对应的 ID
index_id = project_id % 1000
冷热分离;也是相似的就是中间状态的数据最热独立集群独立索引。按期从里面删除终态数据。那么这个索引数据量少,支持搜搜查询量贼大。何乐而不为。