首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >GitHub标星93K!阿里凤凰架构分布式手册:架构师进阶成神之路

GitHub标星93K!阿里凤凰架构分布式手册:架构师进阶成神之路

作者头像
愿天堂没有BUG
发布于 2022-10-28 07:54:02
发布于 2022-10-28 07:54:02
9070
举报

架构演进史

架构并不是被发明出来的,而是持续演进的结果。

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

“演进中的架构”是一条重要的逻辑线索就是软件工业对如何拆分业务、隔离技术复杂性的探索。从最初的不拆分,到通过越来越复杂的技术手段逐渐满足了业务的拆分与协作,再到追求隔离掉这些复杂技术手段,将它们掩埋于基础设施之中,到未来(有可能的)重新回到无需考虑算力、无需拆分的云端系统。

如何阅读本书?

一共分为演进中的架构、架构师的视角、分布式的基石、不可变基础设施和技术方法论五部分,每一部分都有相对明确的主题与目标,建议按顺序阅读各部分以获得更有逻辑性的阅读体验。不过每部分内各章节之间并没有明显的前后依赖关系,读者从任何一个感兴趣的章节开始阅读都可以。

凤凰架构

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

目录

其次,我们来看下内容概述

本书是一本以“如何构建一套可靠的大型分布式系统"为叙述主线的技术手册。十多年来一直从事大型企业级软件的架构研发工作,较完整地经历了从最早的大型单体系统到如今基于云原生基础设施的架构演变过程,希望借此机会,系统性地整理相关知识,查漏补缺,将它们都融入既有的知识框架之中,也希望能将这些知识与大家分享讨论。相信要深入理解一门技术,不仅要去看、去读、去想、去用,更要去说、去写。将自己“认为掌握了的"知识叙述出来,尽量将知识说得条理清晰,让他人听得明白,释去心中疑惑,同时把自己的观点交予别人审视,乃至质疑,在此过程之中,自己也会挖掘出很多潜藏在“已知"背后的“未知""-

第一部分演进中的架构

这部分只有第1章,适合所有开发者,但尤其推荐刚刚从单体架构向微服务架构转型的开发者阅读。 第一部分既是全书的绪论,也是对后续将用到的大量名词概念所做的铺垫。这部分没有谈论过于具体的技术,只是着重介绍了软件开发历史中多种主流架构出现的契机、解决的问题以及带来的新缺陷。

服务架构演进史

服务架构演进史

服务架构演进史

第二部分架构师的视角

这部分包括第2一5章,适合所有技术架构师、系统设计与开发人员,主要讨论与风格无关的架构知识。 “架构师"这个词的外延非常宽泛,不同语境中有不同的含义。本书中的技术架构师特指企业架构中面向技术模型的系统设计者,这意味着讨论范围不会涉及贴近企业战略、业务流程的系统分析、信息战略设计等内容,而是聚焦于贴近一线研发人员的技术方案设计者。这部分将介绍一名架构师应该在架构设计时思考哪些问题,有哪些主流的解决方案和行业标准做法,各种方案有什么优缺点,不同的解决方法会带来什么不同的影响,等等,以达到将“架构设计”这种听起来抽象的工作具体化、具象化的目的。 作为后续实践的基础,第二部分的内容与具体的架构风格无关,讨论的是普适的架构技 术与使用技巧。无论你是否关注微服务、云原生这些概念,无论你从事架构设计还是编码开 发,了解这里所列的基础知识,都是有实用价值的。

通信的成本

实现原子性和持久性

全局事务

客户端模式

第三部分 分布式的基石

这部分包括第6一10章,主要面向使用分布式架构的开发人员。 只要选择了分布式架构,无论是SOA、微服务、服务网格或者其他架构风格,涉及与远程服务的交互时,服务的注册发现、跟踪治理、负载均衡、故障隔离、认证授权、伸缩扩展、传输通信、事务处理等一系列问题都是不可避免的。不同的架构风格,其区别是到底要在技术规范上提供统一的解决方案,由应用系统自行解决,还是在基础设施层面将这类问题隔离掉。第三部分将重点讨论这类问题的解决思路、方法和常见工具。

工作实例

工作实例

断路器工作过程时序图

追踪规范化

第四部分 不可变基础设施

