返回
从零到英雄:有赞订单搜索 AKF 架构演进之路
见解分享
2023-12-08 21:27:36
有赞订单搜索 AKF 架构的演进之路
随着时间的推移,技术不断更新,商业需求也不断变化。有赞订单搜索的 AKF 架构也经历了多次演进,以适应新的挑战和需求。
AKF 架构概述
AKF 架构是一种分布式搜索架构,由三个主要组件组成:
- A(Aggregated) :聚合服务,负责将分散在多个数据库分片中的数据聚合到 Elasticsearch 中。
- K(Kafka) :消息队列,用于在聚合服务和索引服务之间传递数据更改。
- F(Full-text) :索引服务,负责将数据编入索引并提供搜索功能。
演进之路
阶段一:ES 聚合
最初,订单数据分散在 MySQL 的多个分片中。为了改善搜索性能,将这些数据聚合到了 Elasticsearch 中。聚合服务使用 Kafka 订阅 MySQL 的 binlog,并将数据更改发送到 Elasticsearch。
阶段二:数据分片
随着订单数量的增加,Elasticsearch 集群不堪重负。因此,将订单数据按时间范围分成了多个分片,每个分片对应一个单独的 Elasticsearch 集群。
阶段三:多活架构
为了提高可用性和容错性,采用了多活架构。在该架构中,每个 Elasticsearch 分片都有两个主节点,分别位于不同的数据中心。如果一个主节点发生故障,另一个主节点将自动接管。
阶段四:实时同步
在之前的架构中,数据更改通过 Kafka 异步传递到 Elasticsearch。为了降低延迟,引入了实时同步机制。聚合服务直接向 Elasticsearch 发送数据更改,从而显著减少了同步延迟。
阶段五:全量重建
随着时间的推移,Elasticsearch 索引可能会变得碎片化,导致搜索性能下降。因此,定期进行全量重建,以优化索引并提高搜索效率。
面临的挑战
在 AKF 架构的演进过程中,也遇到了以下挑战:
- 数据一致性 :确保聚合服务和索引服务之间的数据一致性至关重要。
- 数据量庞大 :订单数据量庞大,对存储和索引提出了挑战。
- 高可用性 :AKF 架构需要保持高可用性,以避免影响搜索服务。
收获
AKF 架构的演进带来了以下收获:
- 搜索性能提升 :将订单数据聚合到 Elasticsearch 大大提高了搜索性能。
- 扩展性增强 :通过数据分片和多活架构,提高了架构的可扩展性。
- 可用性提升 :多活架构和实时同步机制提高了架构的可用性。
总结
有赞订单搜索 AKF 架构的演进之路是不断适应变化需求和克服挑战的过程。通过持续优化和创新,AKF 架构始终为有赞提供高效、稳定、可扩展的搜索服务。