【.com原稿】在WOT2016移动互联网技术峰会上,陌陌技术支持部总监张明强先生表示“业务越大系统,越难保证高可用性”。会上,张明强先生以整体的视角,全面总结了以往高可用保障工作的方方面面,以及各个方面容易踩的坑。2013年加入陌陌的张明强,经历了流量爆发式增长给技术架构和团队管理带来的各种问题,以及解决这些问题的过程。现任技术支持部总监,主要负责基础设施、运维、安全、信息化等工作,致力于提升服务稳定性和团队开发效率。故障分类最常见的原因是挂起。挂起一般分为三种:完全消失、假死和暂时断开连接。对于这些故障形式,都有相应的解决方案。在复杂的业务架构中,监控是核心部分。如果没有监控,再强大的技术,系统也永远无法做到高可用。监控做好后,还要准备一支“后备军”。挂起后,切换到另一个。使用多个实例来解决挂起问题。多实例可以解决所有的管理问题,只要设计得当。拆分是整个架构设计中非常重要的思想。系统复杂的时候,像病了一样挂掉是在所难免的。这时候就用分裂的思路来防止病原体的传播。这个思路几乎可以解决所有问题。因为硬件的完善,没有出现太多因挂起而导致的故障。但是,如果代码逻辑写得不好,设计稍有不慎,或者数据库太大,都会造成各种慢问题。慢也有三种表现:自身慢、下游慢、上游慢。对于自慢,只要改进自己的问题,就可以改进代码或者结构。下游慢是日常运维过程中比较容易出现的问题。多是由于数据库慢导致依赖它的某个服务变慢造成的。这时候就需要分析问题是来自自己的数据库还是第三方的问题,分析日志和监控数据。变得非常重要。上游慢不是很常见,但也不能忽视。其实99%的故障都很简单。只要在设计阶段能想到,就可以解决。主要问题可以在设计阶段考虑。解决方法很简单,第一是多实例,第二是缓存,第三是拆分。另一个失败的原因是错误,错误是导致问题最多的错误,也是设计中最容易忽略的错误。这种设计依赖于下游模块,错误有两种形式:错误和空。纯粹的故障错误是完全可以避免的,但技术并不完美。技术无法解决的问题,需要通过管理或其他方式来解决。技术和管理两条线不能放松。其中,流程规范是解决错误的最佳方案。团队中的每个人都可能犯错误,但是如果流程标准化,就可以尽可能避免这样的问题。这也是创建更多实例的一种非常好的方法。当一个实例出错时,至少你可以从其他地方恢复,并采取更多类似的措施来防止整条线崩溃。针对这些故障,张明强总结了五个具体的解决方案。分析***就是监控,监控是基础,是整个高可用系统的基础。监控分为三种形式:一种是业务监控、平台/框架监控、硬件监控。企业使用许多不同的框架。这三者的结合可以创建一个完整的监控系统。监控容易踩的坑有四个:第一,监控=数据+告警。所有的数据都必须有告警才叫监控,否则只能叫统计。二是报警要看,要保证报警有效。第三,依靠监控和自动处理的设计,谨防误报,依靠多因素验证。四是监控拖累服务。二是多实例。多实例的核心是准备。有冷备、热备、多活三种表现形式。冷备份的核心是当某个服务出现故障时,备份实例无法立即启动,需要手动接入。手动访问是冷备份的核心特征。热备份非常简单。比如常用的有LVS和Keepalived。许多内部设计都是热备份的。出现问题后,无需工程师亲自管理,程序自动切换。第三部分是多活,多活是多实例中的一个最优目标,所有实例同时运行业务。多实例有3个容易踩的坑:第一,要时刻记住多实例是用来解决什么层次的问题,把握自己的需求,解决错误。2、客户端切换会失败吗?从整体做起,不仅服务器可以,客户端的请求必须断掉。第三,要清楚备机容量是否足够,这是多实例中最容易出现的问题。第三种方法是拆分。当所有的方法都用完了,拆分就可以了。把错误的、有问题的拆分出来,分别部署,才是最有保障的方案。拆分有两种表现形式:一种是拆分入口,通过一定的路由规则将请求路由到不同的服务器,防止一个挂全挂;另一个是拆分阶段,将一个同步请求拆分成很多部分,比如常说的异步之类的话。第四种方法是缓存。缓存本来就是用来解决性能问题的。第一种方法是不断将CPU添加到L1/L3缓存中以提高速度;第二种方法是单通道改成多核,把一个实例改成多个实例来设计,缓存形式只有一种,就是缓存数据。缓存中容易踩的坑有四个:一是没有监控渗透率,极低而不自知。第二,脏数据。三是制度支持普及率太低。第四,缓存太分散,导致IO次数太多,耗时太长。为了监控,缓存必须具有高效率。缓存还关心命中、未命中、性能和容量。最好的方法是过程规范。前面说了,技术是不完善的,所以技术和管理要结合起来。流程规范有两种形式:一种是强制性规范,另一种是倡导性规范。工艺规范容易踩的三个坑:一是规范多。二是实施起来太复杂。三是没有人遵守,管理层也没有跟进。对于流程规范,在线规范是最重要的,在线规范是灰度发布最重要的部分。这两个是整个高可用系统最重要的障碍。若是能够随意突破,在我面前再怎么努力也是白搭。【原创稿件,合作网站转载请注明原作者和出处为.com】
