互联网企业服务架构书单
春节在家整理存书,发现了当时在拼多多做业务开发工作的时候,用来帮助理解互联网企业服务架构的若干书籍。这些书里的技术方案可能有一定的落后,但是对于帮助新入职场的互联网公司程序员,了解一个典型的互联网企业核心服务架构,以及治理服务和分化出数据团队的过程里会发生的技术服务体系变化,还是很有帮助的。这里做一个分享。
企业 IT 架构转型之道
本书副标题是“阿里巴巴中台战略思想与架构实战”。
虽然所谓“中台战略”最近多有批评,但是“中台”占据的功能,实际是每个业务在成长过程里都会需要的,不同之处不过是业务线或事业群自己做还是依赖“中台”提供。从互联网企业的发展历程来看,阿里巴巴的“中台战略”影响甚广,所以放在第一位介绍这本讲“中台战略”最言之有物的书。
本书从阿里巴巴中台的起点,共享业务事业部出发,讨论了共享服务体系包含的微服务治理,数据库拆分和业务层面的事务一致性,日志、监控和可观测性,平台稳定性或者叫网站可靠性(Site Reliability)等方面的实践。目前的电商平台生态,深受这一套体系的影响,加入任何一家大厂或者垂直厂商,都会面对类似的技术架构。
本书主要价值就是介绍上面这些实践和顶层视角下各个治理体系之间的关联的第二部分“共享服务体系搭建”。第一部分介绍背景稍微可读,第三部分输出案例基本就是营销,不读也罢。其他阿里系的图书,例如《淘宝技术这十年》、《尽在双十一》和《逆流而上》也都是侃侃而谈为主,没有什么特别的价值。
携程架构实践
接下来的两本书就是企业服务架构实践里比较扎实的。
第一本是携程的架构实践。携程虽然不是典型的电商企业,但也是一家平台型企业,同样要支持用户、提供商以及关联两者的订单这些经典系统。
本书介绍了一系列携程内部用于提供共享服务能力的自研软件,以及它们如何在业务流程当中发挥作用。除去经典的服务治理、数据库和监控问题以外,本书比较独特的是介绍了网关、负载均衡和内容分发的技术,详细展开了网站可靠性的实践,以及一个具体的客服服务实例。
决战 618
第二本介绍具体企业服务架构实践的书就是这本京东的《决战 618》了。
比起上面两本书以基础服务维度展开服务架构讨论,这本书以具体的一个个业务服务来展开服务架构的讨论。京东支付、京东交易、物流履约、开放平台和搜索、广告、推荐(搜广推)落地业务,对于有意在业务线上发展成为架构师的程序员来说大有裨益。
京东在一众电商企业里的特色就是自建物流,所以本书用了一整章的篇幅讨论了供应链和物流的问题。业务数据对独立服务提供商(ISV)开放和业务逻辑对搜广推的依赖,也是业务部门而非“中台”部门独有的视角。
超大流量分布式系统架构解决方案
最后介绍的一类书籍,不是特定企业的实践或者经验分享,而是 Tech Leader 或者架构师根据自身经验总结出来的大型网站会面对的通用技术挑战。
这类作者写书的特点,会聚焦在具体技术问题的挑战和解决方案上。如果说前面三本书像是高屋建瓴的制定战略和划分业务,那么最后这三本书更像是一个一线业务 Leader 维护平台服务每天都会遇到和解决的问题的工程笔记。
第一本书《超大流量分布式系统架构解决方案》主要分成五个部分:
- 大规模服务化架构
- 全链路压测
- 流控方案
- 读写优化方案
- 分库分表方案
从内容覆盖范围来看,没有逃出前面三本书都包含的服务治理、数据库和网站可靠性这些主题。但是本书谈服务治理,不是讲它的背景和抽象价值,而是就像一个实际维护了若干个服务,不时有上线新服务需求的业务 Leader 一样,讨论这些维护工作和开发工作里会打交道的概念和常见的处理方案。对于具体开源技术的讨论,则有一个没有足够人力自研基础软件的团队做技术选型的指导意义。当然,本书的技术背景至少也是 5 年前了,其中具体的技术选型不一定还有效,但是选型的考虑方式是共通的。
大型网络系统与 Java 中间件实践
本书作者有阿里阿巴巴背景,同样是一线业务团队负责人视角,介绍了淘宝网这一大型网站架构演进过程中实实在在遇到的技术挑战和解决方案。
本书内容并未深度耦合阿里巴巴或淘宝业务的具体形态内容,这些内容更多是作为实例、案例出现在更一般的技术问题分析讨论当中。另外,本书在技术实现的讨论中都假设业务系统是以 Java 写成的,并直接引用了许多 Java 生态的框架技术。这些内容对于其他语言的开发者来说,会相对比较难迁移。
全书篇章目录如下:
- 分布式系统介绍
- 大型网站及其架构演进过程
- 构建 Java 中间件
- 服务框架
- 数据访问层
- 消息中间件
- 软负载中心与集中配置管理
- 构建大型网站的其他要素
同样是包含了服务治理、数据库和网站可靠性这些主题,多了一个对配置中心的讨论。对于配置中心的理解,还可以结合国内著名的开源软件 Apollo 分布式配置管理中心来学习。
深入浅出大型网站架构设计
本书前言就提到,这是一本为学生进入职场准备的书籍。
很多刚从学校毕业的计算机专业的学生,或者通过自学掌握编程技能的非计算机专业的人,往往会发现软件工程师在工作中所做的内容与学校中所学的知识有不小的差异,并且这种差异随着项目规模的增大而增大。一些拥有不错编程基础的从业人员往往也要在从业数年以后,才能逐渐通过积累工作经验来缩小、弥补这种差异。
造成这种差异的主要原因在于,在学校中学习的编程技能侧重于计算机科学的原理及基本的应用,而在工作中,对于一个工程项目软件,为了使其达到商用、大规模使用的条件,软件工程师会采用许多学校中不会重点教学甚至完全不会接触的方式来确保其开发、维护上的高效率和健壮性。本书在网站开发方面,通过总结笔者从业中遇到过的众多案例和项目,精练出一系列职业经验和操作规程,帮助感兴趣的初学者对职业实践有所了解,而编程能力原本就扎实的程序员更可以通过本书获得职场上的即战力。
全书篇章目录如下:
- 网站架构概述
- 大型网站架构设计的流程
- 数据库的选择
- 数据库优化:分库分表
- 数据库优化:读写分离
- 缓存
- 动静分离
- 负载均衡
- 异步和非阻塞
- 队列
- 高可用
- 异地多活
- 服务降级
- 限流
- 下游错误处理
- 测试
- 上线准备
我把这本书作为本书单的最后一本收官,也是因为这个知识体系的结构和内容介绍是最后这类贴近实际的书籍里最优秀的。