zoukankan      html  css  js  c++  java
  • 学习笔记6:《大型网站技术架构 核心原理与案例分析》之 万无一失:网站的高可用架构

    一、网站可用性度量

    1、网站不可用性度量:网站不可用也称为网站故障,业界常用多少个9来衡量网站的可用性。

    2、网站可用性考核

    二、高可用性网站架构

    1、应用层

           位于应用层的服务器通常为了应对高并发的访问请求,会通过负载均衡设备将一组服务器组成一个集群对外提供服务,当负载均衡设备通过心跳检测等手段监控到某台

    应用服务器不可用时,就将其从集群中剔除,并将请求分发到集群中其他可用的服务器上。

    2、服务层

         服务层与应用层类似,只是负责的方向不同,应用层主要与用户交互,服务层则接受来自应用层的请求,处理业务,实现与数据层的交互。

    3、数据层

         数据层的服务器比较特殊,数据服务器上存储这数据,为了保证服务器宕机时数据不丢失,数据访问服务不中断,需要在数据写入时进行数据同步复制,将数据写入多台服务器,实现数据冗余备份。

    当数据库宕机时,应用程序将切换到有备份数据的服务器上。

    三、高可用的应用

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

    2、应用服务器集群的Session管理:

    • Session复制:网络传输大;内存要求高
    • Session绑定:负载均衡利用hash算法总是将来自同一IP的用户分配到同一个服务器上。如果这个服务器宕机,那么这个用户的会话就会丢失。
    • 利用cookie记录session:需要在客户端和服务端来回传输;cookie容量小,记录信息比较小;用户也有可能禁止使用cookie;
    • Sesssion服务器:提供集中的session服务器来存储会话,可以部署在缓存,内存数据库中。

    四、高可用的服务

    1、分级管理:核心应用与服务使用最好的硬件;服务部署隔离,低优先级的服务通过启动不同的线程或部署在不同的虚拟机上进行隔离。

    而高优先级的服务部署在不同的物理机上,核心服务和数据甚至部署在不同城市的数据中心。

    2、超时设置:设置服务调用的超时时间,一旦超时,通信框架就抛出异常。

    3、异步调用:通过消息队列等异步方式,避免一个服务失败导致整个应用失败的情况。

    4、服务降级:拒绝服务和关闭功能。拒绝优先级低的服务,关闭不重要的功能。

    5、幂等性设计:服务重复调用在所难免,如何保证重复调用时操作结果的正确是非常关键的,因此必须保证重复调用和调用一次产生的结果相同,即服务具有幂等性。

    服务幂等型有时具有天然性,比如将用户性别设为男性,不管设置多少次,结果都是一样,但是对于转账交易等操作,问题就变得复杂起来,需要通过交易编号等信息

    进行服务调用有效性校验,只有有效的操作才能继续执行。

    五、高可用的数据

          保证数据存储高可用的手段主要是数据备份和失效转移机制。数据备份是保证数据有多个副本,任意副本的失效都不会导致数据的永久丢失,从而实现数据完全的持久化。

    而失效转移机制则保证当一个数据副本不可访问时,可以快速切换访问数据的其他副本,保证系统可用。

    1、CAP原理

    • C:Consistency 数据一致性:数据强一致性,数据用户一致,数据最终一致。
    • A:Availibility 数据可用性
    • P:Partition Tolerance 分区耐受性,系统具体跨网络分区的伸缩性

    2、数据备份:数据热备分为异步热备和同步热备。

    3、失效转移:失效确认、访问转移和数据恢复。

    六、高可用的软件质量保证

    1、网站发布

    2、自动化测试:Selenium

    3、预发布验证

    4、代码控制

    • 主干开发,分支发布
    • 分支开发,主干发布(建议模式)

    5、自动化发布:一般在周四发布。

    6、灰度发布:如果集群很大,例如有1000台,可以先发布100台,在线做AB测试几天,没有问题,再发布100台,以此类推。

    七、监控数据采集

    1、用户行为日志

    • 服务端日志收集:web日志
    • 客户端浏览器日志

    2、服务器性能监控

    3、运行数据报告:缓存命中率,平均响应延迟时间,每分钟发送邮件数目,待处理的

  • 相关阅读:
    win10下python环境变量设置
    c++ primer第15章这几个例子中的构造函数形式不太理解
    ++与*
    C++符号优先级
    56-Remove Linked List Elements
    55. Binary Tree Preorder Traversal
    54. Flatten Binary Tree to Linked List
    野指针--内存泄漏--缓存区溢出--栈溢出
    数组指针和指针数组的区别
    53-Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/huiy/p/6710188.html
Copyright © 2011-2022 走看看