.net core实践系列之短信服务-架构设计

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
短信服务,100条 3个月
短信服务,200条 3个月
简介: .net core实践系列之短信服务-架构设计

前言


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


源码地址:https://github.com/SkyChenSky/Sikiro.SMS


为什么需要架构设计


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


如果在单块应用的情况下,以上面的做法是无可厚非的。


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


场景假设


以我们公司作为例子:

  • 已拥有多套系统,运营后台、资金平台、账单平台、APP API等;
  • 需接入多个短信运营商,避免某个出异常后随时切换;
  • 及时发送、定时发送;


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


因此下面为我设计的架构图


架构图


image.png


架构简析


SmsApi服务


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


接口主要功能有:

  • 发送短信
  • 查询短信列表


发送短信支持批量,接口接受到请求后将数据先持久化到MongoDB。


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


如果定时发送则等待Sikiro.SMS.Job进行轮循MongoDB,轮询到时的消息则发送到RabbitMQ,再由Sikiro.SMS.Bus订阅队列进行统一发送。


Sikiro.SMS.Job调度任务服务


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


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


Sikiro.SMS.Bus队列消费服务


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


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


可伸缩性


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


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


MongoDB的选择


我选择MongoDB主要原因是聚合一致性、无模式。


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


聚合


一组具有内聚关系的相关对象的称为集合


关系型数据库


则以下面两表通过SmsId关联读取,写入则两表作为一个事务


image.png


MongoDB


则以下面聚合方式表示,以聚合取,以聚合写


image.png


无模式


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


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


服务粒度


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


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


架构上的扩展性的本质的确是拆,但是拆得过细将出现三个问题:

  • 调用链过长影响性能
  • 调用链过长难以定位问题
  • 增加开发、维护成本


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


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


结尾


该篇描述我的架构设计,下篇会正式对各个服务的实现进行讲解。

目录
相关文章
|
3天前
|
存储 SQL 监控
转转平台IM系统架构设计与实践(二):详细设计与实现
以转转IM架构为起点,介绍IM相关组件以及组件间的关系;以IM登陆和发消息的数据流转为跑道,介绍IM静态数据结构、登陆和发消息时的动态数据变化;以IM常见问题为风景,介绍保证IM实时性、可靠性、一致性的一般方案;以高可用、高并发为终点,介绍保证IM系统稳定及性能的小技巧。
17 6
|
23天前
|
存储 缓存 关系型数据库
社交软件红包技术解密(六):微信红包系统的存储层架构演进实践
微信红包本质是小额资金在用户帐户流转,有发、抢、拆三大步骤。在这个过程中对事务有高要求,所以订单最终要基于传统的RDBMS,这方面是它的强项,最终订单的存储使用互联网行业最通用的MySQL数据库。支持事务、成熟稳定,我们的团队在MySQL上有长期技术积累。但是传统数据库的扩展性有局限,需要通过架构解决。
63 18
|
1月前
|
开发框架 前端开发 .NET
一个适用于 .NET 的开源整洁架构项目模板
一个适用于 .NET 的开源整洁架构项目模板
57 26
|
1月前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
94 16
|
1月前
|
存储 消息中间件 小程序
转转平台IM系统架构设计与实践(一):整体架构设计
本文描述了转转IM为整个平台提供的支撑能力,给出了系统的整体架构设计,分析了系统架构的特性。
74 10
|
2月前
|
弹性计算 Java 关系型数据库
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
|
1月前
|
负载均衡 Serverless 持续交付
云端问道9期实践教学-省心省钱的云上Serverless高可用架构
详细介绍了云上Serverless高可用架构的一键部署流程
57 10
|
1月前
|
存储 人工智能 运维
面向AI的服务器计算软硬件架构实践和创新
阿里云在新一代通用计算服务器设计中,针对处理器核心数迅速增长(2024年超100核)、超多核心带来的业务和硬件挑战、网络IO与CPU性能增速不匹配、服务器物理机型复杂等问题,推出了磐久F系列通用计算服务器。该系列服务器采用单路设计减少爆炸半径,优化散热支持600瓦TDP,并实现CIPU节点比例灵活配比及部件模块化可插拔设计,提升运维效率和客户响应速度。此外,还介绍了面向AI的服务器架构挑战与软硬件结合创新,包括内存墙问题、板级工程能力挑战以及AI Infra 2.0服务器的开放架构特点。最后,探讨了大模型高效推理中的显存优化和量化压缩技术,旨在降低部署成本并提高系统效率。
|
2月前
|
运维 监控 安全
天财商龙:云上卓越架构治理实践
天财商龙成立于1998年,专注于为餐饮企业提供信息化解决方案,涵盖点餐、收银、供应链和会员系统等。自2013年起逐步实现业务上云,与阿里云合作至今已十年。通过采用阿里云的WA体系,公司在账号管理、安全保障、监控体系和成本管控等方面进行了全面优化,提升了业务稳定性与安全性,并实现了显著的成本节约。未来,公司将持续探索智能化和全球化发展,进一步提升餐饮行业的数字化水平。
|
2月前
|
运维 安全 架构师
架构师工具箱:Well-Architected云治理提效实践
本次分享基于阿里云Well-Architected Framework的最佳实践案例,涵盖企业从上云到优化的全过程。安畅作为国内领先的云管理服务提供商(Cloud MSP),拥有800多名员工,其中70%为技术工程师,为企业提供架构安全、数据智能等技术服务。内容包括Landing Zone与Well-Architected的关系、企业云治理现状及需求分析,重点探讨了安全合规、成本优化、资源稳定性和效率提升等方面的最佳实践,并通过具体客户案例展示了如何通过自动化工具和定制化解决方案帮助企业提升云上业务价值。