zoukankan      html  css  js  c++  java
  • 可用性和可修改性战术分析 ——选阅自《大型网络技术架构:核心原理与案例分析》读后感

    2011年4月12日,

    亚马逊云计算服务EC2发生故障,

    其ESB服务不可用,故障持续了数天,

    最终还是有部分数据未能恢复。

    这一故障导致美国许多使用亚马逊的知名网站受到影响,

    并引发了人们对使用云计算安全性、可靠性的大规模讨论。

     

      高可用架构是万无一失的。要保证一个网站永远完全可用几乎是一件不可能完成的任务。我们通过一个神奇的数字9来度量网站可用性,采用故障分来考核网站可用性。可用性指标是网站架构设计的重要指标,网站可用性看得见,摸得着,跟技术、运营、相关各方的绩效考核息息相关。一个典型的网站设计遵循基本分层架构模型即应用层、服务层、数据层。应用层主要负责具体业务逻辑处理;服务层负责提供可复用的服务;数据层负责数据的存储和访问。网站的可用性架构设计不但考虑实际的硬件故障引起的宕机,还要考虑网站升级发布引起的宕机。高可用的服务策略包括分级管理、超时设置、服务降级(关闭非核心服务)等。高可用的数据是最宝贵的资产,保证数据存储高可用的手段主要是数据备份和失效转换机制。数据备份可以实现数据完全的持久化,失效转换机制是为了保证系统可用。保证网站高可用,万无一失,是一个艰难的过程,还需要更多努力

    1,应用层的高可用
    应用层主要处理网站应用的业务逻辑,显著特点是应用的无状态性。对于应用服务器集群,实现这种服务器可用状态实时监测、自动转移失败任务的机制是负载平衡。
    负载平衡主要是用在业务量和数据量较高的情况下,当单台服务器不足以承担所有压力时通过负载均衡将流量分摊到一个集群组成的多台服务器上,以提高整体的负载处理能力。
    Session管理:
    1)Session复制:在几台服务器之间同步session对象,使得每台服务器上都保存所有用户的session信息。
    2)Session绑定:负载均衡的源地址hash算法。负载均衡服务器总是将来源于同一IP的请求分发到同一台服务器上。又称作会话黏滞。
    3)利用cookie记录session:将session记录在客户端
    4)Session服务器:利用独立不熟的session服务器(集群)统一管理session。

    2,服务层的高可用
    1)分级管理:将服务器进行分级管理,核心应用和服务优先使用更好的硬件。
    2)超时设置:在应用程序中设置服务超时时间。
    3)异步调用:应用对服务的调用通过消息队列等异步方式完成,避免一个服务失败导致整个应用请求失败的情况。
    4)服务降级:通过拒绝服务(拒绝低优先级应用的调用,减少服务调用并发数,或者随机拒绝部分请求调用)和关闭功能(关闭部分不重要的服务)
    5)幂等性设计:在服务层保证服务重复调用和调用一次产生的结果相同。

    3,数据层的高可用
    保证数据存储高可用的主要手段是数据备份和失效转移机制。数据备份是保证数据有多个副本,任意副本都不会导致数据的永久丢失,从而实现数据的持久化;而失效转移机制则保证当一个数据副本不可访问时,可以快速切换访问数据的其他副本,保证系统可用。
    CAP原理:一个提供数据服务的存储系统无法同时满足数据一致性、数据可用性、分区耐受性这三个条件。
    数据备份:
    1)冷备份:简单廉价/不能保证数据最终一致和数据可用性。
    2)热备份:异步热备份/同步热备份。异步方式试制多份数据副本的写入操作异步完成,应用程序收到数据服务系统的写操作成功响应时只写成功了一份,存储系统会异步的写其他副本。同步方式是指多分数据副本的写入操作同步完成,即应用程序收到数据服务系统的写成功响应时,多分数据都已经写操作成功。
    失效转移:
    1)失效确认:心跳检测和应用程序访问失败报告
    2)访问转移:对于完全对等存储的服务器,其中一台宕机后切换到对等服务器上;若是不对等的,就需要重新计算路由选择存储服务器
    3)数据恢复:系统需要从间看的服务器复制数据将数据副本数目恢复到设定值。

      网站的可用性指标是网站架构设计中的重要指标,对外是服务承诺,对内是考核指标。所以说,一个高可用的网站架构是一个公司所需要具备的。而在影响网站可用性的众多因素中,硬件故障是常态,网站的高可用架构设计的主要目的就是保证服务器硬件故障时,服务依然可用、数据依然保存并能够被访问。

     

     

     

     

  • 相关阅读:
    消息循环中的TranslateMessage函数和DispatchMessage函数,特别注意WM_TIMER消息
    单线程程序处理消息的方式!
    PeekMessage&GetMessage
    GetTickCount() 函数的作用和用法
    LPVOID 没有类型的指针
    sprintf详解
    memset用法详解
    C语言中%d,%o,%f,%e,%x的意义
    VS2013 C++ 动态链接库的生成
    visual studio 2013的C++开发环境不错--vs2013安装试用手记
  • 原文地址:https://www.cnblogs.com/suifengye/p/8633750.html
Copyright © 2011-2022 走看看