• core实验系列之短信办事-架构计划

      

    core实验系列之短信办事-架构计划

      

    core实验系列之短信办事-架构计划

      

    core实验系列之短信办事-架构计划

      有些人会问为什么不把三个运营商Service也拆出来作为独立的API服务?

      然而架构设计解决的是应用复杂度,架构设计的大还是小取决于业务规模,技术的使用是要落实到应用场景。

      假如哪天短信没发送成功,首先看看API日志看看是不是调用成功了,如果没问题那可能JOB出问题了。如果JOB正常跑,难道是队列问题?假如再加多一层,那就定位更加的复杂了。

      该篇描述我的架构设计,下篇会正式对各个服务的实现进行讲解。如果您有更好的建议可以在下方评论反馈给我。

      从上面场景分析出,要由多系统、多平台接入需要单独抽离出来进行服务化,而且随着接入的系统越多,性能将成为瓶颈,因此需要良好的横向拓展能力。定时发送需要调度任务系统进行解决。

      就如开始所说的如果添加一个短信运营商只需要添加一个Service利用工厂模式,就可以良好的拓展了。而添加一个服务的开发、部署、维护成本无疑是比在组件内扩展的成本高。

      因此需要将此作为应用服务数据库,也就是服务化,把对集合的操作(读与写)以服务形式提供接口给其他服务使用。

      MongoDB一大特点则是无模式,意思是无需预先定义集合结构与字段类型,这体现了良好的拓展性。这是优点也是缺点,假如别的服务对该集合进行操作,在他不知情的情况下随意写入不同类型的值,则会影响已运行的服务。

      有人会问短信服务也要架构设计?不就写个service封装个send方法就得了吗?干嘛还要大动干戈。

      虽说不需要ACID但不代表没有一致性,而MongoDB体现的聚合一致性,以聚合做操作。

      可以在不同的服务器上部署服务,因为订阅同一个队列,良好的横向扩展保证了高可用、高性能

      回顾下现在执行流程,一次短信发送最长的调用链为:请求SmsApi,Sikiro.SMS.Job轮询数据,Sikiro.SMS.Bus消费队列消息并请求短信运营商服务。

      可伸缩性指在不改变系统软硬件设计,仅仅通过新增服务器的情况下,就能提升系统的处理能力。

      HTTP API的无状态,在调度任务里的MongoDB原子操作FindOneAndUpdate的使用,多消费者的订阅都是为了可伸缩性。同时通过部署多台服务器也可以提高高性能与高可用。

      此服务不直接做短信发送,只是触发器的存在,通过RabbitMQ进行解耦,避免执行过程过长如果停止服务时则中断。

      如果及时发送则立刻发送RabbitMQ,再由Sikiro.SMS.Bus订阅队列进行统一发送;

      此服务以架为基础,通过设计可以随意增加Trigger或者服务,使其多线程或多个进程同时运行,避免数据量大了后成为发送瓶颈。

      以HTTP协议RESTful风格JSON格式提供给其他系统(服务)接入,以swagger作为服务描述提供对外查看。

      上篇《.net core实践系列之短信服务-为什么选择.net core(开篇)》简单的介绍了(水了一篇).net core。这次针对短信服务的架构设计和技术栈的简析。

      无论定时、及时短信都由该服务进行发送,如果接入了新的短信运营商,只需要停止该服务进行更新即可。停止了服务消息不会丢失,将暂存在RabbitMQ,因需对RabbitMQ的消息做持久化。

    本站文章源于互联网采集,如有侵权请发邮件联系我们,我们在第一时间删除。 转载请注明:core实验系列之短信办事-架构计划

    2019-11-06 06:21

高明搬屋 正德苗猪繁殖基地 时时彩线上投注官网 特区七星彩票论坛 天津快乐十分 世贸彩票官网 博发彩票平台 168彩票平台 信彩彩票官网 k8彩乐园官网