《阿里游戏高可用架构设计实践》读后感

news/2024/7/6 0:27:33

《阿里游戏高可用架构设计实践》读后感

在文章当中我印象最深刻的一句话是“高可用的系统是设计出来的,不是靠运维保障出来的!”游戏出现故障会有很多原因,并不是说除了程序Bug以外,可能其他都是运维背黑锅了。其实,这些问题背后真正的原因是系统设计方案有问题,也就是说,技术上是比较弱的。

1、 高可用目标-传统方法

高可用其实都是指几个9,5个9的话可能就是电信级或者金融级的,互联网大部分是3个9到4个9。

2、 高可用目标-面向业务

最终确定的目标跟几个9的目标有一个比较大的区别,几个9的目标主要是从系统的角度去考虑的,就是说这个系统的可靠性是几个9。而目标是面向整个业务,这个目标就是3分钟来定位问题,5分钟能恢复业务,而且问题的发生频率不能太高,2个月发生一次。

目标的优点:

1、聚焦业务。

2、容易分解。目标本身就是我们的工作方向,首先要定位问题,怎么定位问题?我们就可以想一个办法,其次是恢复业务,第三是故障的频率不能太高;

3、容易衡量。我们后来再做方案的时候,很多方案只要拿这个标准一套,基本上就能够判断这个方案是否可行。

3、高可用整体架构

1)HTTP-DNS

在游戏接入阶段,游戏里会嵌入SDK,对于SDK内的产品来说,如果遇到后端故障,最快、对用户影响最小的解决方式是立刻去重试,服务器1有故障的话,重新发一个请求到服务器2,就能够正确处理业务。重试里面有一个关键点需要特别注意,重试的时候必须保证这个请求不要再发到原来有问题的服务器上面,否则这个重试只是浪费时间。

HTTP-DNS系统有三个优点:

一、灵活。因为这个走的是HTTP的协议,而且是私有的,可以基于自己的业务特点做很多个性化的东西。

二、快速。因为它不存在缓存这个问题,一旦运维人员甚至是测试同学把这个服务器下掉后,用户这个请求能够立刻拿到最新的结果,避免重复返回到原来有故障的机器。

三、方便。这个系统是我们自己维护的,想做什么样的操作都可以,如果是公共的DNS那就做不了。

2)架构解耦

业务分离的做法就是把核心业务和非核心业务分拆到不同的系统中,把两个系统之间通过接口调用,互相访问。

3)业务降级

整个系统拆分成核心业务系统和非核心业务系统,在一些紧急情况下,比如说非核心业务系统重启也没有办法,甚至说某个数据库搞挂了,它又影响业务核心系统。阿里做了一个专门的降级系统,降级系统可以去下发这些降级指令。一般情况下由降级系统给非核心业务系统下发降级指令,如果到了一些关键时刻,其实核心业务系统中有的接口也是可以进行降级的。也就是说,降级的时候并不是对整个系统或者整个功能进行降级,可以做到接口或者url这个级别的降级。通过牺牲非核心业务系统的功能,尽最大努力地去保证核心业务系统提供的业务。

4)异地多活

原来的老架构中分两个集群:A集群、B集群。两个集群共用同一个数据库主库,部署在A集群,所有的写操作都放在A集群主库,由A集群主库同步到A集群从库、B集群从库,各集群的读操作都直接读集群本地的从库。它的缺点是存在全局单点的问题,假如说A集群主库挂了,两个集群的业务基本上全部不能提供了。第二个问题是跨机房同步时延的问题,从A集群同步到B集群,我们是直接通过MySQL底层的复制机制去同步的,在一些比较极端的情况下,它的时延可能达到半小时甚至一个小时,这么大的时延的情况下,提供的业务可能就有问题。为此,新架构产生了:业务层数据同步、二次读取、可重复生成全局唯一数据

5)360度监控

