一、项目需求
用户:需要使用短信业务的公司和服务
中台的优点(明显的):
功能(由简至繁):
1、接收并简单校验发送短信请求;
2、完善短信发送请求的信息校验;
- 校验了ak是否存在
- 判断接入平台是否需要权限校验,如果开起了权限校验则通过ak,sk,时间戳加密对比传入的校验值,如果校验值和加密的密文相同证明身份通过,否则失败
- 判断手机号是否为空,是否合法,是否是很名单手机号
- 判断模板是否为空,判断签名是否为空,判断签名模板是否有对应的通道
- 判断模板参数和模板内容是否匹配
3、自动调整优先级;
4、定时发送业务;
- 使用redis的分布式锁,为了防止短信重复发送
- 根据时间等值从time-push这张表中查询未处理(status=0)的数据
- 根据查询的结果,依次调用发短信的接口并更新短信发送状态为已处理((status=1)
二、项目内容
1、数据库
十一张表第一眼看上去就整个人都不好了,不过梳理之后倒还能区分各表用途(已标注)
2、服务分析
- api:接收短信发送请求并校验
- manager:管理通道、模板、校验
- server:实际负责短信的发送
三、部分界面展示
通道信息管理界面:
通道添加界面:
短信发送swagger界面:
四、遇到的问题:
Nacos服务配置与虚拟机数据库连接
由于本机 MySQL 版本过低,在使用建表语句时无法正常执行,最终决定使用虚拟机中的较高版本 MySQL,然后中间出了一些问题,
# datetime 类型字段无法被识别创建
`create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
不过最后还是解决了
实际上最开始是为了省事,结果发现也没多省事……
五、收获和总结
1、空间换时间
服务启动时将 MySQL 中所需的数据加载到内存中,在处理业务时可以省去请求到数据库再将数据返回的时间,即用服务的内存交换为业务(请求)处理的时间
2、数据同步
服务正常运行时,数据实际存放在 服务内存、redis、MySQL 三个位置
- 放在内存中是为了提升性能
- redis主要是为了连接 MySQL 和 服务的内存
- MySQL 的数据是存储在硬盘中的
为了保证内存中的数据与 MySQL 中的数据一致,因此每当有业务使数据改变时都会通知 redis 发送数据同步请求
End
本项目学习前,只从主讲师那听说是中台项目,实际上对“中台”一词并没有什么概念,只大概了解是用以连接前台(页面)和后台(功能)的存在,名如其实嘛。
其实开始的几天并没有 get 到项目的重点,还是在查看文档和通过助教提供的项目相关面试题才逐渐梳理出集信达短信中台项目的模块关系和业务逻辑。
以前的学习过程中也有过项目实战学习,但没有尝试过类似短信中台这样的大项目(对于个人而言),主要还是其中涉及了许多完全没有了解过的技术——sdk相关的自动装配技术、服务拆分缘由、空间换时间概念、抽象类概括功能等。
在此次编程中,学到了很多知识,大体认识到中台项目的高效便捷,本来教学项目中对代码模块化理解不够清晰的问题在文档的帮助下也在慢慢地改善与进步,也从讲师的代码中学习到了关于编码规范的重要性及其巧妙的编码思路等,拓宽了自己本不熟悉的知识领域。