{ yeah : 必须哒 } No place to place should record our youth?

23Jul/102

[原创]解除高耦合提高效能

最近有个项目,接口api负载预计会比较繁重,所以将采用队列的模式来解除这个耦合,因为提交的数据不需要很强的时效性,完全可以用异步的模式来处理。前端与api交互的当然是php,这个是毫无疑问的,不过几年的linux的了解和切身体验,在早期的时候也做过一些比较,用写数据为例,写相同数量的数据,如果把C的读写算作1的话,那么用php来处理将会是20左右,而用python,lua这种虚拟机机制更小的语言来处理,那么将是6左右,再加上php执行是加载入过多的模块,呃,至少我不知道如何去除这些模块,所以选择一种轻载的语言来处理进程交互数据,将是提高整体效率的很好途经,代价也比较小,同样的系统环境,可以处理更大的数据量。

以下为可分摊可扩展的实现示意图:

使用者(用户)量会很大,访问的api也会很多很频繁,比如微博,所有的api都会汇总在一个平台处理第三方的api,那么如何减少在应用api处提交时对使用者体验最好,互相作用力最小呢?(互相作用力,这里我的意思是:一个节点出现故障,会成为连锁反应,蝴蝶效应,当时在某上市公司的时候就遇到某个时间段突然上升的压力导致了某一台机器缓慢,最终引发整个机房的相关应用全部处于崩溃状态,全部处于active状态,因为都在等那台故障的机器的返回)答案就是引入高效的提交机制,快连快断,加入有序化管理,队列话,队列服务器也可以采用多台,由上层的proxy服务器来随机提交到某个队列中,然后立即返回给用户成功,随后,队列服务器上的进程(当然有条件的可以另外单独服务器)采用多进程盯某个队列,甚至可以优化成优先盯某个队列,某个队列处理完毕后可以辅助处理其他队列服务器中的数据。这里就不展开联想了,思路很多,然后通过进程服务与第三方的多种应用api交互,最终形成了可以任意扩展的异步消息传递系统。

队列服务系统也很多,简单的有张宴基于libevent和tokyocabinet写的httpsqs,当然还有很多复杂的队列,看具体应用而定了。

Posted by alacner

Comments (2) Trackbacks (0)

Leave a comment

(required)

No trackbacks yet.