8 月 12 日,「云片技术开放日」上海站,云片 CTO 林佳齐带来了《云通讯的技术架构演变与稳定性探索》主题演讲,分享了通讯简史、云通讯特点、云片系统设计理念、架构演变和稳定性实践,为开发者在不同阶段进行适当地技术选型具有一定参考价值。
林佳齐认为国内云通讯的概念大致在 2013 年被大家熟知,相较于传统通讯需要与运营商打交道,接入各种通讯协议和对接通道,资源相对固定,较难扩容。云通讯具有极致简单、按需选用、更低成本、更加可靠等特点,使用云通讯服务比如云片短信服务只需几行代码即可,配备详细操作指南和专业运维人员,一旦需求增加,可随时弹性扩容,且迭代更新快,使用更省心也更安全。
△传统通讯行业现状
针对不稳定、服务响应慢、接口难用、没有报表和状态报告等行业现状,云片做云通讯业务的设计初衷可以归纳为低门槛、高可靠、更安全、深化场景四个方面。
低门槛:注册即可使用、几行代码接入、在线自助流程、完善的数据报表。
高可靠:服务可靠性是云片系统核心关注点之一,通过对可用性、并发和稳定性的不断优化迭代,云片支持 SLA ( Service-Level Agreement,服务等级协议) 99.99%,正常手机号到达率高于 99%,毫秒级处理。
更安全:云片重点关注传输层面、内容存储加密层面和用户使用流程三方面安全,采用企业型 SSL 证书、支持内容加密、子账户权限、数据脱敏、二次验证等手段保障系统安全性。
深化场景:云通讯作为基础服务之外,云片还希望在用户使用的关键流程中做场景深化,比如提升注册成功率(成功率统计、短信自动转语音方案、成功率预警),提高营销转化率(多维度筛选、链接点击统计、地区分布)。
△注册成功率统计
注册是网站、App 不可或缺的流程,注册成功率统计清晰反映用户注册效果。
△点击统计
云片支持短信内容插入短链接,并提供短链接点击统计报表,包括有多少人点击,这些人的地区分布等,方便运营人员评估营销效果以及做二次营销。
云片系统架构经历了 MVP、用户量增加、业务量增长和业务范围扩大四个阶段的演变。
直接开发完整产品试错成本高,且周期长。MVP 阶段云片在业务层面用最低成本快速试错,对于架构的要求是第一具有基本稳定的服务,第二业务能力支持对外开放。
在这个阶段云片已经具有稳定的短信平台,因此集中力量做 API 网关,把服务对外开放。
第二阶段用户量快速增长阶段导致业务需求剧增,要求满足客户各种各样的需求,而且自身运营客户时需要有管理后台做运营支撑。架构方面需要做到自助化、流程化、系统自动化。
上图架构演变图可看到从消息中心开始变得复杂,数据从用户 API 网关过来后由消息队列推给消息中心,由消息中心做分发,并增加推送服务方便客户接收状态报告和上行短信。
此外,云片平台自身来说,用户增加相应也新增很多通道,云片把通道接入单独放到运营商对接平台单独做部署;上线官网方便客户直接使用服务;增加管理后台进行客户维护及管理;新增监控中心利用自动监控短信的发送质量,比如短信耗时、到达率等信息,并将信息反馈配置中心,最终告知消息中心是否有通道出现问题,流程上看是从监控中心发起,通过 API 接口访问服务到运营商和监控手机,完成整个闭环。如有通道发生延迟和异常情况,可以得到及时的处理。
第三个阶段是云片业务量增长非常快的阶段,对业务的挑战在于高并发和高可用。系统架构压力也随之而来,要求架构做到解耦、可扩展、业务技术优化并重、全链路监控。
上图系统架构图可以看出云片系统新增了中间件 Redis ;增加缓存;增加异步写服务;数据库从单机变成主备;按照业务切分了多个 Mysql ;自主用 Router 研发路由做分发;增加与监控和数据有关的支撑平台,包括 Vision 业务监控、Zabbix 监控、JStorm 实时分析和 Hive 大数据统计;增加多个 VPC 做多机房部署保障异地容灾问题得到解决。
△监控服务的异地容灾
业务达到高并发高可用阶段后,对服务的优化会细化到各个环节,监控就是保障稳定性的关键点。云片监控异地容灾的做法是因为,如果发生网络故障监控机失去联系,监控存在空白期,在其它地方同样部署服务器进行异地容灾就很有必要。这些举措可以保障监控服务持续可用。
第四个阶段面临的挑战是新业务上线时,比如云片新增国际短信业务、手机流量业务,架构是否能够快速支撑。
云片的做法是将业务模型抽象化和平台化,并用分层的思想管理。举例来说,像消息中心、推送服务、监控服务、异步写服务等就可以放在平台层统一调度管理。
林佳齐认为进行稳定性实践需要做到三点:战略上重视,确保人员、资金的投入支撑,在业务开发和技术优化中平衡;树立明确的目标,P 级、SLA、人均故障率、投入产出比等都需要进行量化,制定阶段性的目标;全局化思考,包括制度、流程、技术和业务架构、全链路优化等。同时他将稳定性实践分为动荡期、潜伏期以及和平期三个阶段,并给出不同阶段的建设性建议。
动荡期的特点是问题明确,容易复现。林佳齐认为针对单节点瓶颈问题可以进行可扩展结构改造;峰值毛刺明显时,可以引入缓存、优化 JVM、消息序列化优化;出现域名解析失败情况,应升级域名解析至顶配,SLA100%保证。
潜伏期问题被动发现,应进行全面监控,日志进点和业务数据采集;特殊情况下才触发的问题可进行全链路压测找瓶颈;发生“灵异”事件造成系统抖动时,应将底层平台拆分、升级。
林佳齐认为和平期应该未雨绸缪,可进行监控平台容量的精确评估、资源利用率调整、快速扩容方案降低成本;设置异常访问屏蔽,高防方案做到系统更安全;设置告警分级、容量规划,进行精细化运营。