您的位置:首页 > 运维架构 > 网站架构

分布式Web服务器架构演变形成

2014-06-24 14:14 218 查看
开始

由于某些想法



互联网上搭建了



网站





时候甚至有

能主机都

租借





由于

篇文章我们只关注架构

演变历程

因此

假设



时候已经

托管了

台主机

并且有

带宽了





时候由于网站具备了

特色

吸引了部分人访问

逐渐

发现系统

压力越来越高

响应速度越来越慢



时候比较明显



数据库和应用互相影响

应用出问题了

数据库也

容易出现问题

而数据库出问题

时候

应用也容易出问题

进入了第

步演变阶段:

应用和数据库从物理上分离

变成了两台机器





时候技术上没有



要求





发现确实起

系统又恢复



响应速度了

并且支撑住了更高

流量

并且

会因

数据库和应用形成互相

影响





步架构演变对技术上

知识体系基本没有要求


架构演变第二步:增加页面缓存

好景

随着访问

人越来越多



发现响应速度又开始变慢了

查找原因

发现

访问数据库

操作太多

导致数据连接竞争激烈

响应变慢



数据库连接又

能开太多

否则数据库机器压力会

因此考虑采用缓存机制来减少数据库连接资源

竞争和对数据库读

压力





时候首先也许会选择采用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镜像等来支撑更大

流量

因此

真实

发展过程

还会有



另外



大型网站要做



远远

仅仅上面

还有像安全、运维、运营、服务、存储等

要做好



大型

网站真





容易
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: