阅读-阿里游戏高可用架构设计实践

时间:2019-06-15
本文章向大家介绍阅读-阿里游戏高可用架构设计实践,主要包括阅读-阿里游戏高可用架构设计实践使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

原文地址https://mp.weixin.qq.com/s?__biz=MzA4Nzg5Nzc5OA==&mid=2651660980&idx=1&sn=640c3d2280d7657f236434ff6ba0b22b&scene=21#wechat_redirect

高可用的系统是设计出来的,不是靠运维保障出来的https://mp.weixin.qq.com/s?__biz=MzA4Nzg5Nzc5OA==&mid=2651660980&idx=1&sn=640c3d2280d7657f236434ff6ba0b22b&scene=21#wechat_redirect

面向业务的整体架构

  客户端重试:如果遇到故障,立即将请求转移到备用服务器,切原服务器不接受客户端传来的消息。

  传统的dns存在的问题

    来源:百度

    1、DNS劫持:DNS劫持又叫域名劫持,指攻击者利用其他攻击手段 (比如劫持了路由器或域名服务器等),篡改了某个域名的解析结果,使得指向该域名的IP变成了另一个IP,导致对相应网址的访问被劫持到另一个不可达的或者假冒的网址,从而实现非法窃取用户信息或者破坏正常网络服务的目的。

    2、DNS污染:网域服务器缓存污染(DNS cache pollution),又称域名服务器缓存投毒(DNS cache poisoning),是指一些刻意制造或无意中制造出来的域名服务器数据包,把域名指往不正确的IP地址。一般来说,在互联网上都有可信赖的网域服务器,但为减低网络上的流量压力,一般的域名服务器都会把从上游的域名服务器获得的解析记录暂存起来,待下次有其他机器要求解析域名时,可以立即提供服务。一旦有关网域的局域域名服务器的缓存受到污染,就会把网域内的计算机导引往错误的服务器或服务器的网址。  

            

    3、DNS缓存:DNS缓存指DNS返回了正确的IP之后,系统就会将这个结果临时储存起来。并且它会为缓存设定一个失效时间 (例如N小时),在这N小时之内,当你再次访问这个网站时,系统就会直接从你电脑本地的DNS缓存中把结果交还给你,而不必再去询问DNS服务器,变相“加速”了网址的解析。当然,在超过N小时之后,系统会自动再次去询问DNS服务器获得新的结果。所以,当你修改了 DNS 服务器,并且不希望电脑继续使用之前的DNS缓存时,就需要手动去清除本地的缓存了。

   

  来自https://mp.weixin.qq.com/s?__biz=MzA4Nzg5Nzc5OA==&mid=2651660980&idx=1&sn=640c3d2280d7657f236434ff6ba0b22b&scene=21#wechat_redirect

  解决方案:HTTP-DNS:用户可以向HTTP-DNS系统请求,其实也是域名和服务器的对应关系,但是它走的是HTPP私有的协议,而不是走传统的DNS协议。

  我们的运维人员可以直接在这个HTTP-DNS服务器上去修改配置,比如说某台机器有故障,运维一键就把它下掉了。我们的服务器也可以自己上报一些状态和监控给HTTP-DNS系统。

  优点:灵活、快速、方便

  整体解决方案:

  客户端重试+HTTP-DNS:正常走传统DNS,异常走HTTP-DNS

    异常机制不存在缓存机制,所以需要传统的DNS保证业务性能

业务分离:业务流程复杂,而且整个业务中包含了许多不必须的数据,那么就可以将业务分离,在业务之间设置接口,可以提供数据的访问。

服务中心:某一业务发出请求,服务中心给出回应但不处理请求,而是返回请求地址,让该业务去访问。而且可以解决访问损坏服务器的问题。

业务降级:通过关闭一些非核心的业务来保证核心业务的可进行。

异地多活:

https://mp.weixin.qq.com/s?__biz=MzA4Nzg5Nzc5OA==&mid=2651660980&idx=1&sn=640c3d2280d7657f236434ff6ba0b22b&scene=21#wechat_redirect

1、业务层数据同步。现在有两个主库了,每个集群读写自己的库。那么,两个集群的数据怎么同步呢?我们其实是通过应用层进行数据同步的,而没有采用数据库底层的机制读库。

这样做有一个好处,我们能够尽量通过程序去保证同步的有效性和及时性,而不依赖于底层,用程序可以做多种动作。

2、二次读取。虽然程序进行同步能够尽最大可能缓解同步时延的问题,但是在一定极端情况下其实还是有一定时延的问题。所以,我们又做了两个集群直接互相读取的功能,叫二次读取。

也就是说,有的数据在A集群还没有同步到B集群,B集群此时是读取不到的,这时B集群的系统会通过程序的接口再去访问A集群的系统,意思是:A集群,你这边有没有这个数据?如果有的话,A集群就要返回数据给B集群,B集群再把数据再写入本地。

3、可重复生成全局唯一数据。我们的游戏数据中有一个数据是要求全局唯一的,不管在哪个集群,不管什么时候生成,对于同一款游戏、同一个用户来说,这一个值都是唯一的。

原文地址:https://www.cnblogs.com/0710whh/p/11027972.html