开始由于某些想法
于
互联网上搭建了
网站
时候甚至有
能主机都
租借
由于
篇文章我们只关注架构
演变历程
因此
假设
时候已经
托管了
台主机
并且有
定
带宽了
时候由于网站具备了
定
特色
吸引了部分人访问
逐渐
发现系统
压力越来越高
响应速度越来越慢
而
时候比较明显
数据库和应用互相影响
应用出问题了
数据库也
容易出现问题
而数据库出问题
时候
应用也容易出问题
于
进入了第
步演变阶段:
应用和数据库从物理上分离
变成了两台机器
时候技术上没有
新
要求
发现确实起
效
了
系统又恢复
前
响应速度了
并且支撑住了更高
流量
并且
会因
数据库和应用形成互相
影响
![]()
步架构演变对技术上
知识体系基本没有要求
架构演变第二步:增加页面缓存 好景
长
随着访问
人越来越多
发现响应速度又开始变慢了
查找原因
发现
访问数据库
操作太多
导致数据连接竞争激烈
所
响应变慢
数据库连接又
能开太多
否则数据库机器压力会
高
因此考虑采用缓存机制来减少数据库连接资源
竞争和对数据库读
压力
时候首先也许会选择采用squid 等类似
机制来
系统
相对静态
页面(例
两天才会有更新
页面)进行缓存(当
也
采用
页面静态化
方案)
样程序上
做修改
能够
好
减少对webserver
压力
及减少数据库连接资源
竞争
OK
于
开始采用squid来做相对静态
页面
缓存
前端页面缓存技术
例
squid
想用好
还得深入掌握下squid
实现方式
及缓存
失效算法等
架构演变第三步:增加页面片段缓存 增加了squid做缓存
整体系统
速度确实
提升了
webserver
压力也开始下降了
随着访问量
增加
发现系统又开始变
有些慢了
尝
了squid之类
动态缓存带来
好处
开始想能
能让现
些动态页面里相对静态
部分也缓存起来呢
因此考虑采用类似ESI之类
页面片段缓存策略
OK
于
开始采用ESI来做动态页面
相对静态
片段部分
缓存
![]()
步涉及
了
些知识体系: 页面片段缓存技术
例
ESI等
想用好
同样需要掌握ESI
实现方式等; 架构演变第四步:数据缓存
采用ESI之类
技术再次提高了系统
缓存效
系统
压力确实进
步降低了
同样
随着访问量
增加
系统还
开始变慢
经过查找
能会发现系统
存
些重复获取数据信息
地方
像获取用户信息等
时候开始考虑
些数据信息也缓存起来呢
于
些数据缓存
本地内存
改变完毕
完全符合预期
系统
响应速度又恢复了
数据库
压力也再度降低了
少
![]()
步涉及
了
些知识体系: 缓存技术
包括像Map数据结构、缓存算法、所选用
框架本身
实现机制等
架构演变第五步: 增加webserver 好景
长
发现随着系统访问量
再度增加
webserver机器
压力
高峰期会上升
比较高
时候开始考虑增加
台webserver
也
了同时解决
用性
问题
避免单台
webserver down机
没法使用了
做了
些考虑
决定增加
台webserver
增加
台webserver时
会碰
些问题
典型
有: 1、
何让访问分配
两台机器上
时候通常会考虑
方案
Apache自带
负载均衡方案
或LVS
类
软件负载均衡方案; 2、
何保持状态信息
同步
例
用户session等
时候会考虑
方案有写入数据库、写入存储、cookie或同步session信息等机制等; 3、
何保持数据缓存信息
同步
例
之前缓存
用户数据等
时候通常会考虑
机制有缓存同步或分布式缓存; 4、
何让上传文件
些类似
功能继续正常
时候通常会考虑
机制
使用共享文件系统或存储等;
解决了
些问题
终于
把webserver增加
了两台
系统终于
又恢复
了
往
速度
![]()
步涉及
了
些知识体系: 负载均衡技术(包括
限于硬件负载均衡、软件负载均衡、负载算法、linux转发协议、所选用
技术
实现细节等)、主备技术(包括
限于 ARP欺骗、linux heart-beat等)、状态信息或缓存同步技术(包括
限于Cookie技术、UDP协议、状态信息广播、所选用
缓存同步技术
实现细节等)、共享文件技术(包括
限于NFS等)、存储技术(包括
限于存储设备等)
架构演变第六步:分库 享受了
段时间
系统访问量高速增长
幸福
发现系统又开始变慢了
次又
状况呢
经过查找
发现数据库写入、更新
些操作
部分数据库连接
资源竞争非常激烈
导致了系统变慢
下
办呢
此时
选
方案有数据库集群和分库策略
集群方面像有些数据库支持
并
好
因此分库会成
比较普遍
策略
分库也
意味着要对原有程序进行修改
通修改实现分库
错
目标达
了
系统恢复甚至速度比
前还快了
![]()
步涉及
了
些知识体系:
步更多
需要从业务上做合理
划分
实现分库
具体技术细节上没有其
要求;
同时随着数据量
增大和分库
进行
数据库
设计、调优
及维护上需要做
更好
因此对
些方面
技术还
提出了
高
要求
架构演变第七步:分表、DAL和分布式缓存 随着系统
断运行
数据量开始大幅度增长
时候发现分库
查询仍
会有些慢
于
按照分库
思想开始做分表
工作
当
避免
会需要对程序进行
些修改
也许
时候
会发现应用自己要关心分库分表
规则等
还
有些复杂
于
萌生能否增加
通用
框架来实现分库分表
数据访问
ebay
架构
对应
DAL
演变
过程相对而言需要花费较长
时间
当
也有
能
通用
框架会等
分表做完
才开始做
同时
阶段
能会发现之前
缓存同步方案出现问题
因
数据量太大
导致现
太
能
缓存存
本地
同步
方式
需要采用分布式缓存方案了
于
又
通考察和折磨
终于
大量
数据缓存转移
分布式缓存上了
![]()
步涉及
了
些知识体系: 分表更多
同样
业务上
划分
技术上涉及
会有动态hash算法、consistent hash算法等; DAL涉及
比较多
复杂技术
例
数据库连接
管理(超时、异常)、数据库操作
控制(超时、异常)、分库分表规则
封装等; 架构演变第八步:增加更多
webserver
做完分库分表
些工作
数据库上
压力已经降
比较低了
又开始过着每天看着访问量暴增
幸福生活了
突
有
天
发现系统
访问又开始有变慢
趋势了
时候首先查看数据库
压力
切正常
之
查看webserver
发现apache阻塞了
多
请求
而应用服务器对每
请求也
比较快
看来
请求数太高导致需要排队等待
响应速度变慢
还好办
般来说
时候也会有些钱了
于
添加
些webserver服务器
添加 webserver服务器
过程
有
能会出现几种挑战: 1、Apache
软负载或LVS软负载等无法承担巨大
web访问量(请求连接数、网络流量等)
调度了
时候
经费允许
会采取
方案
购买硬件负载
例
F5、Netsclar、Athelon之类
经费
允许
会采取
方案
应用从逻辑上做
定
分类
分散
同
软负载集群
; 2、原有
些状态信息同步、文件共享等方案
能会出现瓶颈
需要进行改进
也许
时候会根据情况编写符合网站业务需求
分布式文件系统等;
做完
些工作
开始进入
看似完美
无限伸缩
时代
当网站流量增加时
应对
解决方案
断
添加webserver
![]()
步涉及
了
些知识体系:
了
步
随着机器数
断增长、数据量
断增长和对系统
用性
要求越来越高
时候要求对所采用
技术都要有更
深入
理解
并需要根据网站
需求来做更加定制性质
产品
架构演变第九步:数据读写分离和廉价存储方案 突
有
天
发现
完美
时代也要结束了
数据库
噩梦又
次出现
眼前了
由于添加
webserver太多了
导致数据库连接
资源还
够用
而
时候又已经分库分表了
开始分析数据库
压力状况
能会发现数据库
读写比
高
时候通常会想
数据读写分离
方案
当
方案要实现并
容易
另外
能会发现
些数据存储
数据库上有些浪费
或者说过于占用数据库资源
因此
阶段
能会形成
架构演变
实现数据读写分离
同时编写
些更
廉价
存储方案
例
BigTable
种
![]()
步涉及
了
些知识体系: 数据读写分离要求对数据库
复制、standby等策略有深入
掌握和理解
同时会要求具备自行实现
技术; 廉价存储方案要求对OS
文件存储有深入
掌握和理解
同时要求对采用
语言
文件
块
实现有深入
掌握
架构演变第十步:进入大型分布式应用时代和廉价服务器群梦想时代 经过上面
漫长而痛苦
过程
终于
再度迎来了完美
时代
断
增加webserver
支撑越来越高
访问量了
对于大型网站而言
人气
重要毋庸置疑
随着人气
越来越高
各种各样
功能需求也开始爆发性
增长
时候突
发现
原来部署
webserver上
web应用已经非常庞大了
当多
团队都开始对其进行改动时
真
相当
方便
复用性也相当糟糕
基本
每
团队都做了或多或少重复
事情
而且部署和维护也
相当
麻烦
因
庞大
应用包
N台机器上复制、启动都需要耗费
少
时间
出问题
时候也
好查
另外
更糟糕
状况
有
能会出现某
应用上
bug
导致了全站都
用
还有其
像调优
好操作(因
机器上部署
应用
都要做
根本
无法进行针对性
调优)等因素
根据
样
分析
开始痛下决心
系统根据职责进行拆分
于
大型
分布式应用
诞生了
通常
步骤需要耗费相当长
时间
因
会碰
多
挑战: 1、拆成分布式
需要提供
高性能、稳定
通信框架
并且需要支持多种
同
通信和远程调用方式; 2、
庞大
应用拆分需要耗费
长
时间
需要进行业务
整理和系统依赖关系
控制等; 3、
何运维(依赖管理、运行状况管理、错误追踪、调优、监控和报警等)好
庞大
分布式应用
经过
步
差
多系统
架构进入相对稳定
阶段
同时也能开始采用大量
廉价机器来支撑着巨大
访问量和数据量
结合
套架构
及
多次演变过程吸取
经验来采用其
各种各样
方法来支撑着越来越高
访问量
![]()
步涉及
了
些知识体系:
步涉及
知识体系非常
多
要求对通信、远程调用、消息机制等有深入
理解和掌握
要求
都
从理论、硬件级、操作系统级
及所采用
语言
实现都有清楚
理解
运维
块涉及
知识体系也非常
多
多数情况下需要掌握分布式并行计算、报表、监控技术
及规则策略等等
说起来确实
费力
整
网站架构
经典演变过程都和上面比较
类似
当
每步采取
方案
演变
步骤有
能有
同
另外
由于网站
业务
同
会有
同
专业技术
需求
篇blog更多
从架构
角度来讲解演变
过程
当
其
还有
多
技术也未
此提及
像数据库集群、数据挖掘、搜索等
真实
演变过程
还会借助像提升硬件配置、网络环境、改造操作系统、CDN镜像等来支撑更大
流量
因此
真实
发展过程
还会有
多
同
另外
大型网站要做
远远
仅仅上面
些
还有像安全、运维、运营、服务、存储等
要做好
大型
网站真
容易
分布式Web服务器架构演变形成
最新推荐文章于 2025-02-25 20:42:13 发布