大型网站的架构概要

来源:互联网 发布:阿呆喵 知乎 编辑:程序博客网 时间:2024/05/17 00:02

1、大型网站架构的目标与挑战


(1)、高可用性:负载均衡、数据备份、异地容灾......

(2)、高性能:高速缓存、并行计算、异地镜像....

(3)、可伸缩性:开发框架、多层设计、业务分割....


2、网站架构演变和技术脉络


(1)、web动静态资源分离,与数据库物理分离

img、doc、js、css等静态资源使用单独的web http server 处理请求 (使用Apache/Nginx 等配置)

动态页面静态化处理 


(2)、采取缓存处理

减少对网站、Web应用服务器、文件系统IO、数据库的访问。

主要有客户端缓存、前端页面缓存、页面片段缓存、本地数据缓存、数据库缓存。


客户端缓存技术有:

(a)、修改HTTP协议的Header参数, 如Cache-Control、Expires、Pragma、LastModified、Etag等参数,让浏览器缓存。

(b)、使用HTTP协议,能够使用GET尽量不使用POST

(c)、压缩js、js合并、压缩图片

(d)、会话状态采用Cookie替代传统的Session

(e)、采用Ajax实现页面局部刷新

(f)、采用Flex、HTML5等技术,将服务器端的运算迁移到浏览器端

总之,能让浏览器端缓存的数据一定要缓存,浏览器端能处理的运算绝对不放到服务器端处理。


前端页面缓存技术:

(a)、采用具备缓存跟你的HTTP反向代理服务器作为前端缓存器。

(Varnish\Squid\Ncache等)


页面片段缓存

采用apache mod_esi、WebLogic、JSP标签库等。


本地数据缓存:

(1)、Oracle 不要拼SQL,使用PreparedStatement,Query Cache根据数据库具体情况合理设置

(2)、Oracle 的Data Buffer 设置

(3)、应用服务器Cache:缓存更新频率的数据,如基表数据、配置信息,使用线程池、连接池等

(4)、Java采用 map \EHCache等


(3)、增加机器作为HA,数据库读写分离

 

负载均衡技术:

(1)、DNS负载均衡

(2)、反向代理软件:Apache、Nginx等

(3)、其他硬件产品


数据库读写分离:

读写分离逻辑分配、负载均衡、失效转移、数据库分区透明支持


CDN(Content Delivery Network) 内容分发网络:

将网站的内容分发到最接近用户的网络边缘,使用户可以可以就近获取,从而解决互联网网络拥挤的状况,提高相应速度。适合于静态内容很多、页面内容实时性要求不高的网站。


分布式缓存:

使用memcached、redis等NoSQL作为分布式缓存


分库

读写分离、垂直分区


分区

分片key识别划分检索依据

用NoSQL数据库部分替换关系数据库


多个数据中心

使用分布式文件系统、MapReduce、NoSQL 存储


3、网站架构设计理论和原则


(1)、 互联网的BASE 原则


关系数据库的 ACID :原子性 Atomic、一致性 Consistency、隔离性 Isolation、持久性 Durability

ACID原则不太适用互联网,可用性比一致性重要。


BASE 原则:牺牲强一致性,以获得更好的可用性和可靠性。

基本可用 (Basically Available):数据能保证80%一致性就行了,参考二八定律

软状态 (Soft state):在不过分追求数据一致性 (强一致性)前提下可考虑状态策略。如将数据缓存在客户端一段时候后,过后若无请求,则清除缓存。

最终一致性(Eventually consistent):在某一段短时间内允许数据不一致,三经过较长时间,等所有节点数据都整合在一起后,数据最终达到完全一致。


(2)、分布式的CAP 理论


一致性(Consistency):保证不同节点对数据操作的原子性

可用性(Availability):  确保用户访问可得到相应。不强调不同节点的一致性。

分区容忍性(Partition Tolerance): 数据分区储存后,即使部分分区组件不可用,其实施操作也能完成。


CAP理论指出:一个分布式系统不肯同事满足一致性、可用性和分区容忍性这3项请求。最多只能同时满足2项。



 














0 0
原创粉丝点击