[发明专利]一种发送消息的方法及其系统有效
申请号: | 201210009022.5 | 申请日: | 2012-01-12 |
公开(公告)号: | CN103207806A | 公开(公告)日: | 2013-07-17 |
发明(设计)人: | 韩翼 | 申请(专利权)人: | 阿里巴巴集团控股有限公司 |
主分类号: | G06F9/46 | 分类号: | G06F9/46 |
代理公司: | 北京同达信恒知识产权代理有限公司 11291 | 代理人: | 郭润湘 |
地址: | 英属开曼群岛大开曼*** | 国省代码: | 开曼群岛;KY |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 发送 消息 方法 及其 系统 | ||
技术领域
本申请涉及计算机分布式系统领域,尤其涉及一种分布式系统中发送消息的方法及其系统。
背景技术
随着淘宝商城不断发展,其中的商家不断增加,用户也越来越多,为了更好实现对用户的服务或商家的服务,就需要将很多消息要发给商家或用户,如发送旺旺消息,淘宝站内的信,短消息及邮件等。
一般情况下,上述信息都是通过分布式系统发送消息给用户或商家,而为了使消息能够高效的发送,分布式系统采用并发的方式发送消息。
下面请参考图1,其为本申请实施例中分布式系统消息分发的结构示意图。消息发送系统提供对外接口,以接收来自发送者的消息并保存在消息队列中,再由消息发送进程分发给接收者。
本申请发明人在实现本申请实施例中技术方案的过程中,发现上述现有技术至少存在如下技术问题:
在读取消息队列的过程中,系统采用单线程读取多线程分发的模式,即每次只保证有一个进程在读取消息,然后再开始分发消息。因需保证只有一个进程在读取消息,系统引入了锁竞争,故而每次进程都需要判断是否可读。
具体来说,系统通过加锁的方式保证只有一个进程在读取,由于数据库本身机制的原因,在多线程并发的情况下,可能会造成死锁。并发的线程越多,造成死锁的概率就越大。
可见,在现有技术中,多进程读取消息使得系统在发送消息的过程中,非常容易造成死锁,从而降低系统发送消息的效率。
发明内容
本申请提供了一种发送消息的方法及其系统,以解决了因保证只有一个任务在读取消息时而造成的死锁的技术问题,消除了锁竞争,提高了消息发送效率。
一方面,通过本申请的一个实施例,提供如下技术方案:
一种发送消息的方法,应用在包括有数据库,与所述数据库连接的M个应用服务器和与所述数据库连接的至少N个消息任务服务器的系统中,其中,所述N个消息任务服务器中每个消息任务服务器包括有一个消息发送进程,M为大于或等于1的整数,N为大于或等于2的整数,所述方法包括:
判断所述N个消息发送进程中每个消息发送进程的状态是否是有效状态;
基于所述判断,从所述N个消息发送进程中确定K个消息发送进程的状为有效状态,其中K为大于1但小于N的整数;
从所述K个消息发送进程中,确定一个消息发送进程作为主消息发送进程;
通过所述主消息发送进程去启动所述主消息发送进程所在消息任务服务器中的消息调度器;
通过所述消息调度器,从所述数据库的消息队列中获得至少一个没有进程归属的待发送消息;
从所述K个消息发送进程中,为所述至少一个没有进程归属的待发送消息中每个待发送消息分配一个消息发送进程;
通过所述K个消息发送进程发送所述至少一个没有进程归属的待发送消息。
另一方面,通过本申请的一个实施例,提供如下技术方案:
一种发送消息的系统,包括:
M个应用服务器,与至少一个发送端连接,用于接收所述至少一个发送端发送的待发送消息,其中,所述M个应用服务器中每个应用服务器包括一个消息发送接口,M为大于或等于1的整数;
数据库,与所述M个应用服务器连接,用于通过每个应用服务器的所述消息发送,接收所述至少一个待发送消息,并将所述至少一个待发送消息放在一消息队列中;
N个消息任务服务器,与所述数据库连接,所述N个消息任务服务器中每个消息任务服务器包括有一个消息发送进程;其中,所述N个消息发送进程中有K个消息发送进程的状态为有效状态,所述K个消息发送进程中有一个为主消息发送进程;
其中,所述主消息发送进程对应的消息任务服务器用于:
通过所述主消息发送进程启动所述主消息发送进程所在消息任务服务器中的消息调度器;
通过所述消息调度器,从所述数据库的消息队列中获得至少一个没有进程归属的待发送消息;
从所述K个消息发送进程中,为所述至少一个没有进程归属的待发送消息中每个待发送消息分配一个消息发送进程;
通过所述K个消息发送进程发送所述至少一个没有进程归属的待发送消息。
上述技术方案中的一个或多个技术方案具有如下优点或有益效果:
一、通过采用在任务分发过程中进行消息调度的方法,解决了任务分发过程中任务竞争消息造成死锁的技术问题,从而避免了死锁,达到了高效发送消息的技术效果。
二、由于在消息分发的过程中采用了心跳检测的技术手段,解决了消息发送过程中,检测各个任务的有效性,从而达到了及时更新任务状态的技术效果。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于阿里巴巴集团控股有限公司,未经阿里巴巴集团控股有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210009022.5/2.html,转载请声明来源钻瓜专利网。
- 上一篇:水硬性组合物用分散剂
- 下一篇:阿昔莫司膜控缓释微丸胶囊