聊聊我认为的分布式、集群实现关键点

聊聊,认为,分布式,集群,实现,关键点 · 浏览次数 : 14

小编点评

**集群设计中需要考虑的问题:** * **节点通信机制:**主节点如何与其他节点进行通信? * **路由算法:**如何选择数据路由到哪个节点? * **数据一致性:**如何确保集群内所有节点的数据一致性? * **节点动态变化:**如何处理集群内节点数量变化的动态情况? * **读请求负载均衡:**如何实现读请求的负载均衡?

正文

基于常见的中间件(Mysql、ElasticSearch、Zookeeper、Kafka、Redis)等分布式集群设计的机制,自己总结了在在集群设计过程中需要考虑的通用问题。

节点通信机制

主节点的增加、删除、通信机制。

路由算法

即数据路由到哪个节点的策略机制。在集群内有多个节点,数据该路由到哪个节点存储,也可以看作是,请求应该转发到哪个节点执行。
常见算法:

  1. 一致性hash算法
  2. hash算法
  3. 取余算法
  4. 指定分区算法

数据一致性算法与同步机制

分布式多节点(主从、主备、主副本)中,数据在多节点中的一致性问题。一般都是采用分布式一致性算法来实现,简单列举下:
强一致性算法:
● 说明:保证系统改变提交以后,立即改变节点的数据状态
● 算法:
○ Paxos
○ Raft
○ ZAB
弱一致性算法:
● 说明:也叫最终一致性,系统不保证改变提交以后立即改变集群的状态,但是随着时间的推移最终状态是一致的。
● 算法:
○ DNS系统
○ Gossip协议
当数据在主节点已写入后,如何同步到其他的副本/从节点中。是过半写而后直接返回给客户端、还是全写后在返回给客户端、还是在主节点写完后,直接返回给客户端,再异步写入其他节点。

选主机制

集群内的某个主节点宕机后,从节点(副本)如何选主?

集群数据倾斜

在集群内,由于数据路由算法或是其它问题,导致主节点间,数据量不一致,有些主节点数据量多,而有些节点数据量少,导致集群中数据的分配不均匀。

节点动态变化

由于网络或是负载均衡的考虑等,会有动态增减主节点的情况。发生此类情况后,是否会影响到此前已存储数据的路由,这直接影响到数据的读取。

读请求负载均衡

即在主从节点(主副本)间读请求的负载均衡机制。是轮训还是指定等等,这直接影响到系统的吞吐量与数据的准确性。比如,有些从节点(副本)由于数据一致性与同步机制的影响,可能此时数据还没同步过来,而读请求路由到了此节点,那么就会出现数据取不到情况了。

数据的原子性与持久性

其实这个可以不归属于分布式、集群内,但可以提一下。在节点崩溃后,如何恢复数据?甚至是从崩溃点恢复?如何不丢失数据?
WAL机制,大多数的中间件都实现了该机制。尤其是数据库与消息中间件和非内存性的数据存储中间件。

写请求机制

目前来看,大多数的中间件集群写请求都是在主节点上执行的,而后将数据同步到从节点/副本。一次写请求可以看到做分布式事务,因为涉及到主副本(主从节点)间的数据写入与数据同步。一般的实现是基于一致性算法+WAL机制+过半机制来实现集群内多节点的一次写请求。

与聊聊我认为的分布式、集群实现关键点相似的内容:

聊聊我认为的分布式、集群实现关键点

基于常见的中间件(Mysql、ElasticSearch、Zookeeper、Kafka、Redis)等分布式集群设计的机制,自己总结了在在集群设计过程中需要考虑的通用问题。 ### 节点通信机制 主节点的增加、删除、通信机制。 ### 路由算法 即数据路由到哪个节点的策略机制。在集群内有多个节点,

[转帖]聊聊我对 GraphQL 的一些认知

https://www.modb.pro/db/139451 作者简介:haohongfan 是 Apache Dubbogo Committer,目前就职于京东,擅长高并发架构设计。公众号 HHFCodeRv 会定期发布原创文章,包括源码分析、业务思考、架构设计等。推荐大家关注 每隔一段时间就能看

[转帖]数据库的可观测性能力与监控能力建设之间的差别

白鳝的洞穴2023-04-18 39 前阵子的DTC2023上,我分享的内容是关于数据库可观测性的。会后有不少朋友都和我聊了关于数据库可观测性的问题,也有很多朋友对于这个新名词感到有点高大上,不过并不以为然。认为可观测性就是以前的数据库监控的炒冷饭。实际上从数据库监控到利用数据库的可观测性能力去做数

【实践篇】教你玩转JWT认证---从一个优惠券聊起

关于JWT,可以说是分布式系统下的一个利器,我在我的很多项目实践中,认证系统的第一选择都是JWT。它的优势会让你欲罢不能,就像你领优惠券一样。

聊聊简单又不简单的图上多跳过滤查询

摘要:多跳查询能力也是一个衡量产品性能非常重要的指标。 本文分享自华为云社区《聊聊超级快的图上多跳过滤查询》,作者:弓乙。 在图数据库/图计算领域,多跳查询是一个非常常用的查询,通常来说以下类型的查询都可以算作是多跳过滤查询: 1.查询某个用户的朋友认识的朋友 --二跳指定点label的查询 2.查

聊聊我认为的OpenFeign

此篇文章不从源码角度解析,网上一搜一大把。我个人的习惯是自己评估与思考下大概的设计思路是什么,然后看源码与博客佐证。否则一来就是使用然后看源码,一坨一坨的代码,真的看的头疼。以上仅是个人的学习方法。 聊聊OpenFeign,其实这个框架,之前用过,但没留意太多;说白了这个框架的出现就是为了让我们做R

坚持与确定性:毒药还是良药?

前段时间跟几个大龄程序员一起吃饭,聊了大家的现状,后来写了篇博客总结了一下《从大龄程序员现状聊聊出路》,本想着给朋友们提供些观点和思路,结果被有些网友批评了。 1. 我的认知达不到赚快钱 有的网友认为我在瞎扯,有的觉得我在灌鸡汤,还有的认为我在指错路。 文中虽然总结了一些自认为有价值的观点,本想着让

聊聊Spring IOC容器的注入方式

为什么要说这个? 对于Spring体系而言,我个人认为最重要的就是IOC容器,其次才是AOP、Context等模块;因为这些模块功能是或搭建或集成在IOC容器这个基础设施之上的。 直接基于Spring框架体系做开发时,可以通过常用的JavaConfig或XML方式将对象的生命周期及装配由容器原生的接

聊聊一个差点被放弃的项目以及近期的开源计划

前言 自从 StarBlog 和 SiteDirectory 之后,我还没写新的关于开源项目的系列,最近又积累了很多想法,正好写一篇博客来总结一下。 关于差点被放弃的项目,就是最近一直在做的单点认证(IdentityServerLite) IdentityServerLite 开发这个项目的起因,是

17岁中专女生勇夺2024阿里全球数学赛12名好成绩,今天,站在程序员的视角,我们来聊聊数学对编程的价值与意义...

大家好,我是程序员陶朱公,一个认真生活,总想超越自己的程序员。 前言 相信这两天,大家都刷屏到了一个比较热度的新闻——17岁中专女生在今年这届阿里举办的全球数赛中,勇夺第12名的好成绩。 ↓↓↓ 看到这里,可能有小伙伴会觉得有点疑惑:又不是第一名,不明白第12名的她,为什么会引起社会这么大的一个反响