本文主要结构如下:
推送系统的高可用性以及如何提高可用性
缓冲机制与服务解耦
无状态服务以及多机房部署
过载保护与分级机制
老司机简介
李明,来自小米科技,目前主要负责小米推送的后台研发。进入小米之前在腾讯工作,先后负责过QQServer和手游Server的研发工作。在分布式系统架构设计与优化,高可用、高性能后台服务器开发方面有一定经验。
小米推送是目前国内领先的推送服务提供商,主要为开发者提供快捷、准确、稳定的推送服务。目前接入APP+家,日活跃设备突破3亿,日消息量突破50亿。
之所以取得如此的成绩,一方面得益于我们在小米手机上系统级的连接,使我们有更高的消息送达率,另一方面是因为我们本身的服务质量不低于业内其他的推送服务提供商。
目前我们在小米手机上的日活为1亿+,而在非小米手机上的日活突破2亿,在iOS上的累计接入设备也达到3亿以上,从这些非MIUI的数据也可以看出,开发者对我们的推送质量是比较认可的。
我们是面向开发者的服务,主要职责是将开发者的消息实时准确的推送到目标设备上,是连接开发者与用户设备之间的一条高速消息通道。这中间涉及很多环节,提高系统可用性就是提高每个环节的可用性,只有系统无短板,高可用性才有可能。
什么是高可用性
在介绍如何提高系统可用性之前,我们首先需要先了解一下什么是系统可用性。
基于业务性质的差异,每个业务对可用性的定义也不尽相同,不过一般情况下,大多以系统可用时间占总服务时间的比例做为可用性的定义。例如我们常说的4个9的可用性,就是可用时间占比超过/,即只有不到万分之一的时间不可用,也即一年只有不到60分钟的不可用时间。
因此设计、维持一个高可用的系统是非常困难的,这不仅要求我们的系统基本不出问题,在出现问题之后也要以尽可能短的时间内恢复可用。
小米推送是面向开发者的服务,从本质上来说我们从事于服务行业,系统是否可用除了使用上面的可用时间占比来衡量之外,开发者主观或客观的使用感受也是衡量我们服务质量的重要标准,例如网络连接的稳定性,API的可用性,设备的连通率等。从上面的各种指标中抽象出来,我们重点白癜风怎么能治好成都有没有好的白癜风医院