第一章:大型网站架构演化

大型网站软件系统的特点:高并发/大流量、高可用、海量数据、用户分部广/网络情况复杂、安全环境恶劣、需求变更频繁、渐进式发展。

架构设计误区

- 一味追求大公司方案,不做定制化分析

- 为了技术而选型技术

- 用技术解决所有的问题

第二章:大型网站架构模式

架构模式

- 分层(水平切分)。

- 分割(垂直切分)。

- 分布式。应用/服务、静态资源、数据存储、计算。

- 集群。

- 缓存。CDN,内容分发网络,用户总是请求到离他最近的网络服务商,并缓存静态资源;反向代理,属于前端架构,使其无需请求后端;本地缓存;分布式缓存;

- 异步。可用性、削峰、响应速度提高。

- 冗余。备份、抗灾。

- 自动化。代码、测试、检测、部署、监控、报警、降级、扩容。

- 安全。过滤、风控、加密、验证码。

第三章:大型网站核心架构要素

核心要素:性能、可用性、伸缩性、扩展性、安全性。

第四章:瞬时响应,网站的高性能架构

不同角色的理解:

- 用户。机器、浏览器、运营商 -> CDN、反向代理、前端。

- 开发。响应时间、并发数、吞吐量、性能计数器。

- 运维。基础组件性能,资源利用率。

性能测试:性能、负载、压力、稳定性。

分析:检查各环节日志,响应时间。寻找性能影响原因,代码还是架构。

前端优化

- 减少HTTP请求。

- 使用浏览器缓存。

- 启用压缩。

- CSS放上面,JS放下面。

- 减少Cookie传输、CDN加速、反向代理。

后端优化

- 缓存。避免缓存经常修改的、没有热点的数据;避免数据不一致与脏读、注意可用性、预热、穿透。(Memcached优点:简单的通信协议、丰富的客户端、高性能的网络通信、高效的内存管理、互不通信的集群)

- 代码。多线程、资源复用、数据结构、垃圾回收。

- 存储。机械硬盘/固态硬盘,B+Tree/LSM,RAID/HDFS。

第五章:万无一失,网站的高可用架构

不可能的任务:DNS劫持、CDN服务挂掉、网站服务器宕机、网络交换机失效、硬盘损坏、网卡松掉、机房停电、空调失灵、程序BUG、黑客攻击、第三方服务不可用、兼容问题。

高可用的应用

- 通过负载均衡进行无状态服务的失效转移。

- 应用服务器集群的Session管理。Session复制、Session绑定、Cookie记录Session、Session服务器。

高可用的服务

- 分级管理。

- 超时设置。

- 异步调用。

- 服务降级。

- 幂等性设计。

高可用的数据

- CAP。数据持久性、数据可访问性、数据一致性(强一致、用户一致、最终一致)。

- 数据备份。

- 失效转移。失效确认、访问转移、数据恢复。

高可用网站的软件质量保证:网站发布、自动化测试、预发布验证、代码控制、自动化发布、灰度发布。

网站运行监控

- 监控数据采集。用户行为日志收集(服务器端日志收集、客户端浏览器日志收集),服务器性能监控,运行数据报告。

- 监控管理。系统报警,失效转移,自动优雅降级

第六章:永无止境,网站的伸缩性架构

网站架构的伸缩性设计:不同功能进行物理分离实现伸缩,单一功能通过集群规模实现伸缩。

应用服务器集群的伸缩性设计:HTTP请求分发装置可以感知或配置集群的服务器数量,发现上下线的服务器,并更改请求。

- HTTP重定向负载均衡。优点比较简单;缺点为两次请求使得性能较差,自身处理能力可能成为瓶颈,使用了302响应码被搜索引擎判定为作弊。

- DNS域名解析负载均衡。优点为将负载均衡工作交由DNS,同时DNS还支持基于地理位置的解析;缺点是DNS多级解析更新慢,控制权在域名服务商那里,网站无法进一步调优。

- 反向代理负载均衡。优点为何反向代理服务器功能集成一起,部署简单;缺点是其为所有请求和响应的中转站,可能成为瓶颈。

- IP负载均衡。

- 数据链路层负载均衡。

- 负载均衡算法。轮询、加权轮询、随机、最少连接、源地址散列。

第七章:随需应变,网站的可扩展架构

扩展性:对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。

Web Service的缺点

- 臃肿的注册与发现机制。

- 低效的XML序列化手段。

- 开销相对较高的HTTP远程通信。

- 复杂的部署与维护手段。

大型网站分布式服务的需求与特点:负载均衡、失效转移、高效的远程通信、整合异构系统、对应用最少侵入、版本管理、实时监控。

第八章:固若金汤,网站的安全架构

XSS攻击(Cross Site Script):通过篡改网页,注入恶意HTML脚本,控制用户浏览器进行恶意操作的攻击方式。应对方式,消毒(即对危险字符进行转义)、HttpOnly。

注入攻击:包括SQL与OS。攻击这通过开源、错误回显、盲注的方式去了解数据库结构。应对方式包括消毒、参数绑定(目前大部分ORM框架都有实现,将SQL当作参数执行)。

CSRF(Cross Site Request Forgery,跨站点请求伪造):通过表单Token、验证码、Referer check应对。

其他攻击与漏洞:Error Code、HTML注释、文件上传、路径遍历。

加密:单向散列加密、对称加密、非对称加密、密钥管理。

信息过滤与反垃圾:文本匹配、分类算法、黑名单。

风控:规则引擎、统计模型。

第九章:淘宝网的架构演化案例分析

第十章:维基百科的高性能架构设计分析

第十一章:海量分布式存储Doris的高可用架构设计分析

第十二章:网购秒杀系统架构设计案例分析

挑战

- 对现有网站业务造成冲击。

- 高并发下应用与数据库负载。

- 突然增加的网络及服务器带宽。

- 直接下单。

应对策略

- 秒杀系统独立部署。

- 秒杀商品页面静态化。

- 租借秒杀活动网络带宽。

- 动态生成随机下单页面URL。

架构设计

- 如何控制秒杀商品页面购买按钮的点亮。JS脚本控制,到点更新JS。

- 如何只允许第一个提交的订单被发送到订单子系统。

第十三章:大型网站典型故障案例分析

第十四章:架构师领导艺术

架构师承担的工作:架构设计、软件开发、规划产品路线、估算人力资源、时间资源、安排人员职责分工、确定项目里程碑、指导工程师工作、过程风险评估与控制等。

领导艺术:关注人而不是产品、发掘人的优秀、共享美好蓝图、共同参与架构、学会妥协、成就他人。

第十五章:网站架构师职场攻略

职场攻略

- 发现问题,寻找突破。TIPS:新员工先融入团队,打成一片,不要急于证明自己的能力。

- 提出问题,寻求支持。TIPS:多用“我们”,对上司提选择题,对下属提解答题,用赞同的方式提出问题。

- 解决问题,达成绩效。

第十六章:漫画网站架构师