【转】文章地址:https://mp.weixin.qq.com/s/iTtpa2zUpboKum6xfgXwQQ【该文章为李运华老师的演讲《阿里游戏高可用架构设计实践》文章】
李运华老师将演讲文章内容提炼出一句精华之语:“把运维的锅让研发去背!”即高可用的系统是设计出来的,不是靠运维保障出来的!
在很多时候,系统发生了故障,如机柜断电、交换机断机、服务器断机、程序Bug等故障,大家认为硬件设备的问题就跟研发组的同鞋没有关系,但事实真的如此吗?经过深入的讨论和分析,最后得出根本原因还是系统设计方案有问题,即技术上是比较弱的。得到根本原因后解决策略就比较容易看出,即“把运维的锅让研发去背!”,由此,可以确定一个目标:高可用性即是指几个九,是99%还是99.9%还是99.99%还是99.999%等等,这个指标的优点的是业界通用,但是除了技术人员,其他的同学不是很能理解这个指标。所以又制定了另一个目标:3分钟来定位问题,5分钟能恢复业务,而且问题的发生频率不能太高。这个目标的优点是聚焦业务、容易分解(首先要定位问题,其次是恢复业务,再次是故障的频率不能太高)、容易衡量(再做方案的时候,很多方案只要拿这个标准一套,基本上就能够判断这个方案是否可行)。
高可用性整体架构可以分为用户层、网络层、服务层、运维层四层。
用户层包括客户端重试,如果遇到后端故障,最快的、对用户影响最小的解决方式是立刻去重试,服务器1有故障的话,我们重新发一个请求到服务器2,就能够正确处理业务。重试有一个关键点需要特别注意,重试的时候必须保证这个请求不要再发到原来有问题的服务器上面,否则这个重试只是浪费时间。
网络层包括HTTP-DNS,即域名和服务器的对应关系,它有三个优点:①灵活。可以基于自己的业务特点做很多个性化的东西。②快速。因为它不存在缓存的问题,一旦运维人员甚至是测试同学把这个服务器下掉后,用户这个请求能够立刻拿到最新的结果,避免重复返回到原来有故障的机器。③方便。这个系统是运营商自己维护的,想做什么样的操作都可以,如果是公共的DNS那无法实现这个效果。
服务层包括架构解耦、业务降级、异地多活,架构解耦包括业务分离和服务中心,业务分离即把系统中的功能分开,因为对于游戏玩家来说,只有登录注册是强相关的,业务分离就是把核心业务和非核心业务拆分到不同系统中,调用时通过接口访问;服务中心类似于DNS,是实现整个内部系统之间服务调用时候的调度功能。业务分离将核心业务和非核心业务分开后,可能会出现一些极端情况,比如非核心业务启动不了了,或者数据库崩了,它就会影响核心业务。但是,在这种比较极端的情况下,我们可以通过人工的方式下发降级指令,把这个非核心业务系统的功能给停掉,这个停掉并不是把程序停掉,而是说把其中的一个接口或者url停掉,核心系统去访问的时候就得到一个500或者503错误。异地多活的优点有业务层数据业务、二次读取、可重复生成唯一数据。
360°监控整体方案从上到下分为五层:业务层、应用服务层、接口调用层、基础组件层、基础设施层。业务层就是业务上的打点,根据这些打点进行机型统计或者分析;应用服务层就是url的一个访问情况;接口调用层就是系统对外部依赖的那些接口的访问情况;基础组件层即使用的一些组件,包括MySQL等;基础设施层就是最底层的设备,包括操作系统、网络、磁盘、IO这些设备。
经过这些技术的修改,大大提高了系统的可用性,虽然设备还是会出现故障,但是系统对这些故障的处理很及时,最重要的是不影响用户的使用。