每年的9月20日,是全国爱牙日。作为中国特有的节日,爱牙日的由来主要与兰州地区的牙科医生--白成平有关。白成平在17岁的时候,就跟随美国口腔医学博士毛燮均学习牙医技术。此后,他便一直在兰州一家医院担任牙科医生。在50多年的牙医生涯中,他对人
全部3个回答 >分布式系统设计三要素
-
分布式系统核心三要素:
要素一: 多副本(Replication), 系统包含多个完全相同(一致)的节点,
要素二: 多分区(Sharding), 系统被拆分成多个完全独立的节点组,
要素三: 协作(Cooperation), 节点组之间有协作, 共同完成某项工作。
多副本
多副本很容易理解, 正如前面提到的那个技术人员的看法, 大部分挂以"分布式"之名的系统, 仅仅是因为其具备了多副本能力. 多副本技术非常重要, 因为它至少能解决分布式系统的两个核心目的: 高可用和可扩展.
事实上, 多副本并非天然地可扩展和高可用.
首先, 多副本遇到一致性的问题, 只有强一致性的多副本, 才可容灾达到高可用. 如果多副本不是强一致性, 那么必须增加一层 Indirection 实现强一致性之后, 才能容灾. 实践中经常遇到的容灾操作, 例如 MySQL 主从切换, 都是增加了运维人员(Indirection)进行确认, 达到强一致性(数据真的一致, 或者即使数据不一致但人认为可接受)之后, 才进行切换.
其次, 只有使用者不强求强一致性, 多副本才是天然可扩展的. 例如, MySQL 主从同步, 使用者很多时候不要求强一致性, 所以读 Slave 副本. 同时, 工程上多副本对于写操作完全没有可扩展性, 因为所有的写操作的压力是同等作用于所有副本的. 但是,未经工程优化的强一致性读操作, 多副本也没有可扩展性, 因为每一次读操作必须由全体副本共同完成, 压力也是同等作用于所有副本的.
可能有人对强一致性读操作的压力有疑问, 这里再多解释一下什么是工程优化. 被称为"唯一的共识协议"的 BasicPaxos 不区分工程实践上的读写操作, 每一次读操作都需要全部节点真正地做同样计算. 工程实践上, 在概率上能优化成先读取数据的摘要(例如版本号, MD5 值)做判断, 判断后再决定是否需要读取全部的数据, 从而降低压力.Raft 对读操作也做了工程优化, 例如 Leader 在确定自己的身份有效之后, 可以独立地处理读请求, 但 Raft 多副本只能有一个 Leader 可以处理请求(Raft Multi-Group 就是后面要提到的 Sharding), 无法得到扩展.
多副本天然要求强一致性, 所以, 我们提到多副本, 一般默认是指强一致性多副本, 所以, 是高可用的. 但是, 未经工程优化的强一致性多副本, 默认是无扩展性的. 1 台机器能存储 3TB 的数据, 3 台机器组成的多副本也只能存储 3TB 的数据, 而不是 9TB. 1 台机器能处理 10w qps 写请求, 3 台机器组成的多副本也只能处理 10w qps 写请求, 甚至更少.
多分区
多副本不是天然可扩展的, 但是多分区是天然可扩展的. 前面提到, 3 台机器组成的多副本, 只能存储 3TB 的数据, 处理 10w qps 请求. 如果数据对半分成 2 个分区, 再增加 3 台机器, 这样的话, 整个系统的存储容量和处理能力是不是扩容到了 2 倍?
不像多副本必须经过仔细的工程优化, 只要对数据进行了分区(Sharding), 系统就是天然地扩展了. 例如前面提到的 Raft 多副本只能有一个 Leader, 如果我们将数据分成 3 等分, 那么每一个分区都可以拥有一个 Leader, 这样, 在不增加机器的前提下, 3 台机器都是 Leader, 对于读请求的处理能力, 理论上扩容为 3 倍, 从 10w qps 增加为 30w qps.
多分区之间是 shared-nothing 的, 每一个分区并不知道其它分区的存在, 也不依赖其它分区, 可以独立地进行工作. 如果分区之外的 Indirection 依赖两个分区才能完成某项工作, 那就涉及到了下面介绍的"协作".
协作
理想状态下, 系统被拆分成若干个完全独立的分区, 但是, 现实中分区之间必须进行协作, 共同完成某项工作. 例如某个数据库表被拆分分别存储在两个分区, 但需要对这个表格进行排序之后取某个区间时(order by xxx limit offset, size), 这两个分区在逻辑上就被强绑定在一起, 缺一不可.
比如某些分布式数据库, 一个事务跨越多个分区, 每一个分区上面的事务参与者, 都要指向一个单点标记(commit point), 只要其中一个分区宕机, 事务就无法完成.
协作是一种增加 Indirection 之后的结果, 为了解决问题, 我们不得不增加一层 Indirection. 所以, 分布式系统往往要求分区之间进行协作, 完全独立的分区结构, 几乎是不可能存在的. 否则, 中国的某个技术人员部署了自己的 MySQL 数据库运行网站, 另外, 美国的某个程序员也独立地部署了自己的 MySQL 数据库和博客网站, 这两个人部署的独立的 MySQL 数据库, 你会认为它们两者组成了一个分布式系统吗? 你会认为两者是一个集群吗?
只有同时满足: 多副本, 多分区, 协作三个条件的系统, 才是真正意义上的分布式系统(集群)。
2023-10-23 16:28:17 -
分布式系统核心三要素:
要素一: 多副本(Replication), 系统包含多个完全相同(一致)的节点
要素二: 多分区(Sharding), 系统被拆分成多个完全独立的节点组
要素三: 协作(Cooperation), 节点组之间有协作, 共同完成某项工作
2023-10-23 16:28:17
-
问 爱牙日的由来答
-
问 爱尔兰是哪个国家答
爱尔兰被称为翡翠岛国,这里西临大西洋、东靠爱尔兰海,与英国隔海相望。爱尔兰其实是一个独立的西欧国家,为北美通向欧洲的通道。爱尔兰、英格兰、苏格兰、威尔士是四个民族,也是四个地方。在历史上,这四个地方分分合合,瓜葛不断。1918年前,四个民族
全部10个回答 > -
问 圣城是哪个城市答
希腊雅典、中国洛阳、沙特麦加和以色列耶路撒冷被世界公认为世界四大圣城。关于洛阳圣城称号的由来,可追溯至上古时期。 相传上古时期,洛阳孟津县境内的黄河中出现背着“河图”的龙马和背着“洛书”的神龟,它们把图和书献给了伏羲后,伏羲根据图和书
全部10个回答 > -
问 芥菜的营养价值答
食材简介: 芥菜又称盖菜、挂菜,是中国的特产蔬菜。芥菜植株一般可高150厘米,幼茎及叶具有毛刺。经过长期选择和栽培,芥菜出现了不同的变种:根芥菜,也叫大头菜,主要用来腌制咸菜;叶芥菜俗称雪里红,可制成霉干菜;茎芥菜,用来制作榨菜;芽芥
全部10个回答 > -
问 猪肝的营养价值答
食材简介: 猪肝又名血肝,是猪的肝脏,与胆相连,肝脏是动物体内储存养料和解毒的重要器官。猪肝在消化系统中能够制造胆汁,一般呈紫红色、红褐色,质软而脆,呈楔形,右端圆钝,左端扁薄,可分为上、下两面,前后两缘,左右两叶。 营养功效:
全部10个回答 > -
问 花椒的营养价值答
食材简介: 花椒,又叫麻椒、蜀椒、点椒等,是我国原产的一种干、枝、叶、果均具浓郁辛香的落叶灌木或小乔木。它最初野生于我国中西部,是作为是敬神的香物。现在广泛分布于我国南北各地。由于它的果皮暗红,密生粒状突出的腺点,犹如细斑,故花椒之名
全部10个回答 > -
问 银鱼的功效与作用答
食材简介: 银鱼,又称炮仗鱼、面条鱼、白饭鱼等,通体白色,整体长约10厘米,刺少,有牙并且十分锋利。银鱼具有海洋至江河洄游的习性,多生活于水的下层,我国的太湖、西湖、马湖是三大银鱼盛产湖。 营养功效: 银鱼所含营养十分丰富,具有高
全部10个回答 > -
答
大理是悠闲和浪漫的代名词,下关的风,上关的花,苍山的雪,洱海的月,“风花雪月”构成了大理最著名的特色。去大理,我们的路线是先游览大理古城周边及崇圣寺三塔,然后环洱海游,最后以登苍山结束。大理古城是大理旅游的核心区,这里承载着大理历史文化、宗
全部10个回答 > -
问 原单和正品的区别答
现在的市场可以说是乌烟瘴气,光各种产品的头衔都搞的人一头雾水,那么,原单和正品有什么区别呢?所谓的原单货和“真货”的唯一区别,不过是“庶出”而已,数量很少。众所周知,现在国外60%以上的奢侈品都在中国生产。国外的一些大品牌会在国内找一些代工
全部10个回答 > -
问 太湖的简介答
“太湖美呀太湖美,美就美在太湖水”,1978年,这首《太湖美》传遍大江南北,太湖一时成为了大家都心中的向往之地。太湖位于江苏省南部,长江三角洲南部,是中国著名的五大淡水湖之一。太湖湖泊面积2427.8平方公里,湖岸线全长393.2公里。其西
全部10个回答 >