发明内容
本发明实施例的目的在于提出一种短信发送的方法,旨在解决现有技术中在改善短信在传输发送过程中存在传输慢、到达延时、发送数量受限制、推送对象混乱、安全性不高的技术问题。
本发明实施例是这样实现的,一种短信发送的方法,所述方法包括步骤:
创建用于记录短信数据的短信发送表,所述短信发送表包括短信实时表、短信处理表和短信历史表;
根据短信发送请求获取短信数据,并将所述短信数据插入到所述短信实时表,并将所述短信实时表中的短信状态写为0;
根据短信数据的优先级系数和等待时长系数将所述短信数据进行排序,并按顺序派发所述短信数据到网关,将已派发的短信数据从所述短信实时表水平切入到所述短信处理表,并将所述短信数据在所述短信处理表中的短信状态写为1;
所述短信数据经网关发送成功后,将发送成功的短信数据在所述短信处理表中的短信状态写为2;
获取网关应答成功消息,并将应答成功的短信数据在所述短信处理表中的网关响应状态写为1,同时更新所述短信处理表中的该短信数据的网关响应时间为当前时间。
优选的,在所述步骤“创建用于记录短信数据的短信发送表,所述短信发送表包括短信实时表、短信处理表和短信历史表”之前还包括步骤:
初始化核心线程,并预置信号量和线程信号等级;
所述步骤“根据短信数据的优先级系数和等待时长系数将所述短信数据进行排序,并按顺序派发所述短信数据到网关,将已派发的短信数据从所述短信实时表水平切入到所述短信处理表,并将所述短信数据在所述短信处理表中的短信状态写为1”具体为:
根据短信数据的优先级系数和等待时长系数将所述短信数据进行排序,再根据当前信号量和当前线程信号等级,按顺序分配所述短信数据经核心线程派发到网关,将已派发的短信数据从所述短信实时表水平切入到所述短信处理表,并将所述短信数据在所述短信处理表中的短信状态写为1。
优选的,在所述步骤“创建用于记录短信数据的短信发送表,所述短信发送表包括短信实时表、短信处理表和短信历史表”之前还包括步骤:
初始化核心线程,并预置信号量、线程信号等级和服务器信号等级;
所述步骤“根据短信数据的优先级系数和等待时长系数将所述短信数据进行排序,并按顺序派发所述短信数据到网关,将已派发的短信数据从所述短信实时表水平切入到所述短信处理表,并将所述短信数据在所述短信处理表中的短信状态写为1”具体为:
根据短信数据的优先级系数和等待时长系数将所述短信数据进行排序,再根据各短信处理服务器的服务器信号等级按顺序将短信数据分配到对应的短信处理服务器,进一步根据当前信号量和当前线程信号等级,按顺序分配所述短信数据经核心线程派发到网关,将已派发的短信数据从所述短信实时表水平切入到所述短信处理表,并将所述短信数据在所述短信处理表中的短信状态写为1。
优选的,所述短信实时表、短信处理表和短信历史表的字段信息相同,都包括主键ID、流水号、终端号码、短信类别、短信内容、短信发送时间、网关响应时间、短信状态、网关响应状态;
所述主键ID为随机生成的32位字符串,根据短信发送请求的时间并进行排序的序号;
所述流水号记录短信交易流水及其详细时间;
所述终端号码为接收短信数据的手机号码;
所述短信类别指根据业务场景将短信数据分为紧急、重要、普通三个类别,紧急类别为验证码类短信,重要类别为会议通知类短信,普通类别为公告类短信;
所述短信内容指需要发送到终端号码的数据;
所述短信状态包括四种状态,其中0表示待处理,1表示处理中,2表示发送成功,3表示发送失败;
所述短信发送时间指短信数据派发到网关的时间;
所述网关响应状态包括两种状态,其中1表示接收成功,2表示接收失败,通过所述网关响应状态可以获知所述短信数据是否接收成功;
所述网关响应时间指接收到网关应答成功消息或者网关应答失败消息的时间。
优选的,所述优先级系数指根据短信数据的短信类别分配的系数,其中,紧急类别的优先级系数为1.0,重要类别的优先级系数为0.8,普通类别的优先级系数为0.5;
所述等待时长系数指根据短信数据的等待发送时间的长短分配的系数,其中短信数据到达后等待发送时长在0-3分钟时,其等待时长系数为0.5;短信数据到达后等待发送时长在3-5分钟时,其等待时长系数为0.8;短信数据到达后等待发送时长在5分钟以上时,其等待时长系数为1.0;
短信数据派发到网关的顺序为:短信数据的优先级系数乘以其等待时长系数的积按照逆序排列派发到网关。
优选的,单台短信处理服务器初始化M个核心线程,M=10-20;
所述信号量指以单条短信数据作为信号单位计算出的当前未派发到网关的短信数据的数量,所述信号量为正整数,初始为0,每次有短信数据到达,所述信号量递增,当短信数据发送成功时,所述信号量递减;
所述线程信号等级指在第一轮询周期内,根据单个核心线程所承载的信号量将对应的核心线程分为A级、B级和C级;
在第一轮询周期内,当核心线程的信号量处于0-60之间时,对应的核心线程的线程信号等级为A级;当核心线程的信号量处于60-180之间时,对应的核心线程的线程信号等级为B级;当核心线程的信号量处于180以上,对应的核心线程的线程信号等级为C级;
所述第一轮询周期为30s-60s。
优选的,M为10,第一轮询周期为60s。
优选的,当各核心线程的线程信号等级均处于B级时,自动创建N个临时线程,用于按顺序并发派发更多的短信数据到网关;
其中,根据超出M个核心线程的短信数据总量n,按照n/180取整计算出需要创建的临时线程的数量,且n/180小于等于N。
优选的,所述服务器信号等级是根据单个短信处理服务器所承载的信号量,在第二轮询周期内,当信号量处于0-20000之间时,对应的短信处理服务器的服务器信号等级为A级;当信号量处于20000-50000之间时,对应的短信处理服务器的服务器信号等级为B级;当信号量处于50000以上时,对应的短信处理服务器的服务器信号等级为C级;
所述第二轮询周期为10-20分钟。
优选的,所述第二轮询周期为15分钟。
本发明的有益效果:
本发明通过创建短信发送表使得短信数据的流向从短信实时表到短信处理表,最后到短信历史表,摒弃了单一数据库表批量插入、遍历查询、数据变更的架构设计,改为短信数据水平切分式设计,避免了对数据库造成了相当大的数据查询、读取、操作压力,并且通过所述短信发送表可以连续追踪短信数据,能够清晰的追踪到所述短信数据所处的环节的短信状态,进一步极大程度上避免了性能瓶颈,提高了效率,满足当下移动互联网时代短信批量下发的需要;同时本发明适用单机部署、单机多线程部署和集群部署,当短信业务量较小时,可以选择单应用部署,当短信业务规模较大(规模在日均100万条以上),或业务请求日益增长,单一系统性能已无法满足业务需要时,可通过增加负载均衡设备或软件,并增加相应硬件服务器重复部署本发明系统即可。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图和实施例,对本发明进行进一步详细说明,为了便于说明,仅示出了与本发明实施例相关的部分。应当理解,此处所描写的具体实施例,仅仅用于解释本发明,并不用以限制本发明。
实施例一
图1所示为本发明一种短信发送方法的第一实施例的流程图,本实施例适用于单机部署模式,所述方法包括步骤:
S101,创建用于记录短信数据的短信发送表,所述短信发送表包括短信实时表、短信处理表和短信历史表;
所述短信发送表为关系型数据库结构;
所述短信实时表、短信处理表和短信历史表的字段信息相同,都包括主键ID、流水号、终端号码、短信类别、短信内容、短信发送时间、网关响应时间、短信状态、网关响应状态;
所述主键ID为随机生成的32位字符串,根据短信发送请求的时间并进行排序的序号;
所述流水号记录短信交易流水及其详细时间;
所述终端号码为接收短信数据的手机号码;
所述短信类别指根据业务场景将短信数据分为紧急、重要、普通三个类别,紧急类别为验证码类短信,重要类别为会议通知类短信,普通类别为公告类短信;
所述短信内容指需要发送到终端号码的数据;
所述短信状态包括四种状态,其中0表示待处理,1表示处理中,2表示发送成功,3表示发送失败;
所述短信发送时间指短信数据派发到网关的时间;
所述网关响应状态包括两种状态,其中1表示接收成功,2表示接收失败,通过所述网关响应状态可以获知所述短信数据是否接收成功;
所述网关响应时间指接收到网关应答成功消息或者网关应答失败消息的时间;
所述短信数据的流向是从短信实时表到短信处理表,最后到短信历史表;
S102,根据短信发送请求获取短信数据,并将所述短信数据插入到所述短信实时表,并将所述短信实时表中的短信状态写为0;
S103,根据短信数据的优先级系数和等待时长系数将所述短信数据进行排序,并按顺序派发所述短信数据到网关,将已派发的短信数据从所述短信实时表水平切入到所述短信处理表,并将所述短信数据在所述短信处理表中的短信状态写为1;
扫描所述短信实时表,根据所述短信实时表中的主键ID统计并获取当前待发送的短信数据的数量;
系统定时对所述短信实时表进行扫描,通过扫描所述短信实时表中的主键ID,查询当前待发送短信数据的总数量,判断当前环境下所述短信实时表中是否有要发送的短信数据,如果判断结果等于0,则表示所述短信实时表中无待发送的短信数据;
从而保证短信数据在第一时间被派发到网关,避免积压,并且通过所述短信发送表可以连续追踪短信数据,能够清晰的追踪到所述短信数据所处的环节和状态;
所述优先级系数指根据短信数据的短信类别分配的系数,其中,紧急类别的优先级系数为1.0,重要类别的优先级系数为0.8,普通类别的优先级系数为0.5;
所述等待时长系数指根据短信数据的等待发送时间的长短分配的系数,其中短信数据到达后等待发送时长在0-3分钟时,其等待时长系数为0.5;短信数据到达后等待发送时长在3-5分钟时,其等待时长系数为0.8;短信数据到达后等待发送时长在5分钟以上时,其等待时长系数为1.0;
短信数据派发到网关的顺序为:短信数据的优先级系数乘以其等待时长系数的积按照逆序排列派发到网关;
根据短信数据的优先级系数和等待时长系数的乘积逆序排列后进行派发,并可对所述短信数据进行加密,再发送到运营商网关;同时将已向运营商网关发送的短信数据从短信实时表水平切入短信处理表,将短信状态更新为1,表示短信在处理中,同时将所述短信处理表中的短信发送时间更新为当前时间(即所述短信数据派发成功的时间),并将所述短信实时表中的该条短信的短信数据删除;
根据短信数据的等待时长系数和优先系数的乘积作为所述短信数据的派送顺序,这样既能保证紧急、重要的短信及时送达,也能避免优先级别高的短信数据的数量较多时导致普通短信数据发送不出去的情况,从而使不同优先级的短信数据都能合理的派送;
S104,所述短信数据经网关发送成功后,将发送成功的短信数据在所述短信处理表中的短信状态写为2;
如果所述短信数据经网关发送失败,则将发送失败的短信数据在所述短信处理表中的短信状态写为3;
S105,获取网关应答成功消息,并将应答成功的短信数据在所述短信处理表中的网关响应状态写为1,表示接收成功,同时更新所述短信处理表中的该短信数据的网关响应时间为当前时间;
如果获取到网关应答失败消息,则将应答失败的短信数据在所述短信处理表中的网关响应状态写为2,表示接收失败,同时更新所述短信处理表中的该短信数据的网关响应时间为当前时间;
所述当前时间指所述短信数据经网关发送给用户成功或失败的时间;
当系统时间为凌晨1:00-5:00时,则将前一天短信处理表中的短信数据水平切入到短信历史表中;
凌晨一般为短信发送的空闲时间,在系统时间的第二天凌晨,系统任务调度将短信处理表中的短信数据水平切入短信历史表,保持短信处理表中的短信数据较少,保障短信处理表的处理效率;查询当天短信数据可通过所述短信处理表进行查询,查询隔天的短信数据则需要到短信历史表中进行查询,进一步提高了短信数据的处理效率;
本实施例中,根据短信发送请求获取到短信数据后,还可以采用非对称加密算法自动将其进行加密,私钥由产品编码加厂家编码及常量组成,公钥由自定义常量组成,由于只有一个公钥,非对称加密算法的分发简单,而且私钥是唯一的,可以验证每个用户信息的真实性;
加密之后才将加密后的短信数据存储至内存线程池、短信实时表、短信处理表、短信历史表,从根本上避免了短信数据泄露的风险;
进一步,本实施例还可以采用当前主流的微服务架构对外提供开放服务能力,微服务架构即:将单一应用程序划分成一组小的服务,服务之间相互协调、配合,每个服务独立运行,服务之间采用轻量级的通信机制交互;第三方系统通过使用短信推送功能,无需另行开发系统,甚至无需介入短信发送流程,仅仅需要对接本发明系统对外开放的接口服务,将终端号码、短信类别、短信内容三个核心字段信息通过所述开放接口服务推送至本实施例中的方案中即可;同时,本实施例还将反馈第三方系统,告知其短信数据是否发送成功,并支持短信发送失败后继续重发;该功能也是基于目前业界消息推送系统的现状,着眼于解决实际问题,为客户和合作伙伴带来平台能力共享,为通信领域业务扩展延伸起到积极主动作用,整合了业界较为前沿的理念和发展趋势,且接入非常简捷方便,适用性较好;
本实施例通过创建短信发送表使得短信数据的流向从短信实时表到短信处理表,最后到短信历史表,摒弃了单一数据库表批量插入、遍历查询、数据变更的架构设计,改为短信数据水平切分式设计,因为短信数据是即时类信息,对时间的及时性要求较高,对历史数据关注较少,因此这种设计极大的缩短了短信数据的发送时间,避免了对数据库造成了相当大的数据查询、读取、操作压力,并且通过所述短信发送表可以连续追踪短信数据,能够清晰的追踪到所述短信数据所处的环节的短信状态、短信发送时间、网关响应时间、接收成功与否等信息,进一步极大程度上避免了性能瓶颈,提高了效率,满足当下移动互联网时代短信批量下发的需要;还通过扫描短信实时表中的主键ID,查询当前待发送短信数据的总数量,从而保证短信数据在第一时间被派发到网关,避免积压;本发明还进一步明确了短信数据派发到网关的顺序,既能保证紧急、重要的短信及时送达,也能避免优先级别高的短信数据的数量较多时导致普通短信数据发送不出去的情况,从而使不同优先级的短信数据都能合理的派送;还通过选择凌晨这个空闲时间将短信处理表中的短信数据水平切入短信历史表,保持短信处理表中的短信数据较少,保障短信处理表的处理效率,进一步提高了短信数据的处理效率;还可以通过非对称加密算法对短信数据进行加密,然后再将加密后的短信数据存储至内存线程池、短信实时表、短信处理表、短信历史表,从根本上避免了短信数据泄露的风险;还可以采用当前主流的微服务架构对外提供开放服务能力,通过将终端号码、短信类别、短信内容三个核心字段信息通过所述开放接口服务推送至本实施例中的方案中即可实现,为客户和合作伙伴带来平台能力共享,为通信领域业务扩展延伸起到积极主动作用,整合了业界较为前沿的理念和发展趋势,且接入非常简捷方便,适用性较好。
实施例二
图2所示为本发明一种短信发送方法的第二实施例的流程图,本实施例适用于单机多线程部署模式,所述方法包括步骤:
S201,初始化核心线程,并预置信号量和线程信号等级;
单机模式下,单台短信处理服务器初始化M个核心线程;
M=10-20,优选20;
所述信号量指以单条短信数据作为信号单位计算出的当前未派发到网关的短信数据的数量,所述信号量为正整数,初始为0,每次有短信数据到达,所述信号量递增(递增加1),当短信数据发送成功时,所述信号量递减(递减减1);
所述线程信号等级指在第一轮询周期内,根据单个核心线程所承载的信号量将对应的核心线程分为A级、B级和C级;
针对单个核心线程所承载的信号量而言,本实施例根据大量的性能检测验证,在第一轮询周期内,当核心线程的信号量处于0-60之间时,对应的核心线程的线程信号等级为A级(即:空闲状态);当核心线程的信号量处于60-180之间时,对应的核心线程的线程信号等级为B级(即:饱和状态);当核心线程的信号量处于180以上,对应的核心线程的线程信号等级为C级(即:超负荷状态);
所述第一轮询周期为30s-60s,能确保在核心线程高效执行中,充分利用所有核心线程,保持各核心线程间的执行效率保持高并发状态,提高短信数据的处理速度;
所述第一轮询周期优选60s,实验证明,60s的第一轮训周期可更充分的利用各核心线程,各核心线程间的执行效率保持高并发的最佳状态,进一步提高了短信数据的处理速度;
核心线程常驻内存,无需反复创建、销毁,节约了线程开销,这样可以实时自动处理短信任务,大大提高了执行效率,能够满足绝大多数系统下发短信的请求;
S202,创建用于记录短信数据的短信发送表,所述短信发送表包括短信实时表、短信处理表和短信历史表;
所述短信发送表为关系型数据库结构;
所述短信实时表、短信处理表和短信历史表的字段信息相同,都包括主键ID、流水号、终端号码、短信类别、短信内容、短信发送时间、网关响应时间、短信状态、网关响应状态;
S203,根据短信发送请求获取短信数据,并将所述短信数据插入到所述短信实时表,并将所述短信实时表中的短信状态写为0;
S204,根据短信数据的优先级系数和等待时长系数将所述短信数据进行排序,再根据当前信号量和当前线程信号等级,按顺序分配所述短信数据经核心线程派发到网关,将已派发的短信数据从所述短信实时表水平切入到所述短信处理表,并将所述短信数据在所述短信处理表中的短信状态写为1;
根据各核心线程的当前线程信号等级来判断当前时间段是否有短信请求大面积涌入,如果是,则根据短信数据的优先级系数和等待时长系数将所述短信数据进行逆序排列;
当各核心线程的线程信号等级均处于B级(饱和状态)时,线程池将自动创建N个临时线程(临时线程数量N为15-30,优选30),用于按顺序并发派发更多的短信数据到网关,将已派发的短信数据从所述短信实时表水平切入到所述短信处理表,并将所述短信数据在所述短信处理表中的短信状态写为1;
核心线程是默认开启的,线程池会实时监测各核心线程的线程信号等级,当各核心线程都处于饱和状态时,说明有较大短信请求涌入,这时会按照超出M个核心线程的那部分短信数据总量(n),按照n/180取整计算需要创建的临时线程的数量,n/180得出的临时线程数量最大不超过N,其目的为保护系统开销,维持稳定;
当短信数据的派发任务执行完毕后,临时线程并不立即销毁,而是继续等待短信数据的派发任务,当大部分核心线程处于空闲状态时,自动销毁临时线程,这样可以节约系统内存和CPU资源,避免长时间占据造成系统开销过大和内存泄漏;
核心线程在执行短信数据的派发任务时,并非随机不均匀抢占执行,而是由线程池根据线程信号等级统一加锁标志;当核心线程的线程信号等级处于B级时(饱和时),所述核心线程暂不执行新的短信数据的派发任务,线程池通知线程信号等级处于A级(空闲)的核心线程去抢占执行短信数据的派发任务,线程池通过监听锁标志,平衡各核心线程之间的派发执行情况,维持所有核心线程处于饱和工作状态,充分利用了并发带来的高效,极大提高了短信处理能力;
S205,所述短信数据经网关发送成功后,将发送成功的短信数据在所述短信处理表中的短信状态写为2;
如果所述短信数据经网关发送失败,则将发送失败的短信数据在所述短信处理表中的短信状态写为3;
S206,获取网关应答成功消息,并将应答成功的短信数据在所述短信处理表中的网关响应状态写为1,表示接收成功,同时更新所述短信处理表中的该短信数据的网关响应时间为当前时间;
如果获取到网关应答失败消息,则将应答失败的短信数据在所述短信处理表中的网关响应状态写为2,表示接收失败,同时更新所述短信处理表中的该短信数据的网关响应时间为当前时间;所述当前时间指所述短信数据经网关发送给用户成功或失败的时间;
现有技术中绝大部分短信发送系统存在发送数量有限、延时、服务器利用率低、资源浪费等问题,当短信请求大量涌入时,无法满足快速下发,造成短信请求接收拥塞、短信下发失败、短信记录无法查询等一系列的问题;
依次从内存线程池中取出等待发送的短信数据,满足了用户接收短信数据的时间紧急程度和对短信数据的关注度的需求;
本实施例在实施例一的基础上引入线程池机制,分为核心线程和临时线程,单台服务器默认开启M个核心线程,核心线程常驻内存,无需反复创建、销毁,节约了线程开销,这样可以实时自动处理短信数据的任务,大大提高了执行效率,能够满足绝大多数系统下发短信的请求;还根据核心线程的线程信号等级统一加锁标志,通过监听所述锁标志,平衡各核心线程之间的派发执行情况,维持所有核心线程处于饱和工作状态,充分利用了并发带来的高效,极大提高了短信处理能力;同时在各核心线程的线程信号等级均处于B级时,将自动创建N个临时线程,这样可以节约系统内存和CPU资源,避免长时间占据造成系统开销过大和内存泄漏;同时明确了第一轮询周期,可更充分的利用各核心线程,各核心线程间的执行效率保持高并发的最佳状态,进一步提高了短信数据的处理速度;还明确了临时线程和核心线程的创建过程和数量关系,保护系统开销的同时维持稳定性;当短信业务量较小时(规模在日均100万条以下),可以选择本实施例中的单应用部署。
实施例三
图3所示为本发明一种短信发送方法的第三实施例的流程图,本实施例适用于集群部署模式,所述方法包括步骤:
S301,初始化核心线程,并预置信号量、线程信号等级和服务器信号等级;
集群部署模式下,每台短信处理服务器初始化M个核心线程;
M=10-20,优选20;
所述信号量指以单条短信数据作为信号单位计算出的当前未派发到网关的短信数据的数量,所述信号量为正整数,初始为0,每次有短信数据到达,所述信号量递增(递增加1),当短信数据发送成功时,所述信号量递减(递减减1);
所述线程信号等级指在第一轮询周期内,根据单个核心线程所承载的信号量将对应的核心线程分为A级、B级和C级;
所述第一轮询周期为30s-60s,优选60s,当所述第一轮询周期为60s时,执行效率最高,效果最佳;
针对单个核心线程所承载的信号量而言,本实施例根据大量的性能检测验证,在第一轮询周期内,当核心线程的信号量处于0-60之间时,对应的核心线程的线程信号等级为A级(即:空闲状态);当核心线程的信号量处于60-180之间时,对应的核心线程的线程信号等级为B级(即:饱和状态);当核心线程的信号量处于180以上,对应的核心线程的线程信号等级为C级(即:超负荷状态);
所述服务器信号等级是针对单个短信处理服务器所承载的信号量而言,在第二轮询周期内,当信号量处于0-20000之间时,对应的短信处理服务器的服务器信号等级为A级(即:空闲状态);当信号量处于20000-50000之间时,对应的短信处理服务器的服务器信号等级为B级(即:饱和状态);当信号量处于50000以上时,对应的短信处理服务器的服务器信号等级为C级(即:超负荷状态);
所述第二轮询周期为10-20分钟,优选为15分钟;
通过大量实验证明,服务器信号等级优选按照15分钟的第二轮询周期进行轮询,可以使各短信处理服务器均处于较饱和的运行状态;
在单台短信处理服务器的线程池的高并发处理量能够快速完毕的前提下,超过15分钟,各短信处理服务器间达到的信号量存在不确定因素,因此需要平衡各短信处理服务器的处理能力,设置15分钟的轮询周期正好能解决此问题,使各短信处理服务器均处于较饱和的运行状态;
S302,创建用于记录短信数据的短信发送表,所述短信发送表包括短信实时表、短信处理表和短信历史表;
所述短信发送表为关系型数据库结构;
所述短信实时表、短信处理表和短信历史表的字段信息相同,都包括主键ID、流水号、终端号码、短信类别、短信内容、短信发送时间、网关响应时间、短信状态、网关响应状态;
S303,根据短信发送请求获取短信数据,并将所述短信数据插入到所述短信实时表,并将所述短信实时表中的短信状态写为0;
S304,根据短信数据的优先级系数和等待时长系数将所述短信数据进行排序,再根据各短信处理服务器的服务器信号等级按顺序将短信数据分配到对应的短信处理服务器,进一步根据当前信号量和当前线程信号等级,按顺序分配所述短信数据经核心线程派发到网关,将已派发的短信数据从所述短信实时表水平切入到所述短信处理表,并将所述短信数据在所述短信处理表中的短信状态写为1;
根据各核心线程的当前线程信号等级来判断当前时间段是否有短信请求大面积涌入,如果是,则根据短信数据的优先级系数和等待时长系数将所述短信数据进行逆序排列,并进一步判断各短信处理服务器的服务器信号等级,并将所述短信数据按顺序分配到空闲状态的短信处理服务器;
所述空闲状态的短信处理服务器进一步判断其核心线程的线程信号等级;
当各核心线程的线程信号等级均处于B级(饱和状态)时,线程池将自动创建N个临时线程(临时线程数量N为15-30,优选30),用于按顺序并发派发更多的短信数据到网关,将已派发的短信数据从所述短信实时表水平切入到所述短信处理表,并将所述短信数据在所述短信处理表中的短信状态写为1;
当短信数据的派发任务执行完毕后,临时线程并不立即销毁,而是继续等待短信数据的派发任务,当大部分核心线程处于空闲状态时,自动销毁临时线程,这样可以节约系统内存和CPU资源,避免长时间占据造成系统开销过大和内存泄漏;
核心线程在执行短信数据的派发任务时,并非随机不均匀抢占执行,而是由线程池根据线程信号等级统一加锁标志;当核心线程的线程信号等级处于B级时(饱和时),所述核心线程暂不执行新的短信数据的派发任务,线程池通知线程信号等级处于A级(空闲)的核心线程去抢占执行短信数据的派发任务,线程池通过监听锁标志,平衡各核心线程之间的派发执行情况,维持所有核心线程处于饱和工作状态,充分利用了并发带来的高效,极大提高了短信处理能力;
S305,所述短信数据经网关发送成功后,将发送成功的短信数据在所述短信处理表中的短信状态写为2;
如果所述短信数据经网关发送失败,则将发送成功的短信数据在所述短信处理表中的短信状态写为3;
S306,获取网关应答成功消息,并将应答成功的短信数据在所述短信处理表中的网关响应状态写为1,表示接收成功,同时更新所述短信处理表中的该短信数据的网关响应时间为当前时间;
如果获取到网关应答失败消息,则将应答失败的短信数据在所述短信处理表中的网关响应状态写为2,表示接收失败,同时更新所述短信处理表中的该短信数据的网关响应时间为当前时间;
本实施例在实施例二的基础上增加了各短信处理服务器调整分配、自动均衡的过程,保证各短信处理服务器的调度能力高效运行、工作饱和;本实施例还通过第二轮询周期,使各短信处理服务器均处于较饱和的运行状态;本实施例支持分布式集群部署运行,当短信业务规模较大(规模在日均100万条以上),或业务请求日益增长,单一系统性能已无法满足业务需要时,可通过增加负载均衡设备或软件,并增加相应硬件服务器重复部署本实施例系统即可,具体规格参考依据为:单台配置8C(cpu)、16G(内存)、2*300G(存储),满足日均100万规模性能优越;参考依据非固定标准,需要结合实际业务、短信有无附件、多媒体数据等情况综合考虑,集群部署非简单的数学加法,如使用上述配置3台进行集群部署,非简单的日均100*3万处理量,而是经过集群配置和多线程调度配置可以达到日均500万规模的处理能力。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。