"《英雄联盟》支撑最高750万同时在…

      今天在CSDN上看到 《英雄联盟》支撑最高750万同时在线用户的聊天服务打造  一文。因为这一年多来,自己主要在做一款IM产品,对其他IM产品比较关注, 所以在此做做笔记和写下读后感。
      1、高性能:“ 支撑750万并发用户,2700万日活跃用户,每秒钟需要处理的消息上万条,每台服务器每天处理消息达十亿条。”," 每个Chat服务器都可以支撑数百万连接数。"。单服务器能支持的并发连接数和Whatsapp差不多,这个数值还是相当高的,整个服务得优化得很好。
      2、高可用:“ 世界范围内部署的chat服务器达数百台,负责运维人员只有3个"、“99%的可用率”。对此作了很多工作,比如自动化监控和报警、动态代码加载( 热更新、 更新服务不用重启)、灰度更新、充足的日志、自动化测试。
      3、服务架构:一开始基于开源 XMPP服务 Ejabberd(用Erlang语言编写)。不过后来对erlang进行定制,重写了Ejabberd大部分代码(“ 扩展性、性能和容错机制是个长期奋斗目标,大部分的Ejabberd代码都已经被重写”) ,也偏离了核心的XMPP协议(“   基于性能和新功能等原因,他们不得不偏离核心XMPP协议") 。。。。我觉得早知今日何必当初,估计一开始就用Java写可能还更快。(ps:erlang开发土想也知道很难找)
      4、数据库架构:一开始用Mysql,后来使用 Riak( 开始时选择的MySQL造成了性能、可靠性、扩展性等多方面的问题。比如,数据模式的修改速度匹配不了代码的变更“) 每台服务器上都运行了Ejabberd和Riak。
       我觉得比较有启发性的点:
       1、在开发时考虑好逃生通道。” 最近有一次客户端升级造成了无限广播用户状态的问题。着眼Graphite,工程师很快定位到服务器因新客户端上线(带来的新特性)而崩溃。”“ 新功能开发时就会被添加Toggles(on/off )特性,如果一个功能导致问题产生,工程师可以立刻关闭它。“。 我觉得相比期望代码绝对不出错,预先规划好逃生通道应该更为科学和可行些。前一段看到微信的一个服务端设计——如果发现某个客户端一段时间内流量异常(可能是客户端死循环导致),则向客户端发送一个命令让其强制下线。我觉得也是体现了一样的思路。不完美,but it works.
       2、 在开发时考虑好运维 。具体措施主要就是 自动化监控和报警、 热更新、自动化测试、压力测试、灰度发布这些。虽然概念都知道,可惜知易行难,往往由于人手和时间有限,没有办法去开发 相关 工具。从管理角度来看这些属于”重要但不紧急“的范畴。如果想要做真正优秀的服务,还是得在这方面继续努力。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值