上一篇文章总计了 Zookeeper vs Kafka 对于分布式系统存在的问题的处理方式,今天来聊聊 Redis 和 Elasticsearch。
Redis
Node Role
Redis 中 roles 有:
- Master
- 负责数据的读写
- 对 slave 的健康监听是通过 sentinel 实现的
- Slave
- slave 启动时,slaveof host port,即会去连接该 master 服务器
- slave 可以配置是否参与写,一般建议只参与读
上一篇文章总计了 Zookeeper vs Kafka 对于分布式系统存在的问题的处理方式,今天来聊聊 Redis 和 Elasticsearch。
Redis 中 roles 有:
今天计划将 Kafka, Elasticsearch, Redis, Zookeeper 放到一起来聊一聊。为什么要将这几个 Components 放一起比较呢,因为本质上来说,他们都是存储数据的:
分片是指将大的数据集按一定规则拆分成小的数据集,来降低数据量增长过大时带来的问题。方式大体来说有两种:哈希分布 & 顺序分布。很多时候要根据具体业务选择分片方式。 Partition 的好处:
需要解决的问题:
distributed application system & distributed storage system 为了解决相似的问题:
- Performance
- Availability (and fault tolerance) 提出相似的解决方案:
- 拆微服务 = 数据分片(partitioning)
- 服务冗余 = 数据备份(replication)
Redis 特点:
本文部分参考自:《ZooKeeper: Distributed process coordination》 Apache ZooKeeper, a distributed coordination service for distributed systems. Zookeeper 最初是由 Yahoo 公司开发的,主要用于支持 robust distributed system,后期贡献给了 Apache 基金会。不像单体应用,在分布式系统中各个节点间的 Coordinating 是困难的。Zookeeper 正是为了解决分布式系统的协调工作(coordinating task),它通过提供通用的功能,让 application developers 能专注于自身的业务功能,而不用过多的关注分布式系统的协调。
传统意义上的企业级搜索是通过像 Lucence 以及基于它而开发的 Solr / Elasticsearch 来实现的。目前我们的搜索功能已经从 Solr 迁移到 Elasticsearch。Elasticsearch 内部有几种不同的算法来评估相关度(relevance):TF-IDF、BM25、BM25F等。