《大型网站技术架构:核心原理与案例分析》读书笔记 - 第1篇 概述
技术更新快,而本书出版时间略早,部分新技术没有提到,但是不影响整体,值得一读。
这是一本关于网站架构的书,阐述网站技术架构最基本的驱动力,基础的架构设计原理,以及构架方案选择的价值观。
第1篇,从演化、模式、要素三个维度描述网站整体架构。(对第二篇的总结概述)
第2篇,从性能、可用性、伸缩性、扩展性、安全五要素方面详细描述网站架构核心原理,其中重要的负载均衡、异步处理、分布式缓存等技术方案又在不同章节多角度描述。
第3篇,通过几个具体案例再一次从整体和局部描述网站架构方法。
第4篇,从架构师做事的角度回顾网站技术架构。
第1篇 概述
1 大型网站架构演化 2
1.1 大型网站软件系统的特点 3
高并发、大流量、高可用、海量数据、...渐进式发展。
1.2 大型网站架构演化发展历程 4
1.2.1 初始阶段的网站架构 4
1.2.2 应用服务和数据服务分离 4
侧重点:
应用程序:CPU
数据库服务器:磁盘内存
文件服务器:硬盘
1.2.3 使用缓存改善网站性能 5
二八定律:80%的业务访问集中在20%的数据上
缓存分为:1.本地缓存(应用服务器上),2.远程缓存(分布式缓存服务器上)
1.2.4 使用应用服务器集群改善网站的并发处理能力 6
使用集群是解决网站高并发、海量数据问题的常用手段。
1.2.5 数据库读写分离 7
配置两个数据库主从关系。
1.2.6 使用反向代理和CDN加速网站响应 8
CND:部署在网络提供商的机房,使用户在请求网站服务时,可以从距自己最近的机房获取数据。
反向代理:部署在网站的中心机房,当用户请求到达中心机房后,首先访问反向代理服务器,如果缓存着用户请求的资源,将直接返回给用户。
分布式数据库是网站数据库拆分的最后手段,只有单表的数据量非常庞大时使用。网站更常用的数据库拆分手段是业务分库,将不同业务的数据部署在不同的服务器上。
1.2.8 使用NoSQL和搜索引擎 10
或者HBase
1.2.9 业务拆分 11
为了应对日益复杂的业务场景,使用分而治之的手段将整个网站业务分成不同的产品线,如交易网站:首页、店铺、买家、卖家、订单。
具体到技术上,也会根据产品线划分,拆分成许多应用,独立部署维护。通过超链接建立关系(导航栏地址指向不同应用)。
1.2.10 分布式服务 11
将入“用户管理”等公用的业务提取出来,独立部署。
1.3 大型网站架构演化的价值观 13
网站的价值在于它能为用户提供什么价值,在于网站能做什么,而不在于它是怎么做的,所以在网站还很小的时候就去追求网站的架构是舍木逐末,得不偿失的。小型网站最需要做的就是为用户提供好的服务来创造价值,得到用户的认可,活下去,野蛮生长。
1.3.1 大型网站架构技术的核心价值是随网站所需灵活应对 13
伴随小型网站业务的逐步发展,演变成大型网站。
1.3.2 驱动大型网站技术发展的主要力量是网站的业务发展 13
创新的业务发展模式对网站架构逐步提出高更的要求,才使得网站架构得以发展成熟。是业务成就了技术,事业成就了人,而不是相反。
1.4 网站架构设计误区 14
1.4.1 一味追随大公司的解决方案 14
值得学习借鉴,但不要盲从,失去坚持自我的勇气。
1.4.2 为了技术而技术 14
网站架构是为业务存在的,除此毫无意义。
1.4.3 企图用技术解决所有问题 14
技术是用来解决业务问题的,而业务的问题,也可以通过业务的手段解决。
如:12306改成分时段售票。
1.5 小结 15
2 大型网站架构模式 16
模式的关键在于可重复性,通过模式的学习,掌握网站架构的一般思路和解决方案。
2.1 网站架构模式 16
2.1.1 分层 17
好处:便于分工合作开发和维护。
挑战:合理规划层次和接口。
2.1.2 分割 18
将不同功能的模块分割开来,包装成高内聚低耦合的模块单元,一方面有助于开发维护,另一方面提高并发处理能力和扩展能力。
2.1.3 分布式 18
更多机器:CPU、内存、存储资源更多
问题:网络、机器宕机、数据一致性、依赖性错综复杂
不要为了分布式而分布式,常用分布式:应用和服务、静态资源、数据和存储、计算(后台业务处理)、配置、锁、文件系统等。
2.1.4 集群 19
多机器通过负载均衡,提供系统可用性
2.1.5 缓存 20
改善性能的第一手段:CND、反向代理、本地缓存、分布式缓存。
前提:1.数据访问热点不均衡,2.数据不会很快过期(脏读)
2.1.6 异步 20
典型生产者消费者模式。
好处:提高系统可用性、加快网站相应速度、消除并发访问高峰。
注意:可能对用户体验、业务流程造成影响。
2.1.7 冗余 21
数据冗余备份,实现高可用。
数据库冷备份:定期备份存档。
数据库热备份:主从分离。
2.1.8 自动化 22
无人值守网站可以正常运行,一切自动化是网站的理想状态;自动化架构主要集中在发布维护方面。包括:
发布过程、代码管理、测试、安全检测、部署、监控、报警、失效移交、失效恢复、降级(关闭不重要的服务)、资源分配
2.1.9 安全 23
互联网的开发特性使其面对巨大安全挑战:
1.密码+手机码身份验证
2.交易等敏感数据加密
3.验证码识别机器人
4.XSS攻击、SQL注入等进行编码转移
5.敏感信息过滤
6.对转账等重要操作风险管控
2.2 架构模式在新浪微博的应用 23
2.3 小结 25
3 大型网站核心架构要素 26
软件架构:有关软件整体结构与组件得抽象描述,用于指导大型软件系统各个方面得设计。
除系统功能需求外,需要关注以下5个要素。
3.1 性能 27
性能是一个网站的重要指标。从用户浏览器到数据库,响应请求的所有环节都可以性能优化。
1.浏览器:缓存、页面压缩、合理布局、减少cookie传输
2.CND
3.服务器端:缓存
4.异步:消息队列
5.集群
6.代码:多线程、改善内存管理
7.数据库:索引、缓存、SQL优化
3.2 可用性 28
衡量标准是假设一台以上宕机,是否可用。主要手段是冗余(备份)
3.3 伸缩性 29
是否可以用多台服务器构成集群,是否容易向集群中添加新机器,新机器是否可以提供无差别的服务,可容纳的总服务器数是否有限制。
3.4 扩展性 30
关注功能需求。快速响应需求变更。
标准:增加新业务产品时,是否可以对现有产品透明无影响。
手段:事件驱动架构(消息队列)、分布式服务(业务和可复用服务分离)
3.5 安全性 30
针对各种攻击与盗密手段,是否有可靠的应对策略。
3.6 小结 31
本章是第2篇 架构的归纳和总结。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步