自动化的监控方案是业界现在最常见的ELK解决方案,整个方案是实时采集和分析的,并不需要人工参与。并且,每一层的指标,都通过一个系统可视化展现出来。比如,今日的访问量、今日的正确率、最近一分钟的平均响应时间、错误率。

6)设计哲学

面向业务。不单单关注某一个系统某一个模块的可靠性和高可用,而是站在整个业务流程的角度去分析一下,为了保证这个业务的高可用,每一个步骤、每一个环节、每一个系统应该怎么做,需要做哪些改进和优化。

技术驱动。我们并没有说制定完善的流程、提高人的素质或者采购更贵的硬件、更好的硬件,整体的方案都从技术的角度去考虑。

关注核心。非核心业务我们可以紧急的时候停掉或者关掉。  

可量化。360度监控里的这些指标、分析都是可以量化的,整个项目目标也是可以量化的。

转载于:https://www.cnblogs.com/wxd136/p/11040146.html


http://www.niftyadmin.cn/n/4073033.html

相关文章

酱油 Noip2018颓废记

也不知道写一些什么了 凑和着写写吧 最近十分的¥#&(^ ……#%!*%¥^#$# Day -1 上午考了一场试 就\(TM\)考了60分 好不容易积攒起来的信心啊~~~~~~ 就这么垮了~~~ 下午每一个人把考前注意事项好好的说了一下 大抵都是什么 1.不开\(long\ \ long\)见祖宗…

WiFi万能钥匙首席安全官:公共WiFi风险占比仅0.81%

2017年上半年公共WiFi安全报告 9月15日晚间消息,WiFi万能钥匙将进行全面升级,通过强化安全检测功能以及对于用户的风险提醒,防钓鱼能力将再度提升。WiFi万能钥匙首席安全官龚蔚透露,根据调查,国内风险WiFi热点占比为0.…

使用chrome-har导出浏览器HAR数据

这里使用nodejs下的chrome-har库来导出浏览器的har数据,经验证效果不错,比较靠谱。 1,创建日志配置(ultra-harlog/module/log.js) //cnpm install --save log4js const log4js require(log4js);const options {appenders:{console:{type: &…

Spring FrameWork从入门到NB - Spring AOP(实战)

这篇文章的目的是对上一篇文章有关AOP概念的温习和巩固&#xff0c;通过实战的方式。 引入依赖 首先需要引入Spring Aspect依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5…

asyncio + pycurl + BytesIO 异步批量调用url请求

import asyncioimport pycurlfrom io import BytesIOimport json def fetch_api(url, method, headerNone, dataNone):"""url&#xff1a; 获取api的urlmethod: 请求方法header: 请求头data: 请求参数""" if method "get":_Curl pyc…

《中国人工智能学会通讯》——1.2 问答与智能信息获取

1.2 问答与智能信息获取 问答系统作为智能表征的研究领域&#xff0c;几十年来一直受到学术界的关注&#xff0c;国际评测 TREC 历经十余年对问答系统从几个方面进行了评测[4] 。问答系统的发展杂问题的发展过程&#xff0c;逐步具有了更多的智能行为特性。这个过程并不是一个单…

Ubuntu的穆斯林版 UbuntuME

Ubuntu Muslim Edition&#xff0c;Ubuntu穆斯林版&#xff1a;基于Ubuntu&#xff0c;加入了很多伊斯兰相关的软件。Ubuntu Muslim Edition团队最近释放了基于Ubuntu 7.10 (Gutsy Gibbon)的UbuntuME 7.10。 和标准版Ubuntu不同的是&#xff1a; 删除了GNOME游戏&#xff08;GN…

call function

1 call递归扩展变量 本质上仍然是变量扩展&#xff0c;等价于$()&#xff0c;只不过扩展的时候带了参数&#xff0c;$(call xxx)返回的是xxx扩展之后的值。参数依次赋值给$(1),$(2)......&#xff0c;但是参数要在赋值之前完成扩展。 2 call define定义的多行变量 本质上仍然是…