• 五、万无一失:网站的高可用架构(大型网站技术架构原理)


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

        网站的可用性描述网站可有效访问的特性。

        网站的页面能完整呈现在用户面前,需要经过很多环节,任何一个环节出问题,都会导致网站页面不可访问。

        DNS会被劫持、CDN服务可能会挂掉、网站服务器可能会宕机、网站交换机可能会失效、硬盘会损坏、网卡会松掉、机房会停电、空调会失灵、程序会有Bug、黑客会攻击、促销引来大量的访问、第三方合作伙伴的服务不可用.....

      5.2  高可用的网站架构

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

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

        一个典型的网站设计通常遵循如下图所示的基本分层架构模型

      典型的分层模型是三层,即应用层、服务层、数据层;各层之间具有相对独立性,应用层主要负责具体业务逻辑处理;服务层负责提供可复用的服务;数据层负责数据的存储与访问。

       

      不同的业务产品会部署在不同的服务器集群上,如某网站的文库、贴吧、百科等属于不同的产品,部署在各自独立的服务器集群上,互不相干。这些产品又会依赖一些共同的复用业务,如注册登录服务、Session 管理服务、账户管理服务等,这些可复用的业务服务也各自部署在独立的服务器集群上。至于数据层,数据库服务、文件服务、缓存服务、搜索服务等数据存储与访问服务都部署在各自独立的服务器集群上。

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

      位于服务层的服务器情况和应用层的服务器类似,也是通过集群方式实现高可用,只是这些服务器被应用层通过分布式服务调用框架访问,分布式服务调用框架会在应用层客户端程序中实现软件负载均衡,并通过服务注册中心对提供的服务器进行心跳检测,发现有服务不可用,立即通知客户端程序修改服务访问列表,提出不可用的服务器。

      位于数据层的服务器情况比较特殊,数据服务器上存储着数据,为了保证服务器宕机时数据不丢失,数据访问服务不中断,需要在数据写入时进行数据同步复制,将数据写入多台服务器上,实现数据冗余备份。当数据服务器宕机时,应用程序将访问切换到有备份数据的服务器上。 

    5.3  高可用的应用

        应用层主要处理网站应用的业务逻辑,因此有时也称为业务逻辑层,应用的一个显著特点是应用的无状态性。

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

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

        不保存状态的应用给高可用的架构设计带来了巨大便利,既然服务器不保存请求的状态,那么所有的服务器完全对等,当任意一台或多台服务器宕机,请求提交给集群中其他任意一台可用机器处理,这样对终端用户而言,请求总是能够成功的,整个系统依然可用。对于应用服务器集群,实现这种服务器可用状态实时监测、自动转移失败任务的机制是负载均衡。

        负载均衡,主要使用在业务量和数据量较高的情况下,当单台服务器不足以承担所有的负载压力时,通过负载均衡手段,将流量和数据分摊到一个集群组成的多台服务器上,以提高整体的负载处理能力。目前,不管是开源免费的负载均衡软件还是昂贵的负载均衡硬件,都提供失效转移功能。在网站应用中,当集群中的服务是无状态对等时,负载均衡可以起到事实上高可用的作用。

       当 Web 服务器集群中的服务器都可用时,负载均衡服务器会把用户发送的访问请求分发到任意一台服务器上进行处理,而当服务器 10.0.0.1 宕机时,负载均衡服务器通过心跳检测机制发现该服务器失去响应,就会把它从服务器列表中删除,而将请求发送到其他服务器上,这些服务器是完全一样的,请求在任何一台服务器中处理都不会影响最终的结果。

       由于负载均衡在应用层实际上起到了系统高可用的作用,因此即使某个应用访问量非常少,只用一台服务器提供服务就绰绰有余,但如果需要保证该服务高可用,也必须至少部署两台服务器,使用负载均衡技术构建一个小型的集群。

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

        应用服务器的高可用架构设计主要基于服务无状态这一特性,但是事实上,业务总是有状态的,在交易类的电子商务网站,需要有购物车记录用户的购买信息,用户每次购买请求都是向购物车中增加商品;在社交类的网站中,需要记录用户的当前登录状态、最新发布的消息及好友状态等,用户每次刷新页面都需要更新这些信息。

        Web应用中将这些多次请求修改使用的上下文对象称作会话(Session),单机情况下,Session 可由部署在服务器上的Web容器(JBoss)管理。在使用负载均衡的集群环境中,由于负载均衡服务器可能会将请求分发到集群任何一台应用服务器上,所以保证每次请求依然能够获得正确的 Session 比单机时要复杂很多。

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

        1.Session 复制

      Session 复制是早期企业应用系统使用较多的一种服务器集群 Session 管理机制。应用服务器开启 Web 容器的 Session 复制功能,在集群中的几台服务器之间同步 Session 对象,使得每台服务器上都保存所有用户的 Session 信息,这样任何一台机器宕机都不会导致 Session 数据丢失,而服务器使用 Session 时,也只需要在本机获取即可。

      这种方案虽然简单,从本机读取 Session 信息也很快速,但只能使用在集群规模比较小的情况下。当集群规模较大时,集群服务器间需要大量的通信进行 Session 复制,占用服务器和网络的大量资源,系统不堪负担。而且由于所有用户的 Session 信息在每台服务器上都有备份,在大量用户访问的情况下,甚至会出现服务器内存不够 Session 使用的情况。

      而大型网站的核心应用集群就是数千台服务器,同时在线用户可达千万,因此并不适用这种方案。

      

        2.Session 绑定

        Session 绑定可以利用负载均衡的源地址 Hash 算法实现,负载均衡服务器总是将来源于同一 IP的请求分发到同一台服务器上(也可以根据 Cookie 信息将同一个用户的请求总是分发到同一台服务器上,当然这时负载均衡服务器必须工作在 HTTP 协议层上,这样在整个会话期间,用户所有的请求都在同一台服务器上处理,即 Session 绑定在某台特定服务器上,保证 Session 总能在这台服务器上获取。这种方法又被称作会话黏滞。

        

        Session 绑定的方案显然不符合我们对系统高可用的需求,因为一旦某台服务器宕机,那么该机器上的 Session 也就不复存在了,用户请求切换到其他机器后因为没有 Session 而无法完成业务处理。因此虽然大部分负载均衡服务器都提供源地址负载均衡算法,但很少有网站利用这个算法进行 Session 管理。

        3.利用 Cookie 记录 Session

        早期的企业应用系统使用 C/S(客户端/服务器)架构,一种管理 Session 的方式是将 Session 记录在客户端,每次请求服务器的时候,将 Session 放在请求中发送给服务器,服务器处理完请求后再将修改过的 Session 响应给客户端。

        网站没有客户端,但是可以利用浏览器支持的 Cookie 记录 Session

        

      利用 Cookie 记录 Session 也有一些缺点,比如受 Cookie 大小限制,能记录的信息有限;每次请求响应都需要传输 Cookie,影响性能;如果用户关闭 Cookie,访问就会不正常。但是由于 Cookie 的简单易用,可用性高,支持应用服务器的线性伸缩,而大部分应用需要记录的 Session 信息又比较小。因此事实上,许多网站都或多或少地使用 Cookie 记录 Session。

        4.Session 服务器

        Session 服务器是可用性高、伸缩性好、性能也不错,对信息大小又没有限制的服务器集群 Session 管理方案。

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

        

        这种解决方案事实上是将应用服务器的状态分离,分为无状态的应用服务器和有状态的 Session 服务器,然后针对这两种服务器的不同特性分别设计其架构。

        对于有状态的 Session 服务器,一种比较简单的方法是利用分布式缓存、数据库等,在这些产品的基础上进行包装,使其符合 Session 的存储和访问要求。如果业务场景对 Session 管理有比较高的要求,比如利用 Session 服务集成单点登录(SSO)、用户服务等功能,则需要开发专门的 Session 服务管理平台。

      5.4 高可用的服务

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

        除此之外,具体实践中,还有以下几点高可用的服务策略。

        1.分级管理

        运维上将服务器进行分级管理,核心应用和服务优先使用更好的硬件,在运维响应速度上也格外迅速。显然,用户及时付款购物比能不能评价商品更重要,所以订单、支付服务比评价服务有更高优先级。

        同时在服务部署上也进行必要的隔离,避免故障的连锁反应。低优先级的服务通过启动不同的线程或者部署在不同的虚拟机上进行隔离,而高优先级的服务则需要部署在不同的物理机上,核心服务和数据甚至需要部署在不同地域的数据中心。

        2.超时设置

        由于服务端宕机、线程死锁等原因,可能导致应用程序对服务端的调用失去响应,进而导致用户请求长时间得不到响应,同时还占用应用程序的资源,不利于及时将访问请求转移到正常的服务器上。

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

        3.异步调用

        应用对服务的调用通过消息队列等异步方式完成,避免一个服务失败导致整个应用请求失败的情况。如提交一个新用户注册请求,应用需要调用三个服务:将用户信息写入数据库,发送账户注册成功邮件,开通对应权限。如果采用同步服务调用,当邮件队列阻塞不能发送邮件时,会导致其他两个服务也无法执行,最终导致用户注册失败。

        如果采用异步调用的方式,应用程序将用户注册信息发送给消息队列服务器后立即返回用户注册成功响应。而记录用户注册信息到数据库、发送用户注册成功邮件、调用用户服务开通权限这三个服务作为消息的消费者任务,分别从消息队列获取用户注册信息异步执行。即使邮件服务队列阻塞,邮件不能成功发送,也不会影响其他服务的执行,用户注册操作可顺利完成,只是晚一点收到注册成功的邮件而已。

        当然不是所有服务调用都可以异步调用,对于获取用户信息这类调用,采用异步方式会延长响应时间,得不偿失。对于那些必须确认服务调用成功才能继续下一步操作的应用也不合适使用异步调用。

        4.服务降级

      在网站访问高峰期,服务可能因为大量的并发调用而性能下降,严重时可能会导致服务宕机。为了保证核心应用和功能的正常运行,需要对服务进行降级。降级有两种手段:拒绝服务及关闭服务。

      拒绝服务:拒绝低优先级应用的调用,减少服务调用并发数,确保核心应用正常使用;或者随机拒绝部分请求调用,节约资源,让另一部分请求得以成功,避免要死大家一起死的惨剧。貌似 Twitter 比较喜欢使用随机拒绝请求的策略,经常有用户看到请求失败的故障页面,但是周围的人都正常使用,在刷新页面也好了。

      关闭功能:关闭部分不重要的服务,或者服务内部关闭部分不重要的功能,以节约系统开销,为重要的服务和功能让出资源。淘宝每年双十一促销就使用这种方法,在系统最繁忙的时段关闭"评价“、”确认收货“等非核心服务,以保证核心交易服务的顺利完成。

            5.幂等性设计

      应用调用服务失败后,会将调用请求重新发送到其他服务器,但是这个失败可能是虚假失败。比如服务已经处理成功,但因为网络故障应用没有收到响应,这时应用重新提交请求就导致服务重复调用,如果这个服务是一个转账操作,就会产生严重后果。

      服务重复调用是无法避免的,应用层也不需要关心服务是否真的失败,只要没有收到调用成功的响应,就可以认为调用失败,并重试服务调用。因此必须在服务层保证服务重复调用和调用一次产生的结果相同,即服务具有幂等性。

      有些服务天然具有幂等性,比如将用户性别设置为男性,不管设置多少次,结果都一样。但是对于转账交易等操作,问题就会比较复杂,需要通过交易编号等信息进行服务调用有效性校验,只有有效的操作才能继续执行。

     

      5.5 高可用的数据

       不同于高可用的应用和服务,由于数据存储服务器上保存的数据不同,当某台服务器宕机的时候,数据访问请求不能任意切换到集群中其他的机器上。

      保证数据存储高可用的手段主要是数据备份和失效转移机制。数据备份是保证数据有多个副本,任意副本的失效都不会导致数据的永久丢失,从而实现数据完全的持久化。而失效转移机制则保证当一个数据副本不可访问时,可以快速切换访问数据的其他副本,保证系统可用。

       5.5.1 CAP原理

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

        数据持久性

        保证数据可持久存储,在各种情况下都不会出现数据丢失的问题。为了实现数据的持久性,不但在写入数据时需要写入持久性存储,还需要将数据备份一个或多个副本,存放在不同的物理存储设置上,在某个存储故障或灾害发生时,数据不会丢失。

        数据可访问性

        在多个数据副本分别存放在不同存储设备的情况下,如果一个数据存储设备损坏,就需要将数据访问切换到另一个数据存储设备上,如果这个过程不能很快完成,或者在完成过程中需要停止终端用户访问数据,那么这段时间数据是不可访问的。

        数据一致性

        在数据有多份副本的情况下,如果网络、服务器或者软件出现故障,会导致部分副本写入成功,部分副本写入失败。这就会造成各个副本之间的数据不一致,数据内容冲突。实践中,导致数据不一致的情形有很多种,表现形式也多种多样,比如数据更新返回操作失败,事实上数据在存储服务器已经更新成功。

        CAP原理认为,一个提供数据服务的存储系统无法同时满足数据一致性、数据可用性、分区耐受性这三个条件。

        

        在大型网站应用中,数据规模总是快速扩张的,因此可伸缩性即分区耐受性必不可少,规模变大以后,机器数量也会变得庞大,这时网络和服务器故障会频繁出现,要想保证应用可用,就必须保证分布式处理系统的高可用性。所以在大型网站中,通常会选择强化分布式存储系统的可用性(A)和伸缩性(P),而在某种程度上放弃一致性(C)。一般来说,数据不一致通常出现在系统高并发写操作或者集群状态不稳(故障恢复、集群扩容.....)的情况下,应用系统需要对分布式数据处理系统的数据不一致性有所了解并进行某种意义上的补偿和纠错,以避免出现应用系统数据不正确。

      数据一致性可分为如下几点:

        数据强一致

        各个副本的数据在物理存储中总是一致的;数据更新操作结果和操作响应总是一致的,即操作响应通知更新失败,那么数据一定没有被更新,而不是处理不确定状态。

        数据用户一致

        数据在物理存储中的各个副本的数据可能是不一致的,但是终端用户访问时,通过纠错和校验机制,可以确定一个一致的且正确的数据返回给用户。

        数据最终一致

       这时数据一致性中较弱的一种,即物理存储的数据可能是不一致的,终端用户访问到的数据可能也是不一致的(同一用户连续访问,结果不同;或者不同用户同时访问,结果不同),但系统经过一段时间(通常是一个比较短的时间段)的自我回复和修正,数据最终会达到一致。

       因为难以满足数据强一致性,网站通常会综合成本、技术、业务场景等条件,结合应用服务和其他的数据监控与纠错功能,使存储系统达到用户一致,保证最终用户访问数据的正确性。

       5.5.2 数据备份

        数据备份是一种古老而有效的数据保护手段,早期的数据备份手段主要是数据冷备,即定期将数据复制到存储介质上并物理存档保管,如果系统存储损坏,那么就从冷备的存储设备中恢复数据。

        冷备的缺点是不能保证数据最终一致,由于数据是定期复制,因此备份设备中的数据比系统中的数据陈旧,如果系统数据丢失,那么从上个备份点开始后更新的数据就会永久丢失,不能从备份中恢复。同时也不能保证数据可用性,从冷备存储中恢复数据需要较长的时间,而这段时间无法访问数据,系统也不可用。

        在网站实时在线业务中,还需要进行数据热备,以提供更好的数据可用性。

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

        异步方式是指多份数据副本的写入操作异步完成,应用程序收到数据服务系统的写操作成功响应时,只写成功了一份,存储系统将会异步地写其他副本(这个过程有可能会失败)

        

        在异步写入方式下,存储服务器分为主存储服务器(Master)和从存储服务器(Slave),应用程序正常情况下只连接主存储服务器,数据写入时,由主存储服务器地写操作代理模块将数据写入本机存储系统后立即返回写操作成功响应,然后通过异步线程将写操作数据同步到从存储服务器。

        同步方式是指多份数据副本的写入操作同步完成,即应用程序收到数据服务系统地写成功响应时,多分数据都已经写操作成功。但是当应用程序收到数据写操作失败的响应时,可能有部分副本或者全部副本都已经写成功了(因为网络或者系统故障,无法返回操作成功的响应)

        

        同步热备具体实现的时候,为了提高性能,在应用程序客户端并发向多个存储服务器同时写入数据,然后等待所有存储服务器都返回操作成功的响应后,再通知应用程序写操作成功。

        在这种情况下,存储服务器没有主从之分,完全对等,更便于管理和维护。存储服务客户端在写多份数据的时候,并发操作,这意味着多份数据的总写操作延迟是响应最慢的那台存储服务器的响应延迟,而不是多台存储服务器响应延迟之和。其性能和异步热备方式差不多。

        传统的企业级关系数据库系统几乎都提供了数据实时同步备份的机制。而一开始就为大型网站而设计的各种 NoSQL 数据库(如HBase)更是将数据备份机制作为产品最主要的功能点之一。

        关系数据库热备机制就是通常所说的Master-Slave 同步机制。Master-Slave 机制不但解决数据备份问题,还改善了数据库系统的性能,实践种,通常使用读写分离的方法访问 Slave 和 Master 数据库,写操作只访问 Master 数据库,读操作只访问 Slave 数据库。

       5.5.3 失效转移

        数据服务器集群中任何一台服务器宕机,那么应用程序针对这台服务器的所有读写操作都需要重新路由到其他服务器,保证数据访问不会失败,这个过程叫作失效转移。

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

        1.失效确认

         判断服务器宕机是系统进行失效转移的第一步,系统确认一台服务器是否宕机的手段有两种:心跳检测和应用程序访问失败报告

         

       对于应用程序的访问失败报告,控制中心还需要再一次发送心跳检测进行确认,以免错误判断服务器宕机,因为一旦进行数据访问的失效转移,就意味着数据存储多份副本不一致,需要进行后续一系列复杂的操作。

       2.访问转移

       确认某台数据存储服务器宕机后,就需要将数据读写访问重新路由到其他服务器上。对于完全对等存储的服务器(几台存储服务器存储的数据完全一样,我们称几台服务器为对等服务器,比如主从结构的存储服务器,其存储的数据完全一样),当其中一台宕机后,应用程序根据配置直接切换到对等服务器上。如果存储是不对等的,那么就需要重新计算路由,选择存储服务器。

       3.数据恢复

      因为某台服务器宕机,所以数据存储的副本数目会减少,必须将副本的数目恢复到系统设定的值,否则,再有服务器宕机时,就可能出现无法访问转移(所有副本的服务器都宕机了),数据永久丢失的情况。因此系统需要从健康的服务器复制数据,将数据副本数目恢复到设定值。

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

      在网站运维实践中,除了网络、服务器等硬件故障导致的系统可用性风险外,还有来自软件系统本身的风险。

      5.6.1 网站发布

      网站发布相当于提前预知的服务器宕机,过程可以更柔和,对用户影响更小。通常使用发布脚本来完成发布,流程如下图

      

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

      5.6.2 自动化测试

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

      5.6.3 预发布验证

      预发部服务器是一种特殊用途的服务器,和线上的正式环境唯一的不同就是没有配置在负载均衡服务器上,外部用户无法访问。用于软件上线前的验证。

      

      预发部服务器和线上正式服务器都部署在相同的物理环境(同一个数据中心甚至同一个机架上,如果使用虚拟机,甚至可能在同一个物理服务器上)中,使用相同的线上配置,依赖相同的外部服务。网站工程师通过在自己的开发计算机上配置hosts 文件绑定域名 IP 关系直接使用 IP 地址访问预发布服务器。如果在预发布服务器上执行的测试验证是正确的,基本可以确保在线上正式服务器部署时也没有问题。

      不过,也有可能因为预发部验证而引入问题。因为预发布服务器链接的是真实的生产环境,所有的预发布验证操作都是真实有效的数据,这些操作也许会引起不可预期的问题。比如创建一个店铺,上架一个商品,就可能有真实的用户过来购买,不能发货会引起客诉。

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

      5.6.4 灰度发布

      应用发布成功后,仍然可能发现因为软件问题而引入的故障,这时候就需要做发布回滚,即卸载刚刚发布的软件,将上一个版本的软件包重新发布,使系统复原,消除故障。

      大型网站的主要业务服务器集群规模非常庞大,比如某大型应用集群服务器数量超过一万台。一旦发现故障,即使想要发布回滚也需要很长时间才能完成,只能眼睁睁看着故障时间不断增加却干着急。为了应付这种局面,大型网站会使用灰度发布模式,将集群服务器分成若干部分,每天只发布一部分服务器,观察运行稳定没有故障,第二天继续发布一部分服务器,持续几天才把整个集群全部发布完毕,期间如果发现问题,只需要回滚已发布的一部分服务器即可。

      

       灰度发布也常用于用户测试,即在部分服务器上发布新版本,其余服务器保持老版本(或者发布另一个版本),然后监控用户操作行为,收集用户体验报告,比较用户对两个版本的满意度,以确定最终的发布版本。这种方法被称为 AB 测试。

      

     5.7 网站运行监控

      5.7.1 监控数据采集

      广义上的网站监控涵盖所有非直接业务行为的数据采集与管理,包括供数据分析师和产品设计师使用的网站用户行为日志、业务运行数据,以及供运维工程师和开发工程师使用的系统性能数据等。

      1.用户行为日志收集

      用户行为日志指用户在浏览器上所做的所有操作及其所在的操作环境,包括用户操作系统与浏览器版本信息,IP地址、页面访问路径、页面停留时间等,这些数据对统计网站 PV/UV 指标、分析用户行为、优化网站设计、个性化营销与推荐等非常重要。

      具体用户行为日志收集手段有两种。

      服务器端日志收集。这个方案比较简单,Apache 等几乎所有 Web 服务器都具备日志记录功能,可以记录大部分用户行为日志,开启 Web 服务器的日志记录功能即可。其缺点是可能会出现信息失真,如IP地址是代理服务器地址而不是用户真实IP;无法识别访问路径等。

      客户端浏览器日志收集。利用页面嵌入专门的 JavaScript 脚本可以收集用户真实的操作行为,因此比服务器日志收集更加精准。其缺点是比较麻烦,需要在页面嵌入特定的 JavaScript 脚本来完成。

      此外,大型网站的用户日志数据量惊人,数据存储与计算压力很大,目前许多网站逐步来发基于实时计算框架 Storm 的日志统计与分析工具。

      2.服务器性能监控

      收集服务器性能指标,如系统 Load、内存占用、磁盘 IO、网络 IO 等对尽早做出故障预警,及时判断应用状况,防患于未然。

      此外,依据性能监控数据,运维工程师可以合理安排服务器集群规模,架构师及时改善系统性能及调整系统伸缩性策略。

      目前网站使用比较广泛的开源性能监控工具是 Ganglia,它支持发规模服务器集群,并支持以图形的方式在浏览器展示实时性能曲线。

      3.运行数据报告

      除了服务器系统性能监控,网站还需要监控一些与具体业务场景相关的而技术和业务指标,比如缓冲命中率、平均响应延迟时间、每分钟发送邮件数目、待处理的任务总数等。

      对于服务器性能监控,网站运维人员可以在初始化系统时统一部署,应用程序开发完全不关心服务器性能监控。而运行数据需要在具体程序中采集并报告,汇总后统一显示,应用程序需要在代码中处理运行数据采集的逻辑。

      5.7.2 监控管理

      监控数据采集后,除了用作系统性能评估、集群规模伸缩性预测等,还可以根据实时监控数据进行风险预警,并对服务器进行失效转移,自动负载调整,最大化利用集群所有机器的资源。

       系统报警

      在服务器运行正常的情况下,其各项监控指标基本稳定在一个特定水平,如果这些指标超过某个阈值,就意味着系统可能将要出现故障,这时就需要对相关人员报警,及时采取措施,在故障还未真正发生时就将其修复。

      失效转移

      除了应用程序访问失败时进行失效转移,监控系统还可以在发现故障的情况下主动通知应用,进行失效转移。

      自动优雅降级

      降级是指网站为了应付突然爆发的访问高峰,主动关闭部分功能,释放部分系统资源,保证网站核心功能正常访问的一个手段。淘宝每年“双十一”促销活动主动关闭“评价”、“确认收货”等非核心功能,以保证交易功能的正常进行,就是一种降级。

      网站在监控管理基础之上实现自动优雅降级,是网站柔性架构的理想状态:监控系统实时监控所有服务器的运行状况,根据监控参数判断应用访问负载情况,如果发现部分应用负载过高,而部分应用负载过低,就会适当卸载低负载应用部分服务器,重新安装启动部分高负载应用,使应用负载总体均衡,如果所有应用负载都很高,而且负载压力还在继续增加,就会自动关闭部分非重要功能,保证核心功能正常运行。

  • 相关阅读:
    POJ 3278 Catch That Cow(BFS)
    POJ 2488 A Knight's Journey(DFS)
    POJ 2386 Lake Counting(DFS)
    迷宫问题(BFS)
    两点(DFS)
    POJ 1001 Exponentiation(大数运算)
    Java IO流01-总叙
    hdu 2065 "红色病毒"问题(快速幂求模)
    POJ 2251 Dungeon Master(BFS)
    POJ 1321 棋盘问题(DFS)
  • 原文地址:https://www.cnblogs.com/veggiegfei/p/10469789.html
Copyright © 2020-2023  润新知