阅读笔记——凤凰架构(第1章)

第1章 服务架构演进史

1.1 原始分布式时代

调用远程方法(Remote Method Invocation,RMI)

调用远程方法虽然与调用本地方法只有两字之差,但复杂度却不可同日而语。

且不说远程方法不能再依靠本地方法那些以内联为代表的传统编译优化来提升速度,光是“远程”二字带来的网络新问题,都值得反复思考:

  • 远程的服务在哪里(服务发现)
  • 有多少个机器可以提供服务(负载均衡)
  • 网络出现分区、超时或者服务出错了怎么办(熔断、隔离、降级)
  • 方法的参数与返回的结果如何表示(序列化协议)
  • 信息如何传输(传输协议)
  • 服务权限如何管理(认证、授权)
  • 如何保证通信安全(网络安全层)
  • 如何令调用不同机器的服务返回相同的结果(分布式数据一致性)

通过大量学者对分布式运算环节(Distributed Computing Environment,DCE)的研究,得出了一个价值千金的教训:

某个功能是否能够进行分布式,并不意味着它就应该进行分布式,强行追求透明的分布式操作,只会自寻苦果。

1.2 单体系统时代

单体架构也是大部分软件开发者都学习、实践过的一种软件架构,在许多地方也将这种架构成为“巨石架构”(Monolithic Application)。
对于小型系统,单台机器就足以支撑其良好运行的系统,不仅易于开发、测试、部署,且由于系统中各个功能、模块、方法的调用都是进程内调用,不会发生进程间通信(Inter-Process Communication,IPC),因此连运行效率也是最高的。
但是单体应用也存在着比较多的缺陷:

  • 牵一发而动全身。所有代码都在同一个进程内,当其中任何一部分代码出现缺陷,过度消耗了进程空间内的资源,所造成的影响也是全局性的、难以隔离的。(内存泄漏、线程爆炸、阻塞、死循环等),这都会影响整个程序,而不仅仅是影响某一个功能、模块本身的运行。
  • 隔离性差。所有代码共享一个进程,不能隔离,也就无法做到单独停止、更新、升级某一部分代码,当需要升级一部分功能时,往往需要制定专门的体积更新计划,对于可维护性而言,单体系统也不占优势。
  • 技术异构性差。每个模块的代码通常都需要使用一样的程序语言,乃至一样的编程框架去开发。

1.3 SOA时代

面向服务架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。

这里主要介绍三种有代表性的架构模式。

烟囱式架构

这种架构方式也称为信息孤岛,即将一个公司中两个完全没有交互的部门分拆到不同的楼里办公,让他们使用独立的数据库和服务器。但是这里有个致命的问题,企业中真的存在完全没有交互的部门吗,这种“老死不相往来”的系统,显然不可能是企业所希望见到的。

微内核架构

既然在烟囱架构中,没有业务往来关系的系统也可能需要共享人员、组织、权限等一些公共的主数据,那不妨将这些主数据,连同其他可能被各个子系统用到的公共服务、数据、资源集中到一块,组成一个被所有业务系统共同依赖的核心,具体的业务系统以插件模式的形式存在,这样就可提供可扩展的、灵活的、天然隔离的功能特性,即微内核架构。
微内核基本架构示意图
不过,微内核架构也有局限性,它假设系统中各个插件模块之间互不认识,且不可预知系统将安装哪些模块,因此这些插件可以访问内核中一些公共的资源,但不会直接交互。

事件驱动架构

为了让子系统互相通信,一种可行的方案是在子系统之间建立一套事件队列管道(Event Queue),来自系统外部的消息将以事件的形式发送至管道中,各个子系统可以从管道里获取自己感兴趣、能够处理的事件消息,也可以为世间新增或者修改其中的附加信息,甚至可以自己发布一些新的事件到管道队列中去。
时间驱动架构

1.4 微服务时代

微服务是一种软件开发技术,是SOA的一种变体。

