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

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

2016-06-22 22:23 246 查看

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


5.1 网站可用性的度量和考核

5.1.1 网站可用性度量

网站不可用时间(故障时间) = 故障修复时间点 – 故障发现时间点

网站年度可用性指标 = (1 – 网站不可用时间/年度总时间)*100%

5.1.2 网站可用性考核


5.2 高可用的网站架构

硬件故障是常态,网站的高可用架构设计的目的就是保证服务器硬件故障时服务依然可用,数据依然保存并能够被访问。

实现上述高可用架构的主要手段是数据和服务的冗余备份及失效转移,一旦某些服务器宕机,就将服务切换到其他可用的服务器上,如果磁盘损坏,则从备份的磁盘读取数据。。

网站典型的分层模型是三层,即应用层、服务层、数据层


5.3 高可用的应用

应用层主要处理网站应用的业务逻辑,显著特点是应用的无状态性。

所谓无状态的应用是指应用服务器不保存业务的上下文信息,而仅根据每次请求提交的数据进行相应的业务逻辑处理,多个服务实例之间完全对等,请求提交到任意服务器,处理结果都是完成一样的。

5.3.1 通过负载均衡进行无状态服务的失效转移

对于应用服务器集群,实现这种服务器可用状态实时监测、自动转移失败任务的机制是复制均衡。

负载均衡,顾名思义,主要使用在业务量和数据量较高的情况下,当单台服务器不足以承担所有的负载压力时,通过负载均衡手段,将流量和数据分摊到一个集群组成的多台服务器上,以提高整体的负载处理能力。

5.3.2 应用服务器集群的Session管理

集群环境下,Session管理主要有以下几种手段:

1.   Session复制

应用服务器开启Web容器的Session复制功能,在集群中的几台服务器之间同步Session对象,使得每台服务器上都保存所有用户的Session信息。

2.   Session绑定

Session绑定可以利用负载均衡的源地址Hash算法实现,负载均衡服务器总是将来源于同一IP的请求分发到同一台服务器上。称作会话黏滞。

3.   利用Cookie记录Session

利用浏览器支持的Cookie记录Session。

4.   Session服务器

利用独立部署的Session服务器同一管理Session,应用服务器每次读写Session时,都访问Session服务器。


5.4 高可用的服务

可复用的服务模块为业务产品提供基础公共服务,大型网站中这些服务都独立分布式部署,被具体应用远程调用。可复用的服务和应用一样,也是无状态的服务,因此可以使用类似负载均衡的失效转移策略实现高可用的服务。

此外,还有以下几点高可用的服务策略:

1.   分级管理

运维上将服务器进行分级管理,核心应用和服务优先使用更好的硬件,在运维响应速度上也格外迅速。

2.   超时设置

在应用程序中设置服务调用的超时时间,一旦超时,通信框架就抛出异常,应用程序根据服务调度策略,可选择继续重试或将请求转移到提供相同服务的其他服务器上。

3.   异步调用

应用对服务的调用通过消息队列等异步方式完成,避免一个服务失败导致整个应用请求失败的情况。

4.   服务降级

为了保证核心应用和功能的正常运行,需要对服务进行降级。降级有两种手段:拒绝服务及关闭服务。

拒绝服务:拒绝低优先级应用的调用,减少服务调用并发数,确保核心应用正常使用;或者随机拒绝部分请求调用。

关闭功能:关闭部分不重要的服务。

5.   幂等性设计

必须在服务层保证服务重复调用和调用一次产生的结果相同,即服务具有幂等性。


5.5        高可用的数据

保护网站的数据就是保护企业的命脉。

保证数据存储高可用的手段主要是数据备份和失效转移机制。

5.5.1    CAP原理

高可用数据有如下几个层面的含义:

数据持久性、数据可访问性、数据一致性。

CAP原理认为,一个提供数据服务的存储系统无法同时满足数据一致性(Consistency)、数据可用性(Availibility)、分区耐受性(Partition Tolerance,系统具有跨网络分区的伸缩性)这三个条件。

在大型网站中,通常会选择强化分布式存储系统的可用性(A)和伸缩性(P),而在某种程度上放弃一致性(C)。

5.5.2    数据备份

数据冷备:即定期将数据复制到某种存储介质上并物理存档保管。

数据热备分为两种:异步热备方式和同步热备方式

5.5.3    失效转移

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

1、失效确认

系统确认一台服务器是否宕机的手段有两种:心跳检测和应用程序访问失败报告。

2、访问转移

3、数据恢复


5.6 高可用网站的软件质量保证

5.6.1 网站发布

发布过程中,每次关闭的服务器都是集群中的一小部分,并在发布完成后立即可以访问,因此整个发布过程不影响用户使用。

5.6.2 自动化测试

目前大部分网站都采用Web自动化测试技术,使用自动化工具或脚本完成测试。流行的Web自动化测试工具Selenium。Selenium运行在浏览器中,模拟用户操作进行测试,因此Selenium可以同时完成Web功能测试和浏览器兼容测试。

5.6.3 预发布验证

在网站发布时,并不是把测试通过的代码直接发布到线上服务器,二是先发布到预发布机器上,开发工程师和测试工程师在预发布服务器进行预发布验证,执行一些典型的业务流程,确认系统没有问题后才正式发布。

5.6.4 代码控制

大部分网站使用的源代码版本控制工具是SVN,SVN代码控制和版本发布方式一般有两种:

1.   主干开发、分支发布

2.   分支开发、主干发布

Git作为版本控制工具,正逐步取代SVN的地位。Git对分布式开发、分支开发等有更好的支持,也更容易在各个开发分支上及时反映主干的更新,避免SVN在最后提交分支代码时发现和主干代码差别太大难以merge成功。

5.6.5 自动化发布

很多网站选择周四作为发布日。

5.6.6 灰度发布

大型网站会使用灰度发布模式,将激情服务器分为若干部门,每天只发布一部分服务器,观察运行稳定没有故障,第二天继续发布一部分服务器,持续几天才把整个集群全部发布出去,期间如果发现问题,只需要回滚已发布的一部分服务器即可。


5.7       网站运行监控

不允许没有监控的系统上线。

5.7.1 监控数据采集

1、用户行为日志收集

用户行为日志指用户在浏览器上所做的所有操作及其所在的操作环境。

具体用户行为日志收集方法有两种:

服务器端日志收集。

客户端浏览器日志收集。

2.服务器性能监控

收集服务器性能指标。

使用广泛的开源性能监控工具是Ganglia。

3.运行数据报告

除了服务器系统性能监控,网站还需要监控一些与具体业务场景相关的技术和业务指标。

5.7.2 监控管理

系统报警

失效转移

自动优雅降级

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