此书是2013年出版,如果当时自己就读到这本书就好了,虽然距离此书出版已5年时间,但是书中多数主题仍不过时。
下面总结一下自己从书中体会比较多的几个地方:
1. 为何需要架构
技术是为业务而服务的,所以大多数时候架构是随着业务而演化的,业务发展的不同时期架构的方案也会不同,当然技术也可以引领业务的发展。
切忌在业务初期并没有多少用户量的时候就追求大而全或者大型互联网公司的架构。
本书在第一章就描述了架构随业务发展而演化出的九个阶段。
2. 架构的各种解决方案:
- 分层:大致可分为应用层、服务层、数据层。应用层处理业务逻辑;服务层提供公共服务,供应用层调用;数据层管理数据的存储;每一层还可以更细粒度的分层。应用层和服务层类似淘宝的小前台、大中台战略,而数据层可类比为每个大公司的基础架构层。分层的好处是分工和复用,但要注意每层的边界还有不能跨层调用和逆向调用。
- 分割:基于分层,如果每层的功能随着业务发展变得复杂时,可以在每层上根据功能拆分成各个服务,服务的粒度和边界可能会随着业务的发展而变化。
- 分布式与集群:上面的分层和分割主要基于业务的复杂度和可重用度,而分布式是基于物理环境,即拆分出的每个模块都需要独立部署,而为了保证高可用每个模块部署时都需要部署为集群。基于上面的拆分,有分布式服务、分布式存储、分布式计算、分布式静态资源、分布式配置、分布式锁等,每种类型的分布式遇到的问题都不相同。集群的关键技术是负载均衡和失效转移。
- 缓存:作者这里不单只redis这样的分布式缓存技术,而是囊括了CDN、反向代理、本地缓存、分布式缓存等各种缓存技术。
- 异步:异步的好处是可以降低模块间的耦合性,降低耦合性的好处是系统可用性高、削峰、模块易扩展。实现异步的手段有利用分布式消息队列实现消费者生产者模式以及pub/sub模式,还有对接外部系统常用的异步回调手段。
- 冗余:可以保证数据及服务的高可用,可分为热备、冷备、同步备份、异步备份、多数据中心。
- 自动化:自动化能有效的提高效率并且避免人为操作易犯错的问题。在代码管理、测试、环境部署、发布上线、监控、报警、失效转移、失效恢复、限流、降级、弹性分配资源等各个环节都可以进行自动化。
- 安全:各类验证码、数据加密、信息过滤、风控策略。
3. 高性能
- 性能指标:响应时间、并发数、吞吐量、服务器性能。
- 测试方法:性能测试、负载测试、压力测试。
- 性能问题分析方法:通过日志排查响应时间不合理的环节;分析监控数据排查是硬件、程序还是系统资源不足等原因。
- 前端性能优化:减少http请求,即css、js等静态资源合并请求;使用浏览器缓存;启用gzip压缩;减少cookie等数据传输。
- CDN:缓存静态资源。
- 反向代理:缓存静态资源。
- 分布式缓存方案:memcached、redis。
- 集群:分散请求压力。
- 程序优化:多线程(协程);资源复用,如单例、对象池;合理高效的数据结构;代码中尽早做垃圾回收。
- 存储优化:固态磁盘;写入大用LSM,读取大B+树;磁盘写入方案RAID;分布式文件系统HDFS;Nosql。
4. 高可用
- 不可用时间 = 故障修复时间点 - 故障发现时间点,高可用的目的就是保证在服务器硬件故障时服务依然可用,数据能被可靠存储。
- 主要手段:冗余备份 + 及时的失效转移与恢复,失效转移与恢复由控制中心的模块通过心跳检测来进行失效确认及服务拉起。
- 高可用策略:对服务进行优先级排序,合理分配硬件资源,并对服务做隔离;合理的超时、重试机制;异步调用;限流、降级;幂等。
- 流程确保高可用:自动化测试;预发布环境验证;灰度发布;监控与报警系统。
5. 伸缩性
- 应用服务器集群伸缩性设计:HTTP重定向;DNS域名解析负载均衡;反向代理负载均衡(应用层);IP层负载均衡;数据链路层负载均衡(LVS)。
- 分布式缓存伸缩性设计:Memcached,应用层实现分布式算法(一致性Hash),各缓存服务器之间不同步数据。
- 数据存储服务器:水平/垂直的分库/分表并在中间加入代理层;Cobar为了能高效的进行数据迁移,采用以schema为单位进行预创建,迁移时也以schema为单位利用mysql同步机制迁移。
6. 扩展性
- 利用消息队列降低服务间的耦合性
- 分布式服务:服务注册,服务发现,服务治理(负载均衡、失效转移、超时重试、限流降级、监控报警),高效的通信协议
- 可扩展的数据结构:ColumnFamily
7. 安全性
- XSS攻击:通过篡改网页注入代码脚本,诱使用户点击的攻击方式。可以通过对html危险字符转义及设置HttpOnly来应对。
- 注入攻击:Sql注入。可通过对sql危险参数消毒及参数绑定方式应对。
- CSRF攻击:盗取用户的cookie登录。可为表单添加隐藏字段随机值作为token、验证码、RefererCheck等方式应对。