多用户动态分布式聚合的实现

最近用c++实现了分布式并发拿用户动态的功能,效果还不错,由原来的1秒左右到现在的20毫秒左右

具体需求是这样的:一个用户A关注了500个用户,a需要显示500个用户的及时动态并按时间排序,分页等,

开始考虑后端异步推的模式就是为每个用户的粉丝生成动态,考虑到粉丝可能很多,明显这样做及时性差点,主要是会浪费机器资源,

还不跟直接去拿,需要多少就拿多少,让多个机器同时去拿

具体实现:

首先分成两个进程,进程a负责拿到用户的关注者列表,并分拆成几分,利用多线程,信号量,发送给多个进程b,信号量是允许多个线程同时进入临界区的,这里是并发的概念

然后进程b也是同样利用多线程,信号量来并发取数据,这里实现了一个线程池,使用vector预先开辟了一块够大的内存,供动态存储,防止内存碎片。

另外每个接口都有一个候补接口,假如一个接口访问拒绝,或者time out,就会自动切换到另一个接口,因为是互相做候补接口的。

这样的结构可以实现一次拿n个用户的动态,聚合排序等等,当用户增多时增加机器就可以了。

posted @ 2012-09-14 07:20  安子  阅读(372)  评论(0)    收藏  举报