58到家多端消息整合之路

经历野蛮发展阶段后,58到家存在众多消息收发场景及不同技术。案例分享总结多个业务场景下消息收发的难点与挑战,梳理各项技术的特点,结合实际业务及研发需求,构建了一套通用消息投递方案。方案建立统一的端到端、端到服务器、服务器到端的消息通道,对业务方屏蔽不同技术的差异,提供消息到达率等核心指标的监控统计。实现业务线能够快速接入各类消息服务的目标。

实践的具体过程、步骤和方法可供同行借鉴。

1.1  到家业务复杂

58到家是一家做生活服务类O2O业务的创业公司,势头很猛,业务发展迅速。公司自营三大业务,家政、丽人、速运。找保洁、保姆、月嫂可以使用家政业务;做个指甲美个容可以使用丽人业务;拉货搬家可以找速运。除了三大自营业务,还有非常重要的开放平台,商家在开放平台上发布服务,用户消费服务。开放平台涵盖了你能想到的各种内容,从开锁到换灯泡,从送花到健身。

1.2  消息需求多样

众多业务和不同场景,给消息系统带来很大的挑战。比如速运业务,用户需要搬家,拿出手机查看司机位置,下单,司机抢单,运送完成后计算路程,这些业务都要求及时高效的传递订单及经纬度信息;又比如用户资产变化或者优惠券即将到期,系统需要给用户推送提示信息,而到家的用户不会一直开着58到家的应用,我们需要低成本有效地将提示类信息送达用户;开放平台里,用户需要跟商家沟通,了解提供的服务或商品的具体情况,系统需要确保用户商家不同时在线的情况下能够实现交流。

1.3 重复开发严重

为了应对业务的快速发展,初创公司都会怎么容易实现怎么来。结果建设了众多的消息系统,散落在各个业务线。有的用MQTT,有的用HTTP,有的用个推,有的用米推,消息协议不一致,互联互通存在障碍。研发人员需要熟悉多套消息系统,研发效率低下,研发质量很难保证。

58到家多端消息整合之路

图1:混乱的消息系统

因此迫切需要建设一个统一的消息系统,对研发人员屏蔽细节,提升开发效率,提高开发质量。

2.1  统一消息平台

统一消息平台主要包括四大部分,TCP消息系统、推送通道、策略中心、端。

58到家多端消息整合之路

图2:统一消息平台架构

1、TCP消息系统。自研的基于TCP协议的消息系统,支持端到端、端到服务器、服务器到端的消息传递,具有性能高、开销小等优点。用于逐步替换五花八门的消息系统。

2、推送通道,强化推送消息能力。整合个推、米推、APNS、微信、短信等消息推送方式。自研的TCP消息系统也是一种消息推送方式。

3、策略中心,人为配置消息投递的策略,可以根据消息可达率,或者业务场景需要,进行修改。

4、端,主要是指移动端。统一消息平台提供统一的SDK,支持移动端与消息平台服务器的交互。同时,端还包括微信、手机短信等用户常用的接收消息的软件。

在这个架构下,业务研发人员只需关注端上的统一SDK,和服务器端统一消息交互接口。其他的精力都可以放在处理业务逻辑上。

2.2  TCP消息系统

TCP消息系统的整体结构如下图。

58到家多端消息整合之路

图3:TCP消息系统

虚线框描述了TCP消息系统的功能组成。包括接入层(msg-gate)、逻辑层(msg-logic)、ip配置(ipconfig)、路由缓存(redis)四大部分。

1、接入层

图中的msg-gate模块是接入层,主要功能包括,

连接整流:维护与客户端的海量TCP长连接,将外界海量TCP长连接整流为少量与后端msg-logic的TCP长连接。

安全信道:建立安全的TCP信道,加密与解密。

初步攻防:实施初步的anti-attack策略,限速策略,消息体大小限制。

消息投递:将msg-logic投递过来的消息发送给客户端。

2、逻辑层

msg-logic模块叫逻辑层,主要功能包括,

连接验证(可以理解为在消息系统中登录)。

APP向app-server发送消息的接口,可以理解为C2S接口。

app-server向APP发送消息的接口,包括单发和群发。

58到家多端消息整合之路