互联网创业核心技术:构建可伸缩的Web应用
这本书主要讲解了如何构建可伸缩的Web应用。
第1章,主要讲解了可伸缩的两种方案,包括垂直伸缩和水平伸缩。同时,概括性地讲述了从前端到数据中心所可能应用到的各种技术。
第2章,讲述了软件设计的一些基本原则,例如促进低耦合,避免重复,单一职责,依赖注入,控制反转等。
第3章,讲述了前端层的伸缩性,前端层的主要职责就是为用户返回可视的HTML界面。一个主要的原则就是前端层是无状态的。对于前端层的伸缩性,可以采用DNS或者是负载均衡器等。
第4章,讨论了Web服务。包括以Web Api为中心的开发。以功能为中心的Web服务和以资源为中心的Web服务。对分布式事务提供了建议,就是尽量不使用分布式事务,而采用事务补偿的方式去实现。同时,Web服务也应该是无状态的。
第5章,讲述了数据存储层,通常是数据库,的伸缩性。首先以MySql为例,讲述了传统的关系型数据库的伸缩方式。方法1:主从、主主数据库,都是通过增加备份的方式;方法2:功能垂直切分,例如用户表一个库、产品表一个库、订单表一个库,对每个库分别查询,然后在应用层对数据进行组装;方法3:数据切片,例如用户ID为奇数的在A库(所有与奇数ID用户相关的所有其他数据也在A库),用户ID为偶数的在B库。
第6章,这章主要从系统的各个层面介绍了缓存。缓存的几个位置:浏览器HTTP缓存,脚本缓存(localstorage),CDN,反向代理缓存、对象缓存(Redis、Memcached)。
第7章,这章主要讲解了异步处理,其实主要就是消息队列。以及基于事件/消息的开发模式。
第8章,讲述了数据搜索方面的相关知识。主要是建立索引和使用全文检索搜索引擎,例如Lucene。
第9章,讲了开发和运维方面的一些伸缩性。比如自动构建、自动部署、自动测试等。
看完全书,从一个鸟瞰的角度了解到构建一个伸缩性的系统需要考虑的方方面面,但没有太多涉及到如何实施。我感觉突然多了很多可能需要了解或者学习的知识点:Nginx,用来做Http缓存和负载均衡;Redis,用来做消息队列和缓存;RabbitMQ,用来做消息队列;Selenium,用来做自动化测试;Jenkins,用来做自动构建和自动化部署;MangoDB,用来做NoSQL数据库。
感谢阅读,希望这篇文章能给你带来帮助!