第一章:大型网站架构演化
大型网站软件系统的特点:高并发/大流量、高可用、海量数据、用户分部广/网络情况复杂、安全环境恶劣、需求变更频繁、渐进式发展。
架构设计误区:
- 一味追求大公司方案,不做定制化分析
- 为了技术而选型技术
- 用技术解决所有的问题
第二章:大型网站架构模式
架构模式:
- 分层(水平切分)。
- 分割(垂直切分)。
- 分布式。应用/服务、静态资源、数据存储、计算。
- 集群。
- 缓存。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:多用“我们”,对上司提选择题,对下属提解答题,用赞同的方式提出问题。
- 解决问题,达成绩效。
第十六章:漫画网站架构师