涅槃重生!字节大牛力荐大型分布式手册,凤凰架构让你浴火成神

前言

从大型机到单体架构,从微服务架构到无服务架构,每一次架构模式的演进都是一次涅槃。每一个软件系统都是由大量服务构成的生态体系,个体服务的“死亡”和“重生”是整个系统能否持续可靠运行的关键因素。笔记从5个方面全面剖析了如何构建一个可靠的分布式系统,同时给出了Spring Boot、Spring Cloud、Kubernetes、Istio、AWS Lambda五种架构风格的样例工程。

image.png

由5个维度全面探索如何构建可靠的大型分布式系统:

  • 从架构演进
  • 架构设计思维
  • 分布式基石
  • 不可或缺的基础设施
  • 技术方法论

由于篇幅限制,文档内容过多,只能展示部分内容,感兴趣的朋友,帮忙点赞转发后,后台私信【笔记】获取完整版免费下载方式。

第一部分 演进中的架构

架构并不是被发明出来的,而是持续演进的结果。本章我们暂且放下代码与技术,借讨论历史之名,来梳理软件架构发展历程中出现过的名词术语,以全局的视角,从这些概念的起源去分析它们是什么,它们取代了什么,它们为什么能够在竞争中取得成功,为什么变得不可或缺,以及它们为什么会失败,在斗争中被淘汰,逐渐湮灭于历史的烟尘当中。

image.png
image.png

第二部分架构师的视角

远程服务将计算机程序的工作范围从单机扩展至网络,从本地延伸至远程,是构建分布式系统的首要基础。而远程服务又不仅仅是为分布式系统服务的,在网络时代,浏览器、移动设备、桌面应用和服务端的程序,普遍都有与其他设备交互的需求,所以今天已经很难找到没有开发和使用过远程服务的程序员了,但是没有正确理解远程服务的程序员却不少。

image.png
image.png

事务处理几乎在每一个信息系统中都会涉及,它存在的意义是为了保证系统中所有的数据都是符合期望的,且相互关联的数据之间不会产生矛盾,即数据状态的一致性(Consistency)。按照数据库的经典理论,要达成这个目标,需要三方面共同努力来保障。

image.png
image.png

现代的企业级或互联网系统,“分流”是必须要考虑的设计,分流所使用的手段数量之多、涉及场景之广,可能连它的开发者都未必能全部意识到。这听起来似乎并不合理,但笔者认为这恰好是优秀架构设计的一种体现,“分布广阔”源于“多级”,“意识不到”谓之“透明”,也即本章我们要讨论的主题“透明多级分流系统[1]”(Transparent Multilevel Diversion System)的来由

image.png
image.png

即使只限定在“软件架构设计”这个语境下,系统安全仍然是一个很大的话题。我们谈论的计算机系统安全,不仅仅是指“防御系统被黑客攻击”这样狭隘的安全,还至少应包括(不限于)以下这些问题的具体解决方案。

image.png
image.png

第三部分布式的基石

在正式探讨分布式环境中面临的各种技术问题和解决方案前,我们先把目光从工业界转到学术界,学习几种具有代表性的分布式共识算法,为后续在分布式环境中操作共享数据准备打好理论基础。

image.png
image.png

微服务架构的一个重要设计原则是“通过服务来实现独立自治的组织件”(Componentization via Service),强调应采用“服务”(Service)而不是“类库”(Library)来构建组件化的程序,这两者的差别在于类库是在编译器静态链接到程序中的,通过调用本的方法来使用其中的功能,而服务是进程外组件,通过调用远程方法来使用其中的功能。

