众所周知,海量业务数据的存储和检索一直是一个老大难的问题,本文分享一个基于大容量分布式存储(可以是Aerospike、Hbase、TiDB等等)+ ElasticSearch 实现的秒级写延迟、秒级查询解决方案,也就是所谓的异构索引,线上指标:日均2亿+次写操作,0丢失。
当下主流多存储的系统解耦方案都是基于Kafka等消息中间件,即先将数据存入关系库或者NoSQL, 再将消息写入Kafka,其他服务订阅Kafka感知数据变化,将索引写入ElasticSearch。
既然是存储和检索是物理分开的,那么就一定存在不同存储之间的一致性的问题,既然是分布式存储,那就一定是弱一致性的,至于有多弱,多大延迟,取决于业务约束及系统设计。
存储负责全字段,ElasticSearch负责仅存储索引字段。假定需要检索的业务对象定义如下:
id:全局唯一
a:字段a
......
z:字段z
timestamp:操作时间
业务对象的唯一id:可以是某个商品的SKU,某个订单的ID,(如果是Hbase,Key需要经过反转,加盐