本书主要讲解互联网架构的设计初衷、原理和模式。全书介绍了互联网架构的演变过程与分层、分割、分片、缓存、并行、异步、隔离、容错、安全、治理等设计模式的应用场景和作用,还介绍了前端应用层、接入层、服务层、服务治理、分布式锁、分布式ID、分布式事务、分布式消息队列、分布式缓存、数据持久化以及DevOps等技术的组成结构、运行原理和应用方案。
本书使用的是Java语言相关的技术生态,适合希望掌握互联网架构的IT开发工程师和架构师阅读。通过本书,读者可以对互联网分布式架构有较全面的了解。
当前越来越多的业务使用了公有云。公有云将大型公司应对海量互联网流量的经验和措施封装成产品,降低了复杂度,使IT系统的开发专注于业务层面,但很多人也因此没有了试错的机会,知其然不知其所以然。另一方面,互联网分布式架构更加复杂,组织结构分工更细,很多开发人员或者架构师在工作中只能关注一点或者一个层次。许多技术人员都非常希望能看到更多介绍架构设计出发点、原理和机制,讲述分布式架构宏观场景的书籍。
笔者将这几年遇到的几个互联网业务的解决思路和方案整理成PPT,一直有总结成书的想法,却被琐事所困,无法静下心来进一步归纳整理,如今终于有了机会。笔者希望能够尽可能从较高的角度,在每一个系统分层结构中讲解原理、实现方案和技术路线。
事情看着容易,做着难,下笔成文时,着实痛苦。作为一本想要描述互联网分层架构的书,涉及面广,还有诸如系统安全、大数据、架构实例方面的内容因为时间和精力原因暂未涵盖。本书内容也难免有见识不到、疏漏之处,敬请指正。
内容组织
本书主要讲解互联网架构设计的初衷、原理和架构的模式。前两章简单介绍了互联网架构的目标、架构演变过程与主要设计模式,后续几章则按照系统的分层模式,从前端到后端,从开发到运维,对每一层的主要解决问题、原理、技术路线进行说明。
第1章“概述”,主要介绍互联网架构的业务特点、目标、衡量办法、方法论和核心架构的演变过程。
第2章“互联网架构设计模式”,归纳了互联网架构的分层、分割、分片、缓存、并行、异步、隔离、容错、安全、治理等主要设计模式,并阐述了每种模式的应用场景和作用。
第3章“前端架构”,主要介绍前端的架构模式,包括前端开发模式的演变过程、响应式网站的设计办法、单页面架构、微前端架构、App、公众号、小程序与快应用的开发模式、BFF架构以及前端优化办法。
第4章“接入架构”,主要介绍接入层的组成,包括DNS、CDN、反向代理、服务网关以及企业内部系统集成的架构和实现。
第5章“服务架构”,主要描述微服务架构Spring Cloud和Dubbo以及服务网格架构Istio的组成结构和运行机制。
第6章“服务治理”,介绍常见的服务治理组件,包括配置中心、流量控制、服务追踪等组件的构成和原理,涉及Apollo、Disconf、Spring Cloud Config、Hystrix、sentinel、Resilience4j、Zipkin等中间件。
第7章“分布式处理”,补充介绍分布式处理中的必备组件,包括分布式锁、分布式ID、高性能有界队列Disruptor的设计目标和技术架构。
第8章“分布式事务”,主要描述分阶段提交、补偿等分布式事务模式,介绍了分布式事务的最终一致性解决方案以及Seata和Servicecomb-Saga两种开源分布式事务中间件。
第9章“分布式消息队列”,介绍消息队列解决的问题和应用场景,消息传递技术的应用模式,消息总线的用途和架构,同时还介绍了RocketMQ的组成和原理,以及Spring Cloud消息传递领域的三个组成部件Spring Integration、Spring Cloud Stream和Spring Cloud Bus。
第10章“分布式缓存”,介绍缓存的分类、应用架构和应用缓存时常见的问题和解决方案,也介绍了Redis缓存中间件的原理和集群结构。
第11章“数据持久化”,介绍互联网分布式系统的整体数据架构,Raid磁盘阵列和DAS、NAS、SAN、OSS等存储技术,Swift OSS的运行机制,关系数据库的读写分离、冷热分离、分库分表和高可用方案。
第12章“DevOps”,主要介绍DevOps的含义、工具和生态,并讲解了包括环境、协作、开发、发布、测试、运维等DevOps基础环节涉及的工具、技术和集成方法。
致谢
感谢我的家人、朋友和同事们,谢谢你们的支持和建议。本书的出版尤其要感谢机械工业出版社的车忱编辑,车老师在书籍选题、章节编排以及内容校阅等方面给了我非常多的建议和帮助。
富亚军,HPE资深架构师。从事企业级软件设计和项目管理20多年,组织和设计开发了多个大型金融系统,具有处理高并发、大流量互联网业务的一线经验。
序
前言
第1章 概述1
11 互联网业务特点1
12 互联网架构思维2
13 互联网架构目标与度量2
14 互联网架构方法论4
141 CAP模型4
142 AKF Scale Cube扩展立方体8
15 互联网核心架构的演变9
151 Monolith单体架构10
152 Microservice微服务架构11
153 Microservice与SOA14
154 Servicemesh服务网格架构16
155 Cloud Native云原生架构19
第2章 互联网架构设计模式23
21 架构设计的切入点23
22 互联网架构的典型模式23
221 分层23
222 分割25
223 分片26
224 缓存27
225 并行27
226 异步28
227 隔离29
228 容错32
229 安全33
2210 治理33
第3章 前端架构35
31 前端应用35
32 前端开发模式35
321 抽象DOM模式35
322 MVC模式36
323 MVP模式36
324 MVVM模式37
325 Virtual DOM38
326 组件化编程39
33 响应式网站设计40
331 服务端响应与客户端响应41
332 响应式JS41
333 响应式CSS41
334 响应式图片41
335 响应式布局41
34 单页面架构43
341 单页面应用的定义43
342 SPA的优缺点43
343 服务端渲染44
344 初始页面优化44
345 地址堆栈管理45
35 微前端架构45
351 微前端的定义45
352 微前端的作用45
353 技术发展路线45
354 微前端的特点46
355 微前端的技术架构46
36 移动App开发47
361 Native App47
362 Hybrid App47
37 公众号、小程序与快应用的开发49
371 公众号开发49
372 小程序开发49
373 快应用开发50
374 多端开发框架50
38 服务于前端的后端架构BFF51
381 BFF的用途51
382 前后端同构51
383 BFF与Gateway52
39 前端优化52
391 前端性能优化52
392 搜索引擎优化55
393 网站运营优化55
第4章 接入架构57
41 整体接入架构57
42 DNS解析与负载均衡57
421 DNS域名解析57
422 DNS负载均衡58
43 CDN内容分发网络59
431 CDN的作用59
432 CDN的组成结构60
433 内容加速原理60
434 CDN的功能架构61
44 反向代理62
441 正向代理与反向代理62
442 负载均衡63
443 Nginx应用架构70
45 服务网关75
451 服务网关与微服务75
452 服务网关的功能架构76
453 服务网关的技术架构80
454 开源服务网关80
46 内部系统集成89
第5章 服务架构91
51 服务端架构生态91
52 Spring Cloud91
521 Spring Cloud总体架构91
522 Spring Cloud核心构成与原理92
53 阿里的微服务中间件Dubbo96
531 Dubbo整体架构96
532 Dubbo关联的中间件和技术98
533 Dubbo RPC调用过程104
534 Dubbo面临的挑战110
54 服务网格中间件Istio111
541 Istio总体架构111
542 Istio Envoy114
543 Istio Pilot115
544 Istio Mixer117
545 Istio Citadel118
546 跨集群服务治理119
547 Istio面临的挑战120
第6章 服务治理121
61 配置中心121
611 配置中心的功能架构121
612 配置中心的技术架构121
613 百度的配置中心Disconf123
614 携程的配置中心Apollo124
615 Spring Cloud Config126
62 流量控制127
621 限流算法127
622 Spring Cloud流量控制中间件Hystrix129
623 阿里的流量控制中间件sentinel135
624 新一代流量控制中间件Resilience4j141
63 服务追踪146
631 服务调用过程与追踪要素147
632 服务追踪的系统组成149
633 服务追踪中间件Zipkin150
第7章 分布式处理152
71 分布式锁152
711 分布式锁的设计目标152
712 分布式锁的技术架构152
72 分布式ID155
721 分布式ID的设计目标155
722 分布式ID的技术架构156
73 高性能有界队列Disruptor161
731 Disruptor的设计目标161
732 Disruptor的主体结构163
第8章 分布式事务165
81 分布式事务的技术背景165
82 基于分阶段提交的事务165
821 两阶段提交166
822 三阶段提交167
83 基于补偿的事务168
831 Saga模式169
832 最大努力通知模式173
833 TCC模式173
84 基于可靠消息队列的事务176
85 最终一致性对账处理177
86 阿里的分布式事务中间件Seata179
861 Seata AT模式的组成架构179
862 Seata AT模式的运行原理180
863 Seata AT模式的隔离机制183
864 Seata AT模式的特点186
87 华为的分布式事务中间件Servicecomb-Saga186
871 组成架构186
872 运行原理187
第9章 分布式消息队列190
91 消息队列的应用场景190
92 消息传递技术192
921 管道和过滤器模式192
922 消息通道193
923 消息193
924 消息路由196
925 消息转换199
926 消息端点199
927 消息管理201
93 消息总线202
931 请求应答模式203
932 消息总线架构207
94 阿里的消息中间件RocketMQ209
941 整体结