Day126

项目小总结

短信平台

一 整体架构

分布式项目,采用Spring cloud进行开发,注册中心使用Eureka,各项服务的配置都保存在注册中心中

二 各个功能

2.1 注册中心 chinamobile-registry

所有的服务的地址,数量确定,需要一个地方来帮我们保存所有服务器列表,逐层中心选型:eureka,consul,nacos,zookeeper

这里我们选用eureka,我们此处使用单机的配置

2.2 配置中心 chinamobile-configserver

项目分很多模块,每个模块又分很多个机器,一旦配置发生变化,需要更新很多服务器,维护起来非常麻烦,我们将统一的配置保存到某个位置(这里保存到保存到gitee上,gitee地址),然后通过某种机制同步(通过注册中心进行注册,客户端通过服务发现找到配置中心拉取位置)就可以了

2.3 缓存 chinamobile-cache

项目中有大量的地方需要通过缓存来获取数据,专门将缓存作为一个服务模块,方便修改扩展,缓存也可以作为SDK封装起来给其他程序导入,不方便扩展,这里我们使用redis来实现,因为它基于内存进行存储速度比较快,处理请求的线程是单线程,没有切换带来的开销

我们redis的配置会放在配置中心,需要bootstrap文件来帮忙加载配置
1. 序列化方式

项目中对缓存的操作会保存各种类型的数据,我们保存什么格式在redis中?(这里选择的是key为string,value是json的方式保存的)

出现的问题:我们向redis中保存的数据,我们发现看不懂

问题原因:redis中可以存放任意数据,包括java类型,redis本身是保存数据的,和java没关系,为了能保存数据,通过二进制流进行传输,所以默认会将数据序列化的方式写出去,我们看不懂

解决:我们可以修改序列化的方式,比如改成字符串,也可以改成json,如果以json的方式存放数据,会将对象转成json,如果数据本身是字符串,会添加""进行区分

2.4 API接口

主要功能是接收用户发送短信操作,给指定的手机号发送指定的内容

包括:单条短信,一条短信多个手机号,多条短信多个手机号

可能还会包含:通过模板发送单条短信,一条短信多个手机号,多条短信多个手机号

我们在内部需要拆分为N条短信发出去,经过分析,短信参数主要是手机号(用,分割)和短信内容(使用集合接收)

2.5 策略

策略的作用是用于检查消息是不是可以发送,比如:

有没有黑名单,有没有敏感词,有没有钱,有没有限流等等

需要做很多事情,不可能用一个类来做,策略其实就是责任,应该为单一职责,一个类只负责一个事情,如何让这些事情串起来执行,需要有个地方保存责任,能放多少数据的东西是集合,找个集合放进去,然后遍历执行,遇到有问题的责任就直接跳出

posted @ 2021-11-14 22:11  CN_Darren  阅读(21)  评论(0)    收藏  举报