除了从观念上重视系统研发生命周期的各个阶段以外,真正建设高可用的系统还需要一整套工具体系的支撑,这套体系包括压测体系、管控体系、监控体系、恢复体系和度量体系。
1.压测体系
压测体系是测试时发现问题的重要手段。压测除了能帮助发现功能异常外,还能发现一些平时不容易发现的问题,如当系统压力大时系统的表现情况、线上系统的容量配比是否合理、系统的容灾保护是否到位等。压测一般分为单系统压测和全链路压测,我们所说的压测是线上真实生产环境的压力测试。
(1)单系统压测
比较容易实現,有多种实现手段。
种是引流的方式,就是将线上集群中的流量集中到少部分的机器上,当这些机器流量变大时就会达到瓶颈,就能得出单机的极限性能,根据单机的性能就能推算出整个集群的性能。由于是线上的真实用户的访问请求,这种引流的方式不会产生额外的测试数据,所以对读、写系统都合适。
另外一种是放大流量的方式。例如通过Tcpcopy工具可以把一个请求copy出多个重复的请求;还有一个方式是针对页面类型这种系统,可以在页面中注入一些
JavascriptnewImage.r-htp://item.beta.taobao.com/tem.htm?id-fitemld)
在请求这个页面时,会自动向服务端额外发送一个请求,这样可以让用户帮我们制造流量达到压测的目的。当然这种方式会产生压测数据,所以只适合读系统而不适合写系统。
(2)全链路压测
全链路压测是目前比较好的、可以制造出线上大流量的手段。它的优点在于能串联线上全部系统,并让每个系统同时达到流量峰值(尤其是公共系统),所以适用的场景更多,但实施成本相对较高。
全链路压测的技术难度并不大,技术手段主要有流量的制造、流量的标记、测试数据的处理,全链路压测的架构。
流量的制造除了要能够控制流量大小外,还要注意流量发起所在的物理网络位置最好能保证流量是从不同的地理位置发起的,流量发起端可以部署在各地的CDN节点中,并把不同的网络运营商也考虑进来,这样能更好地模拟真实的用户请求。流量的标记
流量制造出来以后,需要做标记,因为它们属于测试流量,它们的数据是测试数据,不能和线上的真实数据混同。
标记流量有多种方式:一种是设计不同的数据,例如商品数据的商品ID都以999开头、把订单ID设置在某个特殊的区段内;第二种是给每个请求贴上一个tace标签,每个系统调用的地方都能识别出这个标签,一方面可以做一些特殊处理,如取消token验证,另外一方面也可以把它路由到特殊的数据表中。
tace的传递是一个难题,最好的方式是通过中间件来完成:从最外面的HTP协议将tace添加在Header中,到应用的RPC调用中也可以加到协议头中,再到数据层中也一样,最重要的是要保证race标签不能被丢掉否则将出现脏数据。
测试数据的处理
对测试数据的处理是最关键的环节,因为是线上真实生产环境的压测,所以对产生的数据的处理不能影响线上的真实数据。对此,我们提出影子表的概念,它和线上的真实表完全一样,甚至和真实表一样用在同一个数据库实例中,通过传递下来的tace标记把这个请求需要写的数据路由到影子表中,这样测试流量的读写都在影子表中完成,不会影响线上的真实数据。将测试数据通过影子表来隔离是非常关键的,如果放在一起会引起很多麻烦,也不好清理,即使能够清理也会影响正式表的主键生成规则,影响下游BI对数据的分析和一些监控指标的展示等。
2.管控体系
管控体系主要是在遇到一些异常情况时提供保护系统的措施,包括开关系统、预案系统、限流降级系统等。
1)开关系统
开关系统主要是管理一些线上常用的操作,尤其是一些带有联动性的操作,通过统一管理可以减少出错的概率。网站建设开关系统既要支持基于内存和持久化的操作方式,也要支持单机和集群的灵活操作方式。
>>> 查看《网站建设高可用体系化建设》更多相关资讯 <<<
本文地址:http://www.phpweb.com.cn/news/html/4548.html