微服务是一种通过小型服务组合来构建单个应用的架构风格,这些服务围绕业务能力而非特定的技术标准来构建。各个服务可以采用不同的编程语言、不同的数据存储技术,运行在不同的进程之中。服务采取轻量级的通信机制和自动化的部署机制来实现通信与运维。下面列举了微服务的九个核心业务与技术特征。

  • 围绕业务能力结构。 有怎样结构、规模、能力的团队,就会产生对应结构、规模、能力的产品。
  • 分散治理。 服务对应的开发团队有直接对服务运行质量负责的责任,也有不受外界干预地掌控服务各个方面的权力,譬如选择与其他服务异构的技术来实现自己的服务。
  • 通过服务来实现自治的组件。 服务是进程外的组件,通过远程调用来提供功能。
  • 产品化思维。 避免把软件研发视作要去完成某种功能,而是视作一种持续改进、提升的过程。
  • 数据去中心化。 微服务明确提倡数据应该按领域分散管理、更新、维护、存储。
  • 强终端弱管道。 服务需要额外通信能力,就应该在服务自己的EndPoint上解决,而不是在通信管道上一揽子处理。
  • 容错性设计。 不再虚幻地追求服务永久稳定,而是接受服务总会出错的现实,要求在微服务设计中,能够有自动的机制对其以来的服务进行快速故障检测。
  • 演进式设计。 容错性设计承认服务会出错,演进式设计则承认服务会被报废淘汰。
  • 基础设施自动化。 基础设施自动化,如CI/CD的长足发展,显著减少了构建、发布、运维工作的复杂性。

1.5 后微服务时代

微服务的流行,微服务架构的缺点也慢慢的暴露了出来,比如:

  • 侵入式太强。 需要在业务代码里面加入非业务代码的逻辑(如限流、降级等)
  • 多语言支持。 需要维护不同语言和非业务代码的成本。
  • 学习框架成本高。 组件较多,需要学习的成本比较高。

服务网格(Service Mesh)将“选择什么通信协议” “怎样调度流量” “如何认证授权”之类的技术问题隔离于程序代码之外。使得微服务只需要考虑业务本身的逻辑,这也是最理想的智能终端解决方案。
边车代理流量示意图

1.6 无服务时代

人们最开始研究分布式框架,是因为单台机器的性能无法满足系统的运行需求,尽管在后来架构演进过程中,容错能力、技术异构、职责划分等各方面因素都称为架构需要考虑的问题,但获得更好的性能在架构设计需求中依然占很大的比重。对软件研发而言,不去做分布式无疑是最简单的,如果单台服务器的性能可以是无限的,那架构演进的结果肯定会与今天有很大差别。
可以将无服务架构类比于软件开发从汇编语言踏进高级语言的发展过程。无服务主要设计两块内容,后端设备和函数。

  • 后端设备。 是指数据库、消息队列、日志、存储等这类用于支撑业务逻辑运行,但本身无业务含义的技术组建。
  • 函数。 业务逻辑代码,无服务的函数运行在云端不必考虑算力,也不必考虑容量规划,再无服务中将其称为“函数即服务”。
