图说大型网站的技术架构
一、大型网站的软件系统的特点
- 高并发,大流量
- 高可用
- 海量数据
- 用户分布广泛,网络情况复杂
- 安全环境恶劣
- 需求快速变更,发布频繁
- 渐进式发展
二、大型网站的架构演化发展历程
1、初始阶段的网站架构
最开始网站的应用程序、数据库、文件等所有的资源都在一台服务器上。最典型的就是LAMP技术了:服务器操作系统使用Linux,应用程序使用PHP开发,数据库使用MySQL,然后部署在Apache上。
2、应用服务和数据服务分离
随着网站业务的发展,一台服务器的性能和存储空间逐渐不能满足需求,这时就将应用和数据分离,整个网站使用三台服务器:应用服务器、文件服务器和数据库服务器。三台服务器对硬件资源的要求也各不相同:应用服务器需要更快更强大的CPU,数据库服务器需要更快的硬盘的更大的内存,文件服务器需要更大的硬盘。
3、使用缓存改善网站性能
网站访问特点和现实世界的财富分配一样遵循二八定律:80%的业务访问集中在20%的数据上。把大部分业务访问的小部分数据缓存在内存中,可以减少数据库的访问压力,提高整个网站的数据访问速度。
缓存可以分为两种:应用服务器上的本地缓存和分布式缓存服务器上的远程缓存。本地缓存访问速度更快,但缓存数据有限,而且会出现和应用程序争用内存的情况。远程缓存可以使用集群的方式,理论上可以做到不受内存容量的限制。
4、使用应用服务器集群改善网站的并发处理能力
一台应用服务器所能处理的请求有限(一台Tomcat大概六七百),企图去换更强大的服务器也终究会满足不了持续增长的业务需求,而且网站有访问高峰期和低谷期,扩展性也不好。使用集群是网站解决高并发、海量数据问题的常用手段。通过负载均衡调度服务器,可将来自用户浏览器的访问请求分发到应用服务器集群中的任何一台服务器上。
5、数据库读写分离
使用缓存后,仍有一部分读操作(缓存访问不命中、缓存过期)和全部的写操作需要访问数据库。数据库服务器也终究会因为负载压力过高而成为网站的瓶颈。
目前大部分的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到另一台数据库服务器。
应用服务器在写数据的时候,访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库,这样当应用服务器读数据的时候,就可以通过从数据库获得数据。
6、使用反向代理和CDN加速网站响应
CDN和反向代理的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;而反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器是反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就将其直接返回给用户。
7、使用分布式文件系统和分布式数据库系统
只有在单表数据规模非常庞大的时候才使用分布式数据库。网站更常用的数据库拆分手段是业务分库。
8、使用NoSQL和搜索引擎
随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂,关系型数据库逐渐不能满足需求。网站需要采用一些非关系型数据库技术如NoSQL和非数据库查询技术如搜索引擎。
9、业务拆分
大型网站为了应对日益复杂的业务场景,通过使用分而治之的手段将整个网站按业务拆分,如购物系统将首页、商铺、订单、购物车、支付等分成不同模块,分归不同的团队负责,作为不同的应用独立开发和独立部署。用得最多的是各应用通过访问同一个数据存储系统来构成一个关联的完整系统。
10、分布式服务
既然每一个应用系统都需要执行许多相同的业务操作,比如用户管理、商品管理等,那么可以将这些公用的业务提取出来,独立部署。由这些可复用的业务连接数据库,提供公用业务服务,而应用系统只需要管理用户界面,通过分布式服务调用共用业务服务完成具体业务操作。
三、大型网站的架构模式
1、分层
对网站软件系统在横向方面进行切分,分为应用层、服务层、数据层。
- 应用层:负责具体业务和视图展示,如网站首页及搜索输入和结果展示。
- 服务层:为应用层提供服务支持,如用户管理服务、购物车服务等。
- 数据层:提供数据存储访问服务,如数据库、缓存、文件、搜索引擎等。
2、分割
在纵向方向对软件进行切分,将网站按不同的功能和服务分割,包装成高内聚低耦合的模块单元。一方面有助于软件的开发和维护,另一方面便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。比如将软件系统的购物、论坛、搜索、广告分割成不同的应用。
3、分布式
在网站应用中,常用的分布式方案有以下几种。
- 分布式应用和服务:将分层和分割后的应用和服务模块分布式部署。
- 分布式静态资源:网站的静态资源如JS、CSS、Logo图片等资源独立分布式部署。
- 分布式数据和存储:为网站应用而生的各种NoSQL产品几乎都是分布式的。
- 分布式计算:Hadoop及其MapReduce分布式计算框架,移动计算而不是移动数据。
- 分布式配置:支持网站线上服务器配置实时更新。
- 分布式锁:分布式环境下实现并发和协同。
- 分布式文件系统:FastDFS、HDFS。
4、集群
提高网站高并发和高可用的能力。
5、缓存
提高数据访问速度。
- CDN
- 反向代理
- 本地缓存
- 分布式缓存
6、异步
- 降低软件耦合性。
- 提高系统可用性。
- 加快网站相应速度。
- 消除并发访问高峰。
7、冗余
服务器故障时保证数据不丢失。
8、自动化
- 发布过程自动化
- 自动化代码管理
- 自动化测试
- 自动化安全检测
- 自动化部署
- 自动化监控
- 自动化报警
- 自动化失效转移
- 自动化失效恢复
- 自动化降级
- 自动化分配资源
9、安全
- 通过密码和手机验证码进行身份认证。
- 对网络传输数据进行加密。
- 使用验证码识别机器人程序滥用网络资源攻击网站。
- 攻击网站的XSS攻击、SQL注入进行编码转换。
- 垃圾信息、敏感信息的过滤。
- 交易转账等重要操作的风险控制。
四、大型网站的架构技术一览
1、前端架构
- 浏览器优化技术
- CDN
- 动静分离,静态资源独立部署
- 图片服务
- 反向代理
- DNS
2、应用层架构
- 开发框架
- 页面渲染
- 负载均衡
- Session管理
- 动态页面静态化
- 业务拆分
- 虚拟化服务器
3、服务层架构
- 分布式消息
- 分布式服务
- 分布式缓存
- 分布式配置
4、存储层架构
- 分布式文件
- 关系数据库
- NoSQL数据库
- 数据同步
5、后台架构
- 搜索引擎
- 数据仓库
- 推荐系统
6、数据采集与监控
- 浏览器数据采集
- 服务器业务数据采集
- 服务器性能数据采集
- 系统监控
- 系统报警
7、安全架构
- Web攻击
- 数据保护
8、数据中心机房架构
- 机房架构
- 机柜架构
- 服务器架构
本文主要摘自 阿里大牛 李智慧 写的《大型网站技术架构·核心原理与案例分析》。
图说大型网站的技术架构相关推荐
- Mysql在大型网站的应用架构演变
原创文章,转载请注明: 转载自http://www.cnblogs.com/Creator/ 本文链接地址: Mysql在大型网站的应用架构演变 本文已经被多处转载,包括CSDN推荐以及码农周刊等等, ...
- 说说大型网站可伸缩性架构的设计原理
可伸缩性架构指的是:不改变网站的软硬件设计,只通过改变部署的服务器数量就可以扩大或缩小网站的服务处理能力. 大型网站中的 "大型",可以表现在以下几个方面: * 用户方面 - 大量 ...
- 减少HTTP请求之合并图片详解(大型网站优化技术)
一.相关知识讲解 看过雅虎的前端优化35条建议,都知道优化前端是有多么重要.页面的加载速度直接影响到用户的体验.80%的终端用户响应时间都花在了前端上,其中大部分时间都在下载页面上的各种组件:图片,样 ...
- 减少HTTP请求(大型网站优化技术)
在网站开发过程中,对于页面的加载效率一般都想尽办法求快.那么,怎么让才能更快呢?减少页面请求 是一个优化页面加载速度很好的方法.上一篇博文 我们讲解了 "利用将小图标合成一张背景图来减少HT ...
- [转]Mysql在大型网站的应用架构演变
原创文章,转载请注明: 转载自http://www.cnblogs.com/Creator/ 本文链接地址: Mysql在大型网站的应用架构演变 写在最前: 本文主要描述在网站的不同的并发访问量级下 ...
- 【架构】大型网站优化技术思路
1.I/O优化 1.增加缓存,减少磁盘的访问次数. 2.优化磁盘的管理系统,设计最优的磁盘方式策略,以及磁盘的寻址策略,这是在底层操作系统层面考虑的. 3.设计合理的磁盘存储数据块,以及访问这些数据库 ...
- 【推荐】大型网站图片服务器架构的演进
构建在Windows平台之上的网站,往往会被业内众多架构师认为很"保守".很大部分原因,是由于微软技术体系的封闭和部分技术人员的短视造成的.由于长期缺乏开源支持,所以只能" ...
- 大型网站服务器的架构
随着用户访问量的不断增加,网站的后台也会不断变化以应对需求.本文主要从一个小型网站到大型网站的过度与变化来陈述. 1.1 网站后台架构 主要指由web server .应用服务器.数据库.存储.监控等 ...
- 大型网站解决方案技术
大型网站面临的问题:(网络层.服务层.应用层) >1.网站大访问量1.负载均衡(分流.轮循):思科以太网通道.Windows NLB .Linux LVS(nat(地址转化).dr) .F5和负 ...
最新文章
- python语言面试基础_【python面试指北】1.语言基础
- java access ole word,利用OLE对象实现Word文档操作
- 网易云信深度优化解决移动聊天室“痼疾”
- mac vim python3_VIM学习笔记 编译源码(Compile Code)-Python
- python3.7基础教程_关于本教程 |《Python 官方文档:入门教程 3.7.0》| Python 技术论坛...
- ORA-28000: the account is locked的解决办法
- C++函数分文件编写
- 为什么选择react?为前端开发选择React的六大理由
- C# WinForm WebBrowser (三) 编辑模式
- [poj3280]Cheapest Palindrome_区间dp
- new blob文件设置编码_前端下载文件amp;下载进度
- 开课吧Java课堂:如何使用迭代函数
- 鸿蒙空间最高级,洪荒:我能进化万物
- 五笔字根表识别码图_怎么学五笔 五笔字根表键盘图 【详细介绍】
- 菜鸟学习之Java入门基础知识
- STM32教程(库函数版):STM32库函数开发实例教程
- 使用Python连接阿里云物联网
- 帅哥陈 Hololens开发笔记(1)
- 51单片机数码管滚动显示学号_静、动态数码管动态显示
- python函数返回多个变量_Python中接收函数多个返回结果的两种方法