分布式系统理论-从放弃到入门

author author     2022-08-20     500

关键词:

随承载用户数量的增加和容灾的需要,越来越多互联网后台系统从单机模式切换到分布式集群。回顾自己毕业五年来的工作内容,同样有这样的转变。

毕业头两年负责维护运行在刀片机上的业务,在机房里拔插单板的日子是我逝去的青春。设备之间通过VCS组成冷备,但即使有双机软件保护,宕机、网络丢包等问题发生时业务仍会受影响。这样的系统架构下为保证SLA,有时候需要深入Linux系统内核或硬件层面分析机器重启的原因。

接下来负责维护承载在分布式集群上的业务,相比前面的工作,这个阶段主要关注点不是单节点的异常,更多是系统整体的稳定和健壮。面对纷繁复杂的系统,刚开始的时候有这样的感觉:

庞大复杂的分布式系统前,应该从哪方面入手提升对其的认识和理解、提升专业性?网上可以找到很多分布式系统相关的论文和资料,但归纳起来要表达的主要意思是什么?

结合自己这几年的工作经验,总结分布式系统的核心就是解决一个问题:不同节点间如何达成共识

 

看似简单的问题因网络丢包、节点宕机恢复等场景变得复杂,由此才衍生出很多概念、协议和理论。为探究共识问题最大能解决的程度,于是有FLP、CAP边界理论;为在特定条件和范围内解决该问题,于是有一致性协议Paxos、Raft、Zab和Viewstamped Replication;为构建这些协议,于是有多数派、Leader选举、租约、逻辑时钟等概念和方法。

 

2016年我阅读了分布式系统领域一些代表性的论文和博文,围绕“不同节点如何达成共识”这个问题,加入自己的认识和理解后有下面7篇小结:

一致性、2PC和3PC
选举、多数派和租约
时间、时钟和事件顺序
CAP
Paxos
Raft、Zab
Paxos变种和优化

构思和写作技术类文章是一个辛苦的过程,一方面要阅读很多资料并转化成自己的理解、找到尽量不拾人牙慧的立意和角度,一方面要绞尽脑汁组织语言让预期的读者能够容易理解。

 

但它也是一个有趣的过程,把知识捋一遍后原本一些模糊的概念变得清晰,写作过程中想到的一些有意思的内容我也会将它穿插到文章里,有时候会被自己想到的一些小机灵逗乐 :)

希望这几篇整理能为系统性地介绍分布式理论中文资料添一块砖、加一片瓦。

 

node.js从入门到放弃《什么是node.js》

...驱动,非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。关于事件驱动的两个实例:在美国去看医生,需要填写大量表格,比如保险、个人信息之类,传统的基于 查看详情

openstack从入门到放弃

...云感知应用openstack及其相关组件介绍flat/vlan/gre/vxlan介绍分布式存储ceph介绍openstackmitaka三节点部署实战 一:为何选择云计算/云计算之前遇到的问题  查看详情

openstack从入门到放弃

...云感知应用openstack及其相关组件介绍flat/vlan/gre/vxlan介绍分布式存储ceph介绍openstackmitaka三节点部署实战一:为何选择云计算/云计算之前遇到的问题    一、有效解决硬件单点故障问题     查看详情

openstack从入门到放弃

...云感知应用openstack及其相关组件介绍flat/vlan/gre/vxlan介绍分布式存储ceph介绍openstackmitaka三节点部署实战一:为何选择云计算/云计算之前遇到的问题    一、有效解决硬件单点故障问题     查看详情

soul从入门到放弃12--sentinel插件

参考技术ASentinel是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。经历了阿里巴巴近10年的双十一大促... 查看详情

《java从入门到放弃》javase入门篇:练习——单身狗租赁系统

...们要玩个大的!!!我们把之前使用数组做的这个单身狗系统改版成数据库版本,并且使用面向对象里面的一些简单思想。如果有不知道这个系统的看官,请跳转到目录页,然后再选择单身狗系统(数组版)先围观五分钟吧。里面... 查看详情

redis源码阅读,从入门到放弃

前两天,一哥们去面后端,起初SQL优化技巧、分布式架构、中间件都答得都挺好,没想到最后折在了Redis上,回来跟我复盘了一波: 面试官:“Redis什么时候做Rehash?” 哥们:哈希表中所有entry个... 查看详情

运维工程师从入门到放弃必备书籍

...)《构建之法——现代软件工程》《RabbitMQ实战高效部署分布式消息队列》《程序员必读软件架构》《OpenStack开源云王者归来》《ELKstack权威指南》《Nginx高性能Web服务器详解》《Docker容器与容器云》《Zabbix企业级分布式监控系统... 查看详情

git入门到放弃(代码片段)

git基础入门Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是LinusTorvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。git的安装下载地址注意:不要安装在中文目录... 查看详情

java技术栈,从入门到放弃,废了废了

...eJPA连接池DruidHikariCPC3P0分表分库MyCatSharding-JDBCSharding-Sphere分布式/微服务服务发现/注册EurekaConsulZookeeperNacos网关ZuulGateway服务调用(负载均衡)RibbonFeign熔断/降级Hystrix配置中心ConfigApolloNacos认证鉴权ShiroSpringSecurityOAuth2SSO分... 查看详情

计算机基础从入门到放弃

计算机基础一、编程语言的作用及与操作系统和硬件的关系语言的存在是为了沟通,在中国用华语,美国用英语,在计算机领域中也不例外,编程语言是让计算机能识别的语言,编程语言也是程序员与计算机沟通的桥梁。与操作... 查看详情

ai框架核心技术系列来啦!从入门到放弃!

...要是跟大家一起探讨和学习人工智能、深度学习的计算机系统设计,而整个系统是围绕着我在工作之余所积累、梳理、构建关于AI框架的一些核心技术内容。【AI框架核心技术】这个系列,主要是跟大家一起探讨和学习人工智能... 查看详情

python从入门到放弃

...7,所以这里用3.6做示范,操作步骤都一样)4.根据自己的系统选择对应版本5.这里用win10举例,点击windows,这里有2.x版本也有3.x版本,选择executablei 查看详情

《java从入门到放弃》文章目录

...关内容都写完后,再按学习顺序来整理。《Java从入门到放弃》入门篇:XMLHttpRequest的基本用法《Java从入门到放弃》入门篇:Struts2的基本访问方《Java从入门到放弃》入门篇:Struts2的基本访 查看详情

redis的入门到放弃

...库。Redis入门Windos上的RedisLinux上安装Redis一、何为NoSQL?分布式开发:SpringBoot、SpringCloud。MySQL数据库底层:B+Tree,一个机器内存也放不下。访问量(读写混合),一个服务器承受不了,所以需要读写分离。加入Memcached(缓存)+MySQL+... 查看详情

java从入门到放弃

 (1)Java入门变量与注释 用户输入if语句java中的循环while 查看详情

《java从入门到放弃》javase篇:综合练习——单身狗租赁系统(数组版)

因为现在只学习了基本语法,所以在综合练习之前,先补充关于方法概念。方法的作用:把一系列的代码放在一起,然后再取个别名。之后通过这个别名的调用,就相当于执行了这一系列的代码。方法的语法:([]中的内容表示... 查看详情

单例模式(从放弃到入门)(代码片段)

...,因为它不是用来解耦合用的,而是为了让整个系统有且只有一个这样的对象。为什么要只有一个呢??如果有些对象对象非常大,我需要保证内存中只存在一个;如果我希望做一些控制ÿ 查看详情