这部分包括第11一15章,主要面向基础设施的运维人员、技术平台的开发人员。 “不可变基础设施""这个概念由来已久。2012年Martin Fowler设想的“凤凰服务器[小与2013年Chad Fowler正式提出的“不可变基础设施[2小,都阐明了基础设施不变性带来的益处。在云原生基金会(Cloud Nat ive Comput ing Founxdation,CNCF)所定义的“云原生"概念中,“不可变基础设施"被提升到与微服务平级的重要程度,此时它已不再局限于方便运维、程序升级和部署的手段,而是升华为向应用代码隐藏分布式架构复杂度、让分布式架构得以成为一种可普遍推广的普适架构风格的必要前提。在云原生时代、后微服务时代,软件与硬件之间的界线已经彻底模糊,无论是基础设施的运维人员,抑或是技术平台的开发人员,都有必要深入理解基础设施不变性的目的、原理与实现途径。

封装应用:Docker

隔离与协作

韧性与弹性

通信成本

第五部分 技术方法论

这部分包括第16章,主要面向企业中重要技术的决策者。 本书的主体内容是务实的,偏重具体技术,而非方向理论。但在第16章会集中讨论几点与分布式、微服务、架构等相关的相对务虚的话题。 笔者认为,对于一个技术人员,成长的主要驱动力是实践,是在开发程序、解决问题中增长知识,再将知识归纳、总结、升华成为理论,所以笔者将本章安排到全书的末尾,也是希望大家能先去实践,再谈理论。同时,笔者也认为,对于一名研究人员或者企业中技术方向的决策者,理论与实践都不可缺少,在涉及决策的场景中,成体系的理论知识甚至比实践经验还要关键,因为执行力再强,也必须用在正确的方向上才有价值。如果你对自己的规划是有朝一日从一名技术人员发展成研究或者管理人员,补充这部分知识是必不可少的。

前提:微服务需要的条件

发展的治理

凤凰架构是架构师必读的一本书籍,同时也是架构师进阶上的成功的阶梯。好啦,今天的分享就到这里啦

如何获取:感兴趣的朋友,麻烦帮忙点赞转发,关注我后私信【架构】二字即可获取!

本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 愿天堂没有BUG 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【翻译】XV6-DRAFT as of September 3,2014 第0章 操作系统接口
操作系统接口 操作系统的任务是让多个程序共享计算机(资源),并且提供一系列基于计算机硬件的但更有用的服务。操作系统管理并且把底层的硬件抽象出来,举例来说,一个文字处理软件(例如word)不需要关心计算机使用的是哪种类型的磁盘。操作系统使得硬件可以多路复用,允许许多程序共同使用计算机并且在同一时间上运行。最后,操作系统为程序间的互动提供受控的方法,因此多个程序可以共享数据、协同工作。 计算机操作系统通过接口向用户程序提供服务。设计一个好的接口是一件困难的事情。一方面,我们希望设计出来的接口足够简单且功能单一(
Tencent JCoder
2018/07/02
6980
MIT 6.S081 (BOOK-RISCV-REV1)教材第一章内容 --- 操作系统接口
操作系统的任务是在多个程序之间共享一台计算机,并提供比硬件本身支持的更有用的服务。操作系统管理和抽象底层硬件,例如:
大忽悠爱学习
2023/10/11
4050
MIT 6.S081 (BOOK-RISCV-REV1)教材第一章内容 --- 操作系统接口
【6S.081】Lab1 Xv6 and Unix utilities
我们看要求中,让我们去看user中的调用参数示例,这也是我们后续使用的很多的一个范式。
Skrrapper
2025/06/14
1210
【6S.081】Lab1 Xv6 and Unix utilities
从零实现操作系统-Lab 1: Unix utilities
实现 UNIX 程序 的sleep,使进程睡眠若干个滴答周期(滴答是 xv6 内核定义的时间概念,即来自定时器芯片的两次中断之间的时间。)。代码在 user/sleep.c 中实现。
嵌入式与Linux那些事
2021/09/28
1.2K0
xv6(19) SHELL交互程序
$shell$ 诸位应该很熟悉,它获取控制台的输入,然后执行一定的任务,实现人机交互。本文主要通过 $xv6$ 来看看如何实现一个简单的 $shell$,$shell$ 实现分为两个主要步骤,一解析输入的命令字符串,二执行命令。
rand_cs
2023/12/10
5020
MIT_6.s081_Lab1:Xv6 and Unix utilities
输入 file ./kernel/kernel载入符号表,然后target remote loaclhost:26000即可:
用户7267083
2022/12/08
8980
MIT_6.s081_Lab1:Xv6 and Unix utilities
MIT 6.S081 Lab One -- Util
xv6中的sleep函数本质就是软件定时器的实现,但是其思路并不是在每次时钟中断发生时,唤醒所有到期的定时任务,而是直接唤醒所有睡眠的任务,让其自身去检查是否睡够了,如果没睡够,那么就继续接着睡。
大忽悠爱学习
2023/10/11
6470
MIT 6.S081 Lab One -- Util
6.S081/6.828: 1 Lab Xv6 and Unix utilities
第一个Lab是实现几个shell工具,每个工具都是一个可以独立运行的main函数,会调用系统调用,但其本身并不是系统调用。
冰寒火
2022/10/20
1.1K0
[mit6.s081] 笔记 Lab1: Unix utilities | Unix 实用工具
This lab will familiarize you with xv6 and its system calls.
Miigon
2022/10/27
1.3K0
MIT6.828实验2 —— Lab Shell
xv6中提供有sh.c的实现,除了重定向和管道,还对括号、列表命令、后台命令等做了支持,且整体设计较为复杂。所以我们无需过多参考已有代码,可以选择简单的思路来满足需求,在完成后再去阅读xv6的shell实现。
zhayujie
2020/12/10
1.8K0
Mit6.S081-实验1-Xv6 and Unix utilities
参考:https://pdos.csail.mit.edu/6.828/2020/labs/util.html
全栈程序员站长
2022/11/10
8430
Mit6.S081-实验1-Xv6 and Unix utilities
MIT6.828实验1 —— Lab Utilities
在实验之前,推荐阅读一下官网LEC1中提供的资料。其中Introduction是对该课程的的概述,examples则是几个系统编程的样例,这两部分快速浏览一遍即可。对于xv6 book的第一章,则建议稍微细致地阅读一遍,特别是对fork()、exec()、pipe()、dup()这几个系统调用的介绍,会在后面实验中用到。
zhayujie
2020/06/07
2.5K0
【操作系统】进程间的通信——管道
进程间的通信—管道 管道 进程间的通信(IPC-Inter-Process Communication)有多种方式,管道是其中最基本的方式。 管道是半双工的,即是单向的。 管道是FIFO(先进先出)的。 在实际的多进程间通信时,可以理解为有一条管道,而每个进程都有两个可以使用管道的"端口",分别负责进行数据的读取与发送。 单进程中的管道:int fd[2] 使用文件描述符fd[1],向管道写数据。 使用文件描述符fd[0],从管道中读数据。 注意: 单进程中的管道无实际用处,管道用于多进程间
半生瓜的blog
2023/05/13
7800
【操作系统】进程间的通信——管道
linux系统编程之管道(一):匿名管道和pipe函数
该文介绍了Linux环境下C++编写高性能可扩展的进程通信程序的设计和实现,主要包括管道、命名管道、信号、共享内存、消息队列、互斥量等进程间通信方式,以及通过Boost.Asio库实现的高性能TCP/UDP通信,并结合实际应用场景给出了性能测试和对比分析。
s1mba
2017/12/26
2.6K0
linux系统编程之管道(一):匿名管道和pipe函数
MIT_6.s081_Lab
输入 file ./kernel/kernel载入符号表,然后target remote loaclhost:26000即可:
用户7267083
2023/03/20
1.4K0
MIT_6.s081_Lab
xv6(13) 文件系统:文件描述符&系统调用
本文需要接着系统调用,也是接着 $xv6$ 文件系统的最后一层,讲述各种具体的文件系统调用是怎么实现的,文件描述符,$inode$,文件之间到底有什么关系,创建打开关闭删除文件到底是何意义,文件删除之后数据就不存在了吗,链接又作何解释等等问题,看完本文相信你能找到答案。
rand_cs
2023/12/06
7580
Linux 的进程间通信:管道
本文介绍了管道(pipe)在Linux系统中的实现方式,从三个方面进行了详细阐述:管道的原理,命名管道,以及通过匿名管道进行的进程间通信。同时,文章还探讨了管道在Linux系统中的实际应用,包括shell脚本、cron任务以及Linux中的各种守护进程等。
邹立巍
2017/07/31
8.7K3
Linux 的进程间通信:管道
【进程间通信】IPC、管道pipe、命名管道FIFO
Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。
mindtechnist
2024/08/08
3940
【进程间通信】IPC、管道pipe、命名管道FIFO
xv6(17) 进程三:代码部分
本文接着上文深入理解进程之数据结构篇来讲述有关进程的一些操作,主要就是创建,调度切换,加载程序,休眠唤醒,等待退出等等,一个一个来看
rand_cs
2023/12/07
5080
Unix-Linux编程实践教程-chapter10-io
Unix默认规定程序从文件描述符0读取数据,写数据到文件描述符1,将 错误信息输出到文件描述符2.这三个文件描述符称为标准输入,标准输出 和标准错误输出
零式的天空
2022/03/02
6240
相关推荐
【翻译】XV6-DRAFT as of September 3,2014 第0章 操作系统接口
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档