从零开始学架构:照着做,你也能成为架构师


从零开始学架构:照着做,你也能成为架构师

文章插图
从零开始学架构:照着做 , 你也能成为架构师《从零开始学架构:照着做 , 你也能成为架构师》
自成一派的架构设计方法论 , 教你体系化的架构设计技能
李运华 着
ISBN 978-7-121-34791-7
2018年9月出版
【从零开始学架构:照着做,你也能成为架构师】定价:99.00元
324页
16开
基本介绍书名:从零开始学架构:照着做 , 你也能成为架构师
作者:李运华
ISBN:978-7-121-34791-7
页数:324
定价:99.00元
出版社:电子工业出版社
出版时间:2018.9
装帧:平装
开本:16开
内容提要架构设计是技术人员成长和晋升过程中必须掌握的技能 , 但目前业界缺乏架构师学习和培养方面体系化的知识和实践的指导 , 本书结合作者多年在架构设计方面的学习、思考、实践 , 提出了完整的一套架构设计方法论 , 包括什幺是架构、架构设计的目的、架构设计原则、架构设计流程、架构设计模式和技巧、网际网路公司技术演进等内容 。这套架构设计方法论适合不同行业 , 比如网际网路、企业套用等;也适合不同的技术领域 , 比如后端架构设计、前端架构设计、客户端架构设计、测试平台架构设计、运维平台架构设计等 。本书由浅入深地阐述了架构设计的相关内容 , 比较适合以下类型的读者:· 没有架构设计经验 , 但对架构设计非常有兴趣 , 希望学习架构设计技术 , 提升技术能力 , 成为“大厂面霸”的读者;· 已经尝试了一些架构设计 , 但挖了各种“坑”或踩了各种“坑” , 希望知道“为什幺”的技术人员;· 具备一定的架构设计经验 , 想进一步系统化地提升架构设计能力 , 成为令人羡慕的“高级技术专家”“资深技术专家”的读者 。目录第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 NoSQL4.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 PPC5.1.2 prefork5.1.3 TPC5.1.4 prethread5.1.5 Reactor5.1.6 Proactor5.2 集群高性能5.2.1 负载均衡分类5.2.2 负载均衡架构5.2.3 负载均衡的算法5.3 本章小结第3部分 高可用架构模式第6章 CAP6.1 CAP理论6.1.1 一致性(Consistency)6.1.2 可用性6.1.3 分区容忍性(Partition Tolerance)6.2 CAP套用6.2.1 CP—Consistency/Partition Tolerance6.2.2 AP—Availability/Partition Tolerance6.3 CAP细节6.4 ACID、BASE6.4.1 ACID6.4.2 BASE6.5 本章小结第7章 FMEA7.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 手机QQ17.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 SQL18.2.2 NoSQL18.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 CDN18.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 本章小结作者简介阿里巴巴资深技术专家专注于Java、Linux、MySQL、开源技术、系统分析、架构设计 , 热爱技术 , CSDN社区之星 , CSDN部落格认证专家 , UC资深软体工程师前言为什幺写这本书每个程式设计师心中都有一个成为架构师的梦想 , 梦想是美好的 , 但道路是曲折的 。我在2006年开始参与架构设计 , 原本以为学习架构设计就像学习一门程式语言一样 , 先学习基本的语法 , 再研究细节和原理 , 然后实践一下就能够快速掌握 。但真正实践后才发现 , 架构设计的难度和複杂度要高很多 。从最早开始接触架构设计 , 到自我感觉初步完整掌握架构设计 , 至少花费了6年时间 。等到自我感觉彻底掌握架构设计的精髓 , 至少花费了8年时间(当然 , 在这个过程中我不是一直在做架构设计) 。我曾经以为是自己天资愚笨才会这样 , 后来我带了团队 , 看到几乎每个程式设计师在尝试架构设计的时候 , 都面临着我遇到过的各种困惑和瓶颈 。特别是我作为职业等级晋升评审的时候 , 发现很多同学技术能力很强 , 业务也不错 , 但却卡在了架构设计这部分 。我意识到这应该不是个人天资的问题 , 而是架构设计本身的一些特性导致的 。我总结了几个架构设计相关的特性 。1. 架构设计的思维和程式设计的思维差异很大 。架构设计的关键思维是判断和取捨 , 程式设计的关键思维是逻辑和实现 。很多程式设计师在转变为架构师后 , 很难一开始就意识到这个差异 , 还是按照写代码的方式去思考架构 , 这样会导致很多困惑 。2. 架构设计没有体系化的培训和训练机制 。大学的课程几乎没有架构设计相关的课程 , 架构设计的书籍更多也只是关注某个架构设计点 , 没有体系化的架构设计书籍 , 导致程式设计师在学习上没有明确的指导 , 只能自己慢慢摸索 , 效率低 , 容易踩坑 。3. 程式设计师对架构设计的理解存在很多误区 。例如 , 要成为架构师必须要有很强的技术天分;架构师必须有很强的创造力;架构设计必须要高大上才能体现架构师能力;架构一定要具备高可用、高性能……这些似是而非的误区让很多技术人员望而生畏 , 还没尝试就已经放弃了 。得益于移动网际网路技术的快速发展 , 我有很多机会直接参与架构设计 , 这些架构背后的业务形形色色 , 包括社交、电商、游戏、中间件、内部运营系统;用到的技术栈差异也比较大 , 包括PHP、Java、C++等 。虽然每次架构设计对我来说都是一个新的挑战 , 但正好也提供了非常好的机会 , 让我亲身体验不同的架构设计 。在这个过程中 , 我不断学习、思考、实践、总结、改进、交流 , 逐步形成了自己的一套架构设计方法论 。有了这套方法论后 , 首先 , 我在做架构设计的时候游刃有余 , 不管什幺样的业务 , 不管什幺样的技术 , 按照这套方法论都能够设计出优秀的架构 , 在职业等级面评的时候 , 就算我之前从来没有接触过对方的业务 , 也能快速理解对方描述的架构和发现其中做得好或不好的地方;其次 , 在指导其他同事的时候思路很清晰 , 容易理解 , 效果明显 。原来对架构设计比较迷茫的同学 , 通过几次结合案例进行方法论培训 , 都能够很快地掌握这套方法论并在实践中套用 。甚至有很多其他业务线的同学 , 遇到架构设计的困惑 , 也来找我交流和指导 , 按照这套架构设计方法论的指导 , 能够较快地理清架构设计的思路 。本书的主要出发点就是将这套架构设计方法论分享给更多热爱技术、有架构师梦想的技术人员 , 降低架构学习的成本 , 减少架构学习过程中走的弯路 , 助力大家更快地实现自己的架构师梦想 。本书内容已经在“极客时间”App上开设了“从0开始学架构”的专栏 , 订阅人数已经超过25000人 , 成为“极客时间”最受欢迎的专栏 , 能够得到这幺多技术朋友的信任 , 相信书中的内容一定会让你有所收穫 。本书的主要内容本书涵盖了我的整套架构设计方法论和架构实践 , 主要包括以下内容 。架构基础:先介绍架构设计的本质、历史背景和目的 , 然后从複杂度来源 , 以及架构设计的原则和流程来详细介绍架构基础 。高性能架构模式:从存储高性能、计算高性能方面介绍几种设计方案的典型特徵和套用场景 。高可用架构模式:介绍CAP原理、FMEA分析方法 , 分析常见的高可用存储架构和高可用计算架构 , 并给出一些设计方法和技巧 。可扩展架构模式:介绍可扩展模式及其基本思想 , 分析一些常见架构模式 。架构实战:将理论和案例结合 , 落地前面提到的架构原则、架构流程和架构模式 。本书适合的对象有一定的编程基础的软体开发工程师 。对架构设计有兴趣的技术人员 。例如 , 测试、运维等岗位的人员 。有初步的架构设计经验 , 但需要继续提升的技术人员 。勘误与支持因个人水平有限 , 且架构设计整体涵盖的技术範围很广 , 技术深度很深 , 书中难免有不足之处 , 还望读者批评指正 。如果你对本书有比较好的建议或对书中内容有所疑惑 , 可与我联繫 。致谢首先感谢王行云、胡晏秋、陈俊良、张怡炘等同事对本书的勘误和审核 , 帮助完善了本书的很多细节和内容 。其次感谢家人的支持 , 在写书的过程中父母、妻子承担了家庭的重任 , 让我能够安心写作 。特别感谢陈晓猛编辑 , 本书在他不断督促下才最终写完初稿 , 后期他耐心地指导、审稿、修改 , 最终才有了本书的诞生 。特别感谢极客时间架构专栏团队郭蕾、何潇、周君凤等负责人 , 打造了一个非常成功的架构专栏 , 他们的高要求也让整体内容更加完善、更加优质 。特别感谢高效运维创始人萧田国、特赞科技CTO黄勇、腾讯云高级总监熊普江、贝壳金服 2B2C CTO史海峰、资深技术专家于君泽(右军)、21CTO社区创始人杜江(洛逸)几位专家对本书的推荐 。