大型网站架构设计摘要
大型网站架构设计常用方法
1、网页HTML静态化 使用信息发布系统 (CMS)
2、图片服务器分离 图片是最消耗资源的,有必要将图片与页面分离。
3、数据库集群与库表散列
4、缓存 Apache
5、镜像
6、负载均衡
7、硬件四层交换 Alteon, F5 等硬件
8、软件四层交换 Linux Virtual Server
大型网站切分
1、横向切分:
(1)、大网站化为小网站:可以部署在不同服务器上
(2)、静态动态分离:静态消耗IO,动态消耗CPU,设置独立的文件和图片服务器,动态WEB服务器配好点的CPU,静态WEB服务器和文件服务器磁盘好点。
(3)、特殊的模块分开:如某个模块负责上传文件,很消耗时间;如某个模块需要用到SSL
(4)、使用第三方资源:如搜索模块用Google 或百度
2、纵向切分:
(1)、文件操作:文件上传服务器、数据库和web网站分开。
(2)、使用中间层访问数据库
3、对数据库切分
(1)、纵向切分:将不同的应用分到不同的数据库实例中。将大表拆分为小表。
(2)、横向切分:表分区,将数据储存在不同的文件上,可以加快数据查询速度。
(3)、数据库镜像、复制订阅、事务日志等
大型网站的子系统
1、Web前端系统
一般基于Apache/Lighttpd/Eginx等的虚拟主机平台
2、负载均衡系统
负载均衡系统分为硬件和软件两种。硬件负载均衡效率高,但是价格贵,比如F5等。软件负载均衡系统价格较低或者免费,效率较硬件负载均衡系统低,不过对于流量一般或稍大些网站来讲也足够使用,比如lvs,nginx。
3、数据库集群系统
提供专用的读数据库和写数据库,在应用程序中实现读操作和写操作分别访问不同的数据库。
使用Replication机制实现快速将主库(写库)的数据库复制到从库(读库)。一个主库对应多个从库,主库数据实时同步到从库。
写数据库有多台,每台都可以提供多个应用共同使用,这样可以解决写库的性能瓶颈问题和单点故障问题
读数据库有多台,通过负载均衡设备实现负载均衡,从而达到读数据库的高性能、高可靠和高可扩展性
数据库服务器和应用服务器分离
从数据库使用BigIP做负载均衡
4、缓存系统
内存缓存工具如 Memcachd。
5、分布式存储系统
6、分布式服务器管理系统
集中式、分组、批量、自动化对服务器进行管理,能够批量化的执行计划任务。有Cfengine等软件。
7、代码发布系统
常用工具Rsync,通过开发相应的脚本工具实现服务器集群间代码同步分发
大型网站架构模式
1、分层
软件系统:应用层、服务层、数据层
2、分割
3、分布式
分布式应用和服务:将分层和分割后的应用和服务模块分布式部署
分布式静态资源:网站的静态资源如JS,CSS,Logo图片等资源独立分布式部署,并采用独立的域名,即人们常说的动静分离
分布式数据和存储:大型网站需要处理以P为单位的海量数据,单台计算机无法提供如此大的存储空间,这些数据需要分布式存储
分布式计算:严格说来,应用、服务、实时数据处理都是计算,网站除了要处理这些在线业务,还有很大一部分用户没有直观感受的后台业务要处理,包括搜索引擎的索引构建、数据仓库的数据分析统计等。
4、集群
多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。可以提供更好的并发特性,当有更多用户访问的时候,只需要向集群中加入新的机器即可。同时因为一个应用由多台服务器提供,当某台服务器发生故障时,负载均衡设备或者系统的失效转移机制会将请求转发到集群中其他服务器上,使服务器故障不影响用户使用。
5、缓存
CDN:即内容分发网络,部署在距离终端用户最近的网络服务商,用户的网络请求总是先到达他的网络服务商那里,在这里缓存网站的一些静态资源(较少变化的数据),可以就近以最快速度返回给用户,如视频网站和门户网站会将用户访问量大的热点内容缓存在CDN。
反向代理:反向代理属于网站前端架构的一部分,部署在网站的前端,当用户请求到达网站的数据中心时,最先访问到的就是反向代理服务器,这里缓存网站的静态资源,无需将请求继续转发给应用服务器就能返回给用户。
本地缓存:在应用服务器本地缓存着热点数据,应用程序可以在本机内存中直接访问数据,而无需访问数据库。
分布式缓存:大型网站的数据量非常庞大,即使只缓存一小部分,需要的内存空间也不是单机能承受的,所以除了本地缓存,还需要分布式缓存,将数据缓存在一个专门的分布式缓存集群中,应用程序通过网络通信访问缓存数据。
使用缓存有两个前提条件:
一是数据访问热点不均衡,某些数据会被更频繁的访问,这些数据应该放在缓存中;
二是数据在某个时间段内有效,不会很快过期,否则缓存的数据就会因已经失效而产生脏读,影响结果的正确性
6、异步
业务之间的消息传递不是同步调用,而是将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作。
单一服务器内部可通过多线程共享内存队列的方式实现异步,处在业务操作前面的线程将输出写入到队列,后面的线程从队列中读取数据进行处理;
在分布式系统中,多个服务器集群通过分布式消息队列实现异步,分布式消息队列可以看作内存队列的分布式部署
异步架构是典型的生产者消费者模式,特点:
提高系统可用性;
加快网站响应速度;
消除并发访问高峰。
7、冗余
要想保证在服务器宕机的情况下网站依然可以继续服务,不丢失数据,就需要一定程度的服务器冗余运行,数据冗余备份,这样当某台服务器宕机时,可以将其上的服务和数据访问转移到其他机器上。
8、自动化
发布过程自动化:自动化代码管理,自动化测试,自动化安全检测,自动化部署
运维过程自动化:自动化监控,自动化报警,自动化失效转移,自动化失效恢复,自动化失效恢复,自动化分配资源
9、安全
密码与手机身份认证;
网络通信加密;
敏感数据加密;
验证码识别;
处理XSS攻击、SQL注入、编码转换;
过滤垃圾信息、敏感信息;
对交易转账等操作进行风险控制。