一、引言
二、背景
三、数据分片
固定分片个数:分片数在系统初始时选定,数据量增加时,单个分片的数据量相应增加。新扩容节点时,迁移部分分片到新节点,缩容时,反向迁移。这种方式简单,易操作,ES就采用了该方式。但其也有相应的缺点:对数据量涨幅或降幅比较大的系统,初始搭建时很难确定合适的分片数。
动态分片数:当分片中的数据的增长到一定值时,就会拆分分片;如果分片中数据量过少,则会进行分片合并。在Hbase中,单个region的大小默认是10G,过大则会触发拆分。相比上述固定分片的方式,这种方式主要优点是分片数可以自动适配数据量,不再有初始选择分片数的烦恼。但在系统初始导入数据时,会由于分区的多次拆分而严重影响读写性能。所以在Hbase和MongoDB中,均允许配置一组初始分区,来规避该问题。由于这种分片方式更复杂,部分系统还会提供人工干预的措施。
四、分布式系统设计中的考量
依赖ZK或etcd等协调服务系统:这是最为常见的方式,其缺点就是需要多维护一套ZK系统。但相比带来的复杂度,多数情况下,这个维护成本通常更愿意被接受。
工作节点当前的状态无法被及时感知,比如节点正在启动,磁盘故障等。
五、索引管理
索引在离线创建,在建索引时并不太关注资源抢占问题;
六、结语