1) 架构设计基础,包括架构设计相关概念、历史、原则、基本方法,让架构设计不再神秘。
2) 架构设计流程,描述通用的架构设计流程,让架构设计不再依赖天才的创作,而是有章可循。
3) 架构设计专题:包括高性能架构设计、高可用架构设计、可扩展架构设计,这些模式可以直接参考和应用。
4) 架构设计实战,包括重构、开源方案引入、架构发展路径、互联网架构模板等。
架构设计是技术人员成长和晋升过程中必须掌握的技能,但目前业界缺乏架构师学习和培养方面体系化的知识和实践的指导,本书结合作者多年在架构设计方面的学习、思考、实践,提出了完整的一套架构设计方法论,包括什么是架构、架构设计的目的、架构设计原则、架构设计流程、架构设计模式和技巧、互联网公司技术演进等内容。这套架构设计方法论适合不同行业,比如互联网、企业应用等;也适合不同的技术领域,比如后端架构设计、前端架构设计、客户端架构设计、测试平台架构设计、运维平台架构设计等。
本书由浅入深地阐述了架构设计的相关内容,比较适合以下类型的读者:
· 没有架构设计经验,但对架构设计非常有兴趣,希望学习架构设计技术,提升技术能力,成为“大厂面霸”的读者;
· 已经尝试了一些架构设计,但挖了各种“坑”或踩了各种“坑”,希望知道“为什么”的技术人员;
· 具备一定的架构设计经验,想进一步系统化地提升架构设计能力,成为令人羡慕的“高级技术专家”“资深技术专家”的读者。
目录
第1部分 概念和基础
第1章 架构基础
1.1 “架构”到底指什么
1.1.1 系统与子系统
1.1.2 模块与组件
1.1.3 框架与架构
1.1.4 重新定义架构
1.2 架构设计的目的
1.2.1 架构设计的误区
1.2.2 以史为鉴
1.2.3 架构设计的真正目的
1.3 复杂度来源
1.3.1 高性能
1.3.2 高可用
1.3.3 可扩展性
1.3.4 低成本
1.3.5 安全
1.3.6 规模
1.4 本章小结
第2章 架构设计原则
2.1 合适原则
2.2 简单原则
2.3 演化原则
2.4 本章小结
第3章 架构设计流程
3.1 有的放矢―识别复杂度
3.2 按图索骥―设计备选方案
3.3 深思熟虑―评估和选择备选方案
3.3.1 业务背景
3.3.2 备选方案设计
3.3.3 备选方案360度环评
3.4 精雕细琢―详细方案设计
3.5 本章小结
第2部分 高性能架构模式
第4章 存储高性能
4.1 关系数据库
4.1.1 读写分离
4.1.2 分库分表
4.1.3 实现方法
4.2 NoSQL
4.2.1 K-V存储
4.2.2 文档数据库
4.2.3 列式数据库
4.2.4 全文搜索引擎
4.3 缓存
4.3.1 缓存穿透
4.3.2 缓存雪崩
4.3.3 缓存热点
4.4 本章小结
第5章 计算高性能
5.1 单服务器高性能
5.1.1 PPC
5.1.2 prefork
5.1.3 TPC
5.1.4 prethread
5.1.5 Reactor
5.1.6 Proactor
5.2 集群高性能
5.2.1 负载均衡分类
5.2.2 负载均衡架构
5.2.3 负载均衡的算法
5.3 本章小结
第3部分 高可用架构模式
第6章 CAP
6.1 CAP理论
6.1.1 一致性(Consistency)
6.1.2 可用性
6.1.3 分区容忍性(Partition Tolerance)
6.2 CAP应用
6.2.1 CP―Consistency/Partition Tolerance
6.2.2 AP―Availability/Partition Tolerance
6.3 CAP细节
6.4 ACID、BASE
6.4.1 ACID
6.4.2 BASE
6.5 本章小结
第7章 FMEA
7.1 FMEA介绍
7.2 FMEA方法
7.3 FMEA实战
7.4 本章小结
第8章 存储高可用
8.1 主备复制
8.1.1 基本实现
8.1.2 优缺点分析
8.2 主从复制
8.2.1 基本实现
8.2.2 优缺点分析
8.3 主备倒换与主从倒换
8.3.1 设计关键
8.3.2 常见架构
8.4 主主复制
8.5 数据集群
8.5.1 数据集中集群
8.5.2 数据分散集群
8.5.3 分布式事务算法
8.5.4 分布式一致性算法
8.6 数据分区
8.6.1 数据量
8.6.2 分区规则
8.6.3 复制规则
8.7 本章小结
第9章 计算高可用
9.1 主备
9.2 主从
9.3 对称集群
9.4 非对称集群
9.5 本章小结
第10章 业务高可用
10.1 异地多活
10.1.1 异地多活架构
10.1.2 异地多活设计技巧
10.1.3 异地多活设计步骤
10.2 接口级的故障应对方案
10.2.1 降级
10.2.2 熔断
10.2.3 限流
10.2.4 排队
10.3 本章小结
第4部分 可扩展架构模式
第11章 可扩展模式
11.1 可扩展概述
11.2 可扩展的基本思想
11.3 可扩展方式
11.4 本章小结
第12章 分层架构
12.1 分层架构类型
12.2 分层架构详解
12.3 本章小结
第13章 SOA架构
13.1 SOA历史
13.2 SOA详解
13.3 本章小结
第14章 微服务
14.1 微服务历史
14.2 微服务与SOA的关系
14.3 微服务的陷阱
14.4 微服务最佳实践
14.4.1 服务粒度
14.4.2 拆分方法
14.4.3 基础设施
14.5 本章小结
第15章 微内核架构
15.1 基本概念
15.2 设计关键点
15.3 OSGi架构简析
15.4 规则引擎架构简析
15.5 本章小结
第5部分 架构实战
第16章 消息队列设计实战
16.1 需求
16.2 设计流程
16.2.1 识别复杂度
16.2.2 设计备选方案
16.2.3 评估和选择备选方案
16.2.4 细化方案
16.3 本章小结
第17章 互联网架构演进
17.1 技术演进
17.1.1 技术演进的动力
17.1.2 淘宝
17.1.3 手机QQ
17.1.4 微信
17.2 技术演进的模式
17.3 互联网业务发展
17.3.1 业务复杂性
17.3.2 用户规模
17.3.3 量变到质变
17.4 本章小结
第18章 互联网架构模板
18.1 总体结构
18.2 存储层技术
18.2.1 SQL
18.2.2 NoSQL
18.2.3 小文件存储
18.2.4 大文件存储
18.3 开发层技术
18.3.1 开发框架
18.3.2 Web服务器
18.3.3 容器
18.4 服务层技术
18.4.1 配置中心
18.4.2 服务中心
18.4.3 消息队列
18.5 网络层技术
18.5.1 负载均衡
18.5.2 CDN
18.5.3 多机房
18.5.4 多中心
18.6 用户层技术
18.6.1 用户管理
18.6.2 消息推送
18.6.3 存储云与图片云
18.7 业务层技术
18.8 平台技术
18.8.1 运维平台
18.8.2 测试平台
18.8.3 数据平台
18.8.4 管理平台
18.9 本章小结
第19章 架构重构
19.1 有的放矢
19.2 合纵连横
19.2.1 合纵
19.2.2 连横
19.3 运筹帷幄
19.4 文武双全―项目管理+技术能力
19.5 本章小结
第20章 开源系统
20.1 选:如何选择一个开源项目
20.1.1 聚焦是否满足业务
20.1.2 聚焦是否成熟
20.1.3 聚焦运维能力
20.2 用:如何使用开源方案
20.2.1 深入研究,仔细测试
20.2.2 小心应用,灰度发布
20.2.3 做好应急,以防万一
20.3 改:如何基于开源项目做二次开发
20.3.1 保持纯洁,加以包装
20.3.2 发明你要的轮子
20.4 本章小结
架构是一门艺术,也是一门技术,它不仅包含丰富的知识点,更考验架构师的综合能力。本书所包含的知识点正是架构师需要掌握的必备技能,读者加以学习并灵活应用,一定能成为优秀的架构师。运华是我非常敬佩的架构专家,能把学习架构的脉络梳理得如此清晰,可见功力深厚。
—— 黄勇,特赞科技CTO,《架构探险》作者
建筑的命运只有2种:被拆(被迭代)或被保护起来。架构作为软件系统支撑骨架,与建筑类似,或被迭代,或作为经典持续被技术人员学习。如何设计系统架构,什么才是优秀的系统架构,本书以丰富的案例,由浅入深、层层递进,让技术人员充分学习架构及领略架构之美。
—— 熊普江,腾讯布道师&腾讯云高级总监,《技术运营:海量资源精细化运营实战》作者
按理说自有软件以来就有架构设计,有人拿建筑架构类比软件架构,恐未能尽其意。作者谈架构定义、原则、模式和案例,深入浅出,为有志于做架构工作的朋友提供了一条路径。或许读者在实践之后偶尔复读有新的感受,这大概是写作的极大安慰了吧。
—— 于君泽(右军),资深技术专家,《深入分布式缓存》作者
老子曰:合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。软件架构是创建优秀软件产品的基础。一个好的架构可以让软件产品取得成功,但是错误的架构一定会失败。每个开发者都需要成长,了解并掌握软件架构设计。
我感受到了本书的真诚,运华将软件架构的复杂性和严谨的理论,提炼成为日常软件工程的务实实践和清爽易读的文字。为你提供了从概念到实践的方法,从代码视角转向架构视角和设计视角,适合所有要构建一款好软件的技术人,成为强大的程序员、架构师和技术领导者。
—— 杜江(洛逸),21CTO社区创始人,今日头条特卖原技术负责人,《PHP与MySQL高性能应用开发》、《PHP5完全攻略》等畅销书作者
在很多人眼中,架构师极其神秘,每天做什么,需要具备哪些能力,众说纷纭、莫衷一是。在我看来,架构师虽然是一个技术职位,但综合能力要求很高,是胸怀理想的现实主义者,是团队中的技术领导者,需要具备突出的软硬技能。许多人想成为架构师,却不得其法,本书提纲挈领,从概念到模式并结合实战,为我们掀开神秘面纱,展示架构师的全景视图,相信会成为很多工程师进阶架构师的入门宝典。可惜当初我当架构师的时候,没有这样接地气的好书,如今的同行们有福了!
—— 史海峰,贝壳金服 2B2C CTO,微信公众号“IT民工闲话”作者