消息中心——短信、邮件、推送、文件上传中台系统(京东实习)总结

来京东实习一个半月了,一个多月的时间都花在消息中台上,所以总结记录一下。先说一下实习感受,团队的氛围确实挺好的,挺照顾我这个实习生,有问题大家都挺乐意帮忙的。年末公司发的大礼包实习生没有,leader就把他的礼包给我了,真的好暖好暖,哈哈。导师也真的很认真负责,前两三个星期导师每天晚上都会花两小三个小时对我进行指导,从数据库的设计到编码规范等。最近年底,好些项目比较忙,导师、leader和有的同事已经连着两个星期都是凌晨2点多回去的,最晚的时候凌晨五点才下班,认真工作的样子,很帅!题外话说多了哈。

写在开头

首先说一下做消息中台的目的。因为我们部门有很多项目都需要向用户发送短信,目前的项目发送短信都是需要单独对接鹰眼短信、京东短信通道等接口,用户信息,密码信息等都在项目的配置文件中。使用消息中台后,所有的项目都统一调用消息中台发送短信,消息中台再调用相应的短信发送通道。

  1. 那么第一个好处是,一旦出现密码泄露等情况,原来的方案就需要所有的项目都重新配置(大公司项目重新上线是比较麻烦的,需要层层审批),但使用消息中台后可以通过管理系统统一进行配置,便于操作。
  2. 第二点,使用通道切换策略。原本的项目通常只使用一个短信发送通道(如京东、阿里短信通道),一旦短信通道出现问题,那么就影响用户的使用(之前短信通道出现问题,大冬天的景区游客收不到验证码,无法进入园区)。而开发的消息中台使用智能通道切换策略,当检测到某一短信通道不能使用后,就进行通道的切换。
  3. 第三点,消息中台使用异步发送的机制,提高吞吐量、并发量。当我们点击发送验证码时,通常有几秒钟后才能收到短信,在这期间一直占用着线程。在发送邮件时尤为明显,延迟可能有一分钟甚至更长。
  4. 第四点,消息中台对消息数据进行沉淀,可用于大数据部门进行数据分析。
  5. 第五点,现有的SDK包都是对单一通道进行封装,但是都不能够兼容多个通道。
  6. 最后,消息中台的商业价值,既可以私有化到单个的项目中提高项目的报价(大约几十万),也可以赚差价(多个项目在通道方均使用京东城市的账号,因为在通道方是按消息的数量进行收费的,如单月两万条短信和十万条短信的短信单价是不一样的)。

再说一下我工作的内容。短信中台目前对接了京东、鹰眼短信通道,邮件中台对接了腾讯企业邮箱、qq邮箱、163邮箱、京东邮箱,支持smtp、exchange协议。推送支持极光通道,文件上传对接了京东云、Minio、FastDFS,在开发环境完成开发后,然后在测试环境部署,由测试人员进行测试,提交sql工单创建生产环境数据库,最后由运维在生产环境部署,开白名单。并分别撰写了相应的接口文档(接口出参入参、SDK接入方式、加密算法),再与产品沟通,产品经理设计短信中台管理系统,又花了一个星期开发管理系统的后台接口。开发使用的idea、ssm、mysql,也是使用破解版的navicat,哈哈。

数据库设计规范

每张表都包含creator、created_time、modifier、modified_time、deleted字段,且主键id要留给DBA操作,需要再另外建立实体的唯一标识符,如消息表中需要建立message_id字段,varchar(64)。业务表的名称前缀加biz_,配置标的名称前缀加cfg_。

代码实现

因为是中台系统,以后可能会有很多项目使用,所以凡是对数据库操作的都使用redis进行缓存。但是短信管理系统后台的接口就不需要缓存了,因为操作的频度不高。

整个中台系统都使用一个模板,抽出短信、邮件、推送等共有的的地方进行复用,不同的地方使用策略模式,这样以后需要新接入通道,直接新增策略就可以,完全不影响现有的代码。比如,短信表(biz_messagge_sms)、邮件表(biz_messagge_email)、推送表(biz_messagge_push)都继承BaseMessage。再比如使用消费者消费消息时,都需要根据消息id获取消息实体、为消息选择发送通道、发送消息、更新状态。就把这些共用的抽离出来,相当于一个小小的框架。在开始写短信中台时,思路是很模糊的,格局也比较小,想着只要把这个功能实现了就行,导师耐心的一步步引导,代码也重构了很多次,最后导师才把框架告诉我,这个框架出来后,思路就感觉清晰了好多,到后来又做邮件、推送、通知、文件上传时,就可以使用这个框架很快完成了,收获很大。

定义接口的入参时,出于安全性考虑,新建立一个实体不直接使用数据库相应的实体。比如短信表(biz_messagge_sms),接口重新定义了一个BizMessageSmsVo实体,而不是直接使用BizMessageSms。

接口文档

完成消息中台系统的代码开发后,接下来就是写接口文档了,便于后期其他项目调用。接口文档包括版本号、引言、接口(访问路径、请求参数、返回参数、示例)、SDK代码接入示例、API接入(请求、响应报文示例、签名算法)、响应码。分别撰写完短信(单发、群发)、邮件、推送、文件上传、业务通知接口文档后,发布到京东cf文档上。

后台管理系统

最后一步就是完成后台管理系统的开发。有了后台管理系统后,就不用每次都在数据库中对消息中台进行配置了。这一步,要和产品经理详细说明项目的功能、数据库的设计等信息。产品经理结合实际的需求,对后台界面进行设计,当然,如果和产品经理有冲突就要重构原有的设计代码了。和产品沟通完项目的具体细节后,就要撰写管理后台所需的接口文档,写完成接口文档后,前端的同学可以进行开发了,自己也根据接口文档写各个接口的实现了。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值