[
image.png
image.png

容错性设计(Design for Failure)是微服务的另一个核心原则,也是笔者书中反复强调的开发观念转变。不过,即使已经有一定的心理准备,大多数首次将微服务架构引入实际生活产系统的开发者,在服务发现、网关路由等支持下,踏出了服务化的第一步以后,很可能仍会经历一段阵痛期,随着拆分出的服务越来越多,随之而来会面临以下两个问题的困扰。

image.png
image.png

微服务提倡分散治理(Decentralized Governance),不追求统一的技术平台,提倡让团队员有自由选择的权利,不受制于语言和技术框架。在开发阶段构建服务时,分散治理打破了由技术栈带来的约束,好处是不言自明的。但在运维阶段部署服务时,尤其是在考量安全问题时,由Java、Go、Python、Node.js等多种语言和框架共同组成的微服务系统,出现安全漏洞的概率肯定要比只采用其中某种语言、某种框架所构建的单体系统更高。为了避免由于担忧一旦服务节点出现漏洞被攻击者突破,进而导致整个系统和内网都遭到入侵,我们就必须打破一些传统的安全观念,以构筑更加可靠的服务间通信机制。

image.png
image.png

随着分布式架构渐成主流,可观测性(Observability)一词也日益频繁地被人提起。最初,它与可控制性(Controllability)一起,是由匈牙利数学家Rudolf E.Kálmán针对线性动态控制系统提出的一组对偶属性,原本的含义是“可以由其外部输出推断其内部状态的程度”。

image.png
image.png

第四部分 不可变基础设施

容器是云计算、微服务等诸多软件行业核心技术的共同基石。容器的首要目标是让软件分发部署过程从传统的发布安装包、靠人工部署转变为直接发布已经部署好的、包含整套运行环境的虚拟化镜像。在容器技术成熟之前,主流的软件部署过程是由系统管理员编译或下载好二进制安装包,根据软件的部署说明文档准备好正确的操作系统、第三方库、配置文件、资源权限等各种前置依赖以后,才能将程序正确地运行起来。Chad Fowler在提出“不可变基础设施”这个概念的文章“Trash Your Servers and Burn Your Code”[1]的开篇就直接吐槽:要把一个不知道打过多少个升级补丁、不知道经历了多少任管理员的系统迁移到其他机器上,毫无疑问会是一场灾难。

image.png
image.png

本章我们将讨论虚拟化网络方面的话题,如果不加任何限定,“虚拟化网络”是一项内容十分丰富,研究历史十分悠久的计算机技术,是计算机科学中一门独立的分支,完全不依附于虚拟化容器而存在。网络运营商常提及的“网络功能虚拟化”(Network FunctionVirtualization,NFV),网络设备商和网络管理软件提供商常提及的“软件定义网络”(Software Defined Networking,SDN)等都属于虚拟化网络的范畴。对于普通的软件开发者而言,要完全理解和掌握虚拟化网络,需要储备大量开发中不常用到的专业知识,消耗大量的时间成本,一般并无必要。

image.png

image.png

容器是镜像的运行时实例,为了保证镜像能够重复地产出具备一致性的运行时实例,必须需要求镜像本身是持久且稳定的,这决定了在容器中发生的一切数据变动操作都不能真正写入镜像当中,否则必然会破坏镜像稳定不变的性质。为此,容器中的数据修改操作大多是基于写入时复制(Copy-on-Write)策略来实现的,容器会利用叠加式文件系统(OverlayFS)的特性,在用户意图修改镜像时,自动将变更的内容写入独立区域,再与原有数据叠加到一起,使其从外观上看来像是“覆盖”了原有的内容。这种改动通常都是临时的,一旦容器终止运行行,这些存储于独立区域中的变动信息也将被一并移除,不复存在。由此可见,如果不进行额外的处理,容器默认是不具备持久化存储能力的。

image.png
image.png

调度是容器编排系统最核心的功能之一,“编排”一词本身便包含“调度”的含义。调度是指为新创建的Pod找到一个最恰当的宿主机节点来运行它,这个过程成功与否、结果恰当与否则,关键取决于容器编排系统是如何管理与分配集群节点的资源的。可以认为调度是必须的容器编排系统的资源管控为前提,那我们就先从Kubernetes的资源模型谈起。

image.png
image.png

容器编排系统管理的最细粒度只能到达容器层次,在此粒度之下的技术细节,仍然只能依赖程序员自己来管理,编排系统很难提供有效的支持。2016年,原Twitter基础设施工程师William Morgan和Oliver Gould在GitHub上发布了第一代服务网格产品Linkerd,并在很短的时间内围绕Linkered组建了Buoyant公司。随后,在担任CEO的William Morgan发表的文章“What’s A Service Mesh?And Why Do I Need One?”中首次正式地定义了“服务网格”(Service Mesh)一词,自此,服务网格作为一种新兴通信理念开始迅速传播,越来越频繁地出现在各个公司以及技术社区的视野中。服务网格之所以能够获得企业与社区的重视,是因为它很好地弥补了容器编排系统对分布式应用细粒度管控能力不足的缺憾。

image.png
image.png

第五部分 技术方法论

image.png
image.png

附录A技术演示工程实践

image.png

附录B部署Kubernetes集群

image.png
如何获取?
可以看我的主页哦
也可以找v:yxqbkd
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 字符串 1.什么是字符串 使用单引号或者双引号括起来的字符集就是字符串。 引号中单独的符号、数字、字母等叫字符。 ...
    mango_2e17阅读 7,493评论 1 7
  • 《闭上眼睛才能看清楚自己》这本书是香海禅寺主持贤宗法师的人生体悟,修行心得及讲学录,此书从六个章节讲述了禅修是什么...
    宜均阅读 9,984评论 1 25
  • 前言 Google Play应用市场对于应用的targetSdkVersion有了更为严格的要求。从 2018 年...
    申国骏阅读 63,923评论 14 98
  • 第七章:理性的投资观 字数: 1.投资要围绕目的进行 投资的目的是为了挣钱。投资的除了金钱还有时间和精力也是一种投...
    幸福萍宝阅读 3,316评论 1 2
  • 本文转载自微信公众号“电子搬砖师”,原文链接 这篇文章会以特别形象通俗的方式讲讲什么是PID。 很多人看到网上写的...
    这个飞宏不太冷阅读 6,781评论 2 15