AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

指数级增长业务下的服务架构改造 by 梁宇鹏@环信

发布者 arch
发布于 1450141372768  浏览 6039 关键词 架构 
分享到

第1页

指数级增长业务下的 服务架构改造

环信⾸首席架构师 梁宇鹏 @⼀一乐



第2页

增长速度



第3页

增长速度

每⽉月⼀一翻 春节假期 2x 同时在线近千万



第4页

公司及个⼈人

环信,即时通讯云服务 帮助移动APP添加IM功能

专注IM领域 环信⾸首席架构师,原新浪微博通讯技术专家 XMPP开源项⽬目Jabberd2、Ejabberd、Openfire



第5页

⼤大纲

架构演化 经验教训 ⼯工具实践



第6页

服务架构



第7页

服务架构

IDC 3 Cluster Cell 4 Machine 500+ Erlang 120+



第8页

架构演化

100K -> 1M -> 10M -> more 伸缩性 可⽤用性



第9页

伸缩性,通⽤用

⽔水平 -> 容量 -> 分区 MySQL,千库万表 Cassandra,动态扩容? Mnesia,fragment

垂直 -> 性能 Redis缓存,业务独⽴立



第10页

伸缩性,通讯

分层设计 连接层、会话层、推送层

读写分离 写库读缓 -> ⽂文件服务,Token存储 写处理迁移 -> 关系存储从IM到REST



第11页

可⽤用性,通⽤用

需求增加 解耦,Kafka/Redis

峰值应对 队列,群发消息流控 降级 ,消息第⼀一,登录次之



第12页

可⽤用性,通讯

软实时 HOL blocking -> 队列迁移 or 清除

降级 开关 -> 关停异常接⼝口,留缓存舍DB 数据恢复 -> ⽤用户注册⽇日志



第13页

⼤大纲

架构演化 经验教训 ⼯工具实践



第15页

经验教训

不完美主义 不多写代码 e.g. 会话存储拆分

头疼医头也医脚 先容忍失败,再解决问题 e.g. 节点关闭逻辑

不头疼不医头 量化分析 e.g. VM参数调整回滚



第16页

经验教训

未⾬雨绸缪,超容量压测 峰值总⽐比预期要早到来 数据仿真,从业务数据分析 e.g. 群⽤用户分布 抓⼤大放⼩小 e.g. 登陆流程



第17页

经验教训

多租户多业务 通⽤用性外有易变性 随新⽤用户进来⽽而改变 意外热点 IN、TFboys



第19页

云上新挑战

性能波动导致承载容量下降 Noisy Neighbors 取消数据节点磁盘快照

问题排查透明性? 资源到服务,rds也要监控



第20页

云上新挑战

特定云问题 SLB⼼心跳检查 SLB性能瓶颈

容量以及服务限制 跨云设计 只⽤用公共特性



第21页

Dev & Ops

Ops can dev 会武术有⽂文化 Nginx 降级限流

Dev for ops 好基友⼀一辈⼦子 优化减少运维负担



第23页

演练



第24页

⼤大纲

架构演化 经验教训 ⼯工具实践



第25页

语⾔言问题



第26页

我们⽤用Erlang

轻量级线程,消息传递 并发友好,消息的软实时投递

速错 Fail Fast 有错误不影响整体,健壮

不可变变量 ⽆无副作⽤用,不容易出错



⼀一切皆缘



第27页

我们⽤用Erlang

⽇日志组件Lager 同步异步切换问题,增加限流high_water_mark flume backend + no thrift compact protocol support

VM崩溃和调教 port_get_data in ERTS6.3 http://t.cn/RAOhWji dist_buf_busy_limit: +zdbbl 2048000



第28页

我们⽤用Erlang

公平的调度器,并不公平的世界 越来越多的线程

Mnesia死等和数据改造 多个节点同时重启更容易出现 开箱即⽤用 /= 开箱够⽤用 new hash module for fragment



第29页

我们也⽤用Java

语⾔言像⾷食物 ⼝口味之争 要开味蕾?要见世界!

语⾔言只是⼯工具 ⼀一门语⾔言就可以活 不要为语⾔言⽽而活



第30页

压测⼯工具

TSung TCPCopy

65535 problem? ReuseAddr and Port Client 200+



第31页

团队协作

及时决策 讨论要有定论

要⾃自组织 ⾃自我驱动,要有⽅方向

远程办公 注意沟通效率 + Slack Skype



第33页

未来展望

同时在线⼏几千万、上亿 ⾯面向全球⽤用户的即时通讯系统 微服务架构改造,Docker部署到开发 更多的优秀⼈人才,不再2+3+4 多语⾔言Erlang Java Go



第34页

谢谢

@环信即时通讯云 @⼀一乐



支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。