11月28日

作者: 船长1492 | 来源:发表于2018-11-28 19:45 被阅读15次

    今天学习了互联网网站的高可用性架构,所谓的高可用性就是无论何时网站的功能都是可以使用的。这大概是互联网站最重要的性能了。通常由指标来衡量一个网站的可用性,比如三个九或四个九,所谓三个九就是每月服务时间中断,不能超过四十几分钟,所谓四个九是一年最多中段53分钟。这与互联网行业的其他服务,比如运维的指标是一致的。

    可用性是衡量网站的最重要指标,同时它也是衡量绩效的最重要指标。该指标直接与个人和团队的考核相关与奖金与业绩挂钩。对于一个网站来说,它是有很多硬件设备组成的。对于不差钱的公司,比如说银行证券,这些公司它会采购最贵的操作系统,最贵的硬件,最贵的数据库和存储设备来提高系统的可用性,对于互联网企业由于部署的规模十分庞大,一般采用开源软件,即廉价的PC服务器,搭建高可用的平台。如此众多的硬件设备,并且是廉价的,配件损坏的几率是很高的,比如一台服务器上的硬盘,由于长时间的读写和损耗损坏的概率更大。即使部分硬件损坏也能保证网站的业务连续性,是互联网网站架构设计重要的目标。

    根据昨天所学到的内容,一个典型网站的设计通常是分层次的,包含应用层,服务层和数据层每个层次都具有保证高可用性的具体措施。通常来说,应用层调用服务层,服务层调用数据层,层与层之间是松耦合的关系,同时各个层的各个模块要保持无状态的特点这样才能使用集群的方式通过不断的添加服务器实现系统的扩展,因为向集群中不断添加服务器,相当于有众多的服务器接受服务请求从而降低了故障设备对于集群整体的影响。

    应用层主要是通过负载均衡对无状态的服务进行失效转移负载均衡服务器负责接收来自于用户的访问请求,把它分发给集群中的web服务器,这样每台web服务器所承担的负载将是整个集群的1/n。当有一台服务器宕机后,只需在负载均衡服务器的列表中将该服务器删除即可。在实际使用的过程中,用户的访问是包含状态的这些状态,实际上就是会话session,保持状态有很多种方式,比如说复制比如说绑定,比如说利用cookie记录,或者是单独设置session服务器,这种解决方案实际上是将应用服务器的状态分离,分为无状态的云服务器和有状态的session服务器两种,还有比较简单的办法是利用分布式缓存或数据库,在这些产品的基础上进行包装,使其符合session的存储和访问的要求。

    对于服务的高可用性,主要是分级管理,超时设置和异步调用服务,降级等等,分级管理是指给服务划分不同的优先级,在关键时刻保证高优先级的服务正常进行超时设置是设置定的超时时间,如果应用程序调用服务的时间超时了,那么就会反应异常,应用程序会根据调度策略,重新选择其它的服务器。异步调用是指将访问发送到队列中进行排队同时给客户以反馈,并且能够让客户跟踪异步调用处理的进展。虽然异步调用可以保证数据的滞后传输但是也要根据业务情况以及流程进行权衡,有些业务不适合异步调用就不能使用这种排队模式。服务降级视觉,在网站访问的高峰期保证重要的高级别的服务优先执行而拒绝或者关闭不重要的服务,以保证网站的整体性能。幂等性设计是指应用服务调用失败后会将请求重新发送到其他的服务器,但这个失败了有可能是虚假的失败,比如说服务已经处理成功,但是因为网络故障没有收到响应,这个时候应用重新提交请求就导致了服务重复调用。必须通过措施来保证重复调用和调用一次,产生的结果是相同的对于比较重要的交易信息来说必须保证信息的一致性。

    数据无论何时,都是一个网站最重要的资源,因为硬件可以购买,软件可以重写,但是数据如果丢失了,将是不能挽回的。保证数据存储的高可用的手段,主要是数据备份和失效转移机制,数据备份就是保证数据有多个副本任意副本失效都会从其他的副本获得数据,以此保证系统的可用缓存服务,其实也是数据的一种,只不过数据保存的位置不在存储设备上,而是在内存中。有些观点认为,对于缓存服务器也需要设计与存储设备类似的可靠性保证机制但是实际上缓存能够分担数据存储的压力,但是他本质上还不同于数据存储,如果缓存设备损坏了,那么数据可以通过直接访问存储设备保证数据的可持续访问。只要能够合理的控制影响的范围,使其不至于对整个系统的稳定性造成太大的影响即可。

    高可用的数据有以下几层含义,首先数据的持久性就是数据,无论在什么时刻都不会丢失,第二是数据的可访问性数据不管存放在什么设备上,或者是存储设备发生了损坏,可以将数据访问切换到另外一个位置,但数据自始之终都是可以访问的,第三是数据的一致性,在数据有多个副本的情况下,如果是网络服务器或者其他方面出现故障,就会导致部分副本写入成功,部分副本写入失败,从而造成副本之间的数据不一致。cap原理认为,一个提供数据服务的存储系统,不能同时满足数据一致性,数据可用性和分区耐受性这三个条件。分区耐受性就是系统可以进行线性的伸缩,可用性是数据存储的最基本要求。所以在实际情况下,一般会牺牲数据的一致性。有三种数据一致性,第一种是数据的强移至各个副本的数据在存储中总是一致的,第二种是数据用户的一致性,虽然各个副本的数据可能是不一致的,但是用户访问该数据的时候通过纠错或者是校验机制,可以给用户提供一个最终正确的数据。第三种副本中的数据可能是不一致的,用户访问的时候可能也是不一致的,但是经过一段时间可以进行自我恢复和修正,最终达到一致。在实际应用中,一般网站会选取用户一致性作为通常的方案。

    数据设备可分为两种方式,一种是一部热备方式,一种是同步热备方式,所谓异步热备方式就是将服务器分为主存储服务器和从存储服务器应用程序会将数据写入主存储服务器由主存储服务器向被存储服务器进行数据同步。所谓同步热备就是指应用程序同时将数据读写字,每个存储服务器。这种情况下,存储服务器没有主从之分。关系数据库,热备机制就是通常的主从服务器同步机制。实践中通常是使用读写分离的方法来访问主,从数据库写的时候,只访问主数据库,读的时候只访问从数据库虫儿降低数据库服务器的负载。

    除了数据复制,还有一种方式是失效转移应用服务器如果访问存储服务器失败后,他会向控制中心报告失效情况,控制中心通过心跳报文检测存储服务器是否正常,如果确认不正常,对应用程序服务器进行失效确认,那么应用程序服务器将会去访问另一台存储服务器的数据副本。因此集群中的数据副本就会减少,必须将副本的数目恢复到系统设定值,如果再有服务器宕机,也能够保证数据可访问性。

    对于使用集群的服务器网站的发布,通常的步骤是这样的,首先关闭负载均衡服务器上的一台或者是一小批服务器的路由,其次关闭这些服务器上的应用,第三,将软件代码复制到这些服务器上,然后启用这些服务器上的应用,然后打开负载均衡服务器上这些服务的路由。最终将集群所有的服务器完成发布。

    相关文章

      网友评论

      • 862e58eaa410:我盯着这些字,这些字看着我。然后默默地~无言以对。🤔

      本文标题:11月28日

      本文链接:https://www.haomeiwen.com/subject/jxnzqqtx.html