本文为《大型网站技术架构 核心原理与案例分析》读书笔记
1.1 高并发,大流量 1.2 海量数据 存储及管理海量数据,需要大量服务器 1.3 高可用: 7 * 24 小时服务 1.4 用户分布广泛,网络环境复杂 1.5 安全环境恶劣 大型网站几乎每天都被黑客攻击 1.6 需求快速变更,发布频繁 1.7 渐进式发展
应用程序、数据库服务器、文件系统部署在同一台服务器上
技术要点:是将原本部署在同一台服务器的应用、数据库服务和文件服务器,拆分分别部署到不同服务器
① 应用服务器
由于更多的用户访问,导致应用服务器性能变差;同时,应用服务器需要处理大量的业务。因而,需要更强大的 CPU
② 数据库服务器
由于数据量增多,导致存储空间不足;同时,数据库服务器需要快速磁盘检索和数据缓存。因而,需要更快的硬盘和更大的内存
③ 文件服务器
需要存储用户上传的大量文件。因而,需要更大的硬盘
④ 优点
提上各个服务器并发访问能力,改善存储空间
⑤ 挑战
数据库访问压力增大,导致访问延迟
启用数据缓存的目的是,改善网站性能
网站访问遵循二八原则:80% 的业务访问集中在 20% 的数据上。因而需要将这 20% 的数据采用缓存手段,来缓解 80% 的访问所带了的服务器压力
① 缓存服务器部署方案,依据部署的服务器分为两类
本地缓存和分布式远程缓存
② 本地缓存
将缓存服务部署在应用服务器同一台服务器上
优点:是访问数度块。 缺点: 是与应用服务器争夺内存资源;同时受内存限制缓存数据量有限
③ 分布式远程缓存(远程缓存)
优缺点同本地缓存相反;同时分布式缓存能够打破机器限制,具备更强的扩展性
③ 挑战
到此阶段,应用服务器还部署在一台服务器上,单台应用服务器处理请求的能力有限,成为网站性能的瓶颈
① 集群的优势
集群的应用,旨在改善网站并发高的问题,能有效改善网站的并发处理能力。同时,集群还是海量数据存储的常见解决手段
② 集群的技术实现原理
通过负载均衡调度器将用户请求分发到集群中任意一台应用服务器
前面已经启用的数据缓存服务,解决了大部分数据的读取问题
但是依然存在以下两个方面数据处理问题没有解决:
a) 少数数据未命中和缓存过期的数据读取问题无法解决 b) 数据写操作无法使用缓存技术解决
其中,数据写操作是成为数据库负载压力高的瓶颈
① 读写分离主要技术方案
主从数据库服务器热备份
② 主从热备实现原理
主服务器,用于处理数据写入操作;从服务器,用于处理数据读取操作。当主服务器执行写操作时,通过主从复制功能,将数据同步更新到从服务器
③ 挑战
接下来我们需要解决,网络环境的复杂和不同地区的用户在访问速度上的差异问题
① 技术原理
反向代理和 CDN 服务都是缓存。区别在于,反向代理部署在网站的中心机房, CDN 服务部署在网络提供商机房
② 优点
通过加速用户访问速度和减轻后端服务器压力,达到尽快返回给用户数据的目的
分布式系统解决的核心问题是:任何强大的单一服务器无法满足业务持续增长的业务需求,所以需要使用分布式数据库系统和分布式文件系统
分布式数据库是数据库拆分的最终手段,只有在单表数据库规模非常庞大时才使用分布式数据库系统 通常,网站更常用的技术手段是,通过对不同业务进行数据库拆分,将不同业务的数据库部署在不同物理机上。
随着业务越来越复杂,对数据存储和检索的需求也越来越复杂,需要采用一些非关系型数据库技术如 NoSQL 和非数据库查询技术如搜索引擎。
NoSQL 和搜索引擎源于互联网技术手段,对可伸缩的分布式特性具有更好的支持。
应用服务器通过统一的数据访问模块访问各种数据,减轻应用服务器管理诸多数据源的麻烦。
由于大型网站业务复杂,通过将整站的业务拆分成不同的产品达到分而治之的目的。举例: 将首页、订单、卖家、买家等不同业务
实现原理:
将不同业务查分,独立部署,通过超链接、消息队列和访问同一个存储系统实现业务关联
问题:
业务拆分越多,存储系统越来越庞大,应用系统整体复杂度呈指数级增长,带来部署和维护越来越困难。
解决方案:
对不同业务需要执行的相同业务操作,提取成公共服务,进行独立部署,应用系统通过分布式服务调用完成响应业务操作。如,将用户管理,商品管理独立称服务。