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

大型网站技术架构整理(Ch. 5-6)

2016-09-20 13:38 302 查看

- Chapter 5.万无一失:网站的高可用架构

1、一个典型的网站设计通常遵循的基本分层架构模型是三层,即应用层、服务层、数据层。应用层主要负责具体业务逻辑处理;服务层负责提供可复用的服务;数据层负责数据的存储与访问。

2、 位于应用层的服务器通常为了应对高并发的访问请求,会通过负载均衡设备将一组服务器组成一个集群共同对外提供服务,当负载均衡设备通过心跳检测等手段监控到某台应用服务器不可用时,就将其从集群列表中剔除,并将请求分发到集群中其他可用的服务器上。

3、 应用服务器的高可用架构设计主要基于服务无状态这一特性。Web应用中将这些多次请求修改使用的上下文对象称作会话(Session),单机情况下,Session可由部署在服务器上的Web容器(如JBoss)管理。在集群环境下,Session管理主要有以下这四种手段:Session复制,Session绑定(会话黏滞),利用Cookie记录Session和Session服务器

4、 高可用服务中的幂等性设计指的是在服务层保证服务重复调用和调用一次产生的结果相同,即服务具有幂等性。

5、扩大缓存服务器集群规模的一个简单手段就是整个网站共享同一个分布式缓存集群,单独的应用和产品不需要部署自己的缓存服务器,只需要向共享缓存集群申请缓存资源即可。

6、CAP原理认为,一个提供数据服务的存储系统无法同时满足数据一致性(Consistency)、数据可用性(Availibility)、分区耐受性(Partition Tolerance,系统具有跨网络分区的伸缩性)这三个条件。在大型网站中,通常会选择强化分布式存储系统的A和P,而在某种程度上放弃一致性C。数据不一致通常出现在系统高并发写操作或者集群状态不稳(故障恢复、集群扩容······)的情况下。

7、失效转移操作由三个部分组成:失效确认、访问转移、数据恢复。

8、Web自动化测试工具有ThoughtWorks的Selenium。

9、在网站应用中强调的一个处理错误的理念是快速失败,即如果系统在启动时发现问题就立刻抛出异常,停止启动让工程师介入排查错误,而不是启动后执行错误的操作。

10、 代码控制有两种方式,各有有缺:主干开发、分支发布方式,主干代码反应目前整个应用的状态,一目了然,便于管理控制,也利于持续集成。分支开发,主干发布方式,各个分支独立进行,互不干扰,可以使不同发布周期的开发在同一应用中进行。目前网站应用开发中主要使用的是分支开发、主干发布的方式。

11、灰度发布,亦称AB测试。

12、目前许多网站逐步开发基于实时计算框架Storm的日志统计与分析工具,比较广泛的开源性能监控工具是Ganglia,他支持大规模服务器集群,并支持以图形的方式在浏览器展示实时性能曲线。

13、 对公司而言,可用性关系网站的生死存亡

- Chapter 6.永无止境:网站的伸缩性架构

1、一般说来,网站的伸缩性设计可分为两类,一类是根据功能进行物理分离实现伸缩,一类是单一功能通过集群实现伸缩。前者是不同的服务器部署不同的服务,提供不同的功能;后者是集群内的多台服务器部署相同的服务,提供相同的功能。

2、应用服务器应该设计成无状态的。

3、 负载均衡服务器本质上就是可以感知或者可以配置集群的服务器数量,可以及时发现集群中新上线或下线的服务器,并能向新上线的服务器分发请求,停止向已下线的服务器分发请求的HTTP请求分发装置。

4、负载均衡的方法有HTTP重定向,DNS域名解析,利用反向代理,使用IP地址和数据链路层负载均衡。其中,通过反向代理负载均衡的方法,数据包本身不发生变化,这种方法的缺点是反向代理服务器是所有请求和响应的中转站,其性能可能会成为瓶颈。而IP负载均衡是在网络层通过修改请求目标地址进行负载均衡,数据包本身发生了变化。

5、使用三角传输模式的链路层负载均衡是目前大型网站使用最广的一种负载均衡手段。在Linux平台上最好的链路层负载均衡开源产品是LVS(Linux Virtual Server)。

6、计算机的任何问题都可以通过增加一个虚拟层来解决

7、在大型网站的实际应用中,即使进行了分库和主从复制,对一些单表数据仍然很大的表,比如Facebook的用户数据库,淘宝的商品数据库,还需要进行分片,将一张表拆开分别存储在多个数据库中。

8、网站在线业务中比较成熟的支持数据分片的分布式关系数据库产品主要有开源的Amoeba(http://sourceforge.net/projects/amoeba)和Cobar(http://code.alibabatech.com/wiki/display/cobar/Home)。

9、 Cobar是一个分布式关系数据库访问代理,介于应用服务器和数据库服务器之间。

Cobar服务器可以看做是无状态的应用服务器,因此其集群伸缩可以简单实用负载均衡的手段实现。而MySql中存储着数据,要想保证集群扩容后数据一致负载均衡,必须要做数据迁移,将集群中原来机器中的数据迁移到新添加的机器中。数据迁移不是以数据为单位,而是以Schema为单位。但由于Cobar路由后只能在单一数据库实例上处理查询请求,因此无法执行跨库的JOIN操作,更不能执行跨库的事务处理。

10、NoSql,主要指非关系的、分布式的数据库设计模式。开源社区有各种NoSQL产品,其支持的数据结构和伸缩特性也各不相同。应用最广泛的是Apache

HBase。

11、 HBase为可伸缩海量数据储存而设计,实现面向在线业务的实时数据访问延迟。HBase的伸缩性主要依赖其可分裂的HRegion及可伸缩的分布式文件HDFS实现。HregionServer是物理服务器,每个HRegionServer上可以启动多个HRegion实例。

12、 淘宝有很多海量数据的高手,QQ有很多高并发业务的高手。

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