<think>好的,用户现在想了解如何搭建系统,并询问可以买哪些书来学习。首先,我需要理解用户的具体需求。他们提到的“搭建系统”可能是指软件系统、信息系统,还是更偏向于硬件基础设施?根据之前的对话历史,用户之前询问过《业务需求调研清单》,这可能意味着他们现在可能是在规划或设计一个企业级的系统,需要从业务需求出发,进而学习如何实际搭建系统。因此,用户可能处于从需求分析转向系统设计或开发的阶段,可能是一位项目经理、业务分析师,或者刚开始学习系统搭建的新手。 接下来,我需要确定用户的学习背景和目标。如果他们已经有技术背景,可能需要推荐更深入的编程或架构书籍;如果是非技术背景,可能需要从基础开始,涵盖系统设计的基本概念和流程。用户可能希望有一个结构化的学习路径,从理论到实践,逐步掌握系统搭建的各个方面。 然后,我需要考虑推荐的书籍范围。系统搭建涉及多个方面:需求分析、架构设计、开发、部署、运维等。可能分为几个类别,比如系统设计基础、软件架构、实战案例、基础设施、扩展知识等。每个类别推荐2-3本经典书籍,确保覆盖全面且权威。 同时,用户可能需要一些实践指导,所以推荐包含实战项目和案例分析的书籍会更实用。此外,考虑到用户可能对云计算和DevOps感兴趣,加入相关书籍也是有必要的,因为现代系统搭建常常涉及这些技术。 还需要注意书籍的易读性和适用性。例如,《系统设计面试》虽然主要面向面试,但其中的方法论对实际设计系统有帮助;《凤凰架构》适合理解分布式系统的演进。同时,推荐一些经典书籍,如《设计模式》和《重构》,这些是软件开发中的必读之作,能够帮助用户写出更高质量的代码。 最后,补充一些学习建议,比如结合项目实践、参与开源、关注行业动态等,帮助用户将理论知识应用到实际中,并保持技术更新。确保回答结构清晰,分点明确,便于用户根据自身情况选择适合的书籍和学习路径。</think>以下是为系统搭建学习推荐的技术书籍清单及学习路径,涵盖从基础理论到实战落地的关键知识体系: --- ### **一、系统设计基础入门** 1. **《系统设计面试》**(Alex Xu) - 亮点:通过「需求估算→架构设计→技术选型」完整流程,解析Twitter/短链服务等真实案例 - 配套资源:GitHub开源项目案例库(含代码实现) 2. **《凤凰架构》**(周志明) - 详解分布式系统演进史:单体→微服务→Service Mesh→无服务架构 - 附实战节:Spring Cloud/Dubbo架构对比实验 --- ### **二、软件架构进阶** 3. **《架构整洁之道》**(Robert C. Martin) - 核心方法:领域驱动设计(DDD)+六边形架构 - 企业级案例:医疗系统组件化拆分实操 4. **《Designing Data-Intensive Applications》中文版** - 数据系统设计圣经:从数据库原理到流处理框架对比(Kafka vs Pulsar) - 附Redis集群设计实验手册 --- ### **三、实战型系统构建** 5. **《大型网站技术架构演进与性能优化》**(李智慧) - 淘宝双11架构演进全解析:LVS→CDN→异地多活 - 压力测试工具链:JMeter+Prometheus监控方案 6. **《Kubernetes权威指南》**(龚正等) - 云原生系统搭建指南:容器编排+服务网格实战 - 附Minikube本地实验环境配置教程 --- ### **四、基础设施与DevOps** 7. **《Site Reliability Engineering》中文版** - Google SRE方法论:容量规划/故障注入/混沌工程 - 系统高可用设计模式:熔断/降级/限流 8. **《持续交付》**(Jez Humble) - 自动化部署流水线设计:Jenkins Pipeline进阶技巧 - 案例:金融行业合规发布流程实现 -- ### **五、扩展知识体系** 9. **《领域驱动设计》**(Eric Evans) - 复杂业务系统建模指南:限界上下文划分策略 - 附事件风暴(Event Storming)工作坊模板 10. **《企业IT架构转型之道》**(钟华) - 阿里巴巴中台战略落地方法论 - 技术中台与业务中台协同设计 -- ### **学习建议组合包** ```markdown 1. **新手快速通道** 《系统设计面试》→《凤凰架构》→《Kubernetes权威指南》 2. **全栈工程师路径** 《架构整洁之道》+《Designing Data-Intensive Applications》+《持续交付》 3. **CTO/架构师书单** 《领域驱动设计》+《企业IT架构转型之道》+《Site Reliability Engineering》 ``` --- ### **配套工具资源** - 在线实验环境:Katacoda(免费K8s沙箱) - 架构图工具:Draw.io/Excalidraw(支持C4模型) - 系统监控方案:Grafana+Zabbix开源部署指南 (需要获取书籍电子版/配套源码资源,可回复告知具体书目,我将提供官方资源获取路径)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值