messageflow 的集群架构设计 手稿

多个server的问题。

假设citibox.com / cosmosd.com 各有一个server。

他们的客户端要互联。

方法:

1. 在citibox.com / cosmosd.com 之间建立桥,实现互联。
结论:建立服务器的桥。

2. 客户端同时面对citibox.com / cosmosd.com
结论:否决。


3. 仅开一个服务器,例如Pixysoft.net 其他的链接到这个服务器。
结论:否决。实在不方便。而且不容易负载平衡

------------------

服务器集群的思路:

1. citibox.com = 服务器A
   cosmosd.com = 服务器B
   pixysoft.net = 服务器C

他们各自负责对应的网站的comet、格子有IM的帐号。

现在, 我是一个客户端:rebornzhang@gmail.com。需要同时能够和三台服务器的内部节点、外部节点对话。

------------------

1. 使用直接转接。
转接者不负责处理,仅仅把数据交给一个中心机。例如pixysoft.net是核心系统,拥有所有信息。其他的仅仅是转接。

例如转接者是:citibox.com,他拥有客户a/b/c,以及pixysoft.net。
那么当a/b/c和citibox.com交流的时候,他会直接把信息转移到pixysoft.net。由pixysoft.net负责。
这个时候citibox.com本身不需要建立任何的对话缓存,而是只要收到信息就转发。

设计简单,但是增加了节点之间的通讯;例如本来的设计中:

a -- citibox.com -- admin

现在

a -- citibox.com -- pixysoft.net -- admin


------------------------

2. 各自为政,当本节点无法处理的时候,才交给转接节点。

citibox.com = A
cosmosd.com = B

client C in A
client D in B

C ---(bind D)--- A

A 发现没有,则建立一个connectioncache,同时发送一个转接指令

a ---(redirect D) --- B

如果B发现存在,则
1. B - redirectpass - A
2. B - bind D - D
3. A - succeed - C

如B不存在
1. B - redirectfail - A
2. A - 取消connectioncache
3. A - fail - C

以上都会在A建立了D的缓存,这样下次A再访问可以直接读取缓存。

posted @ 2010-05-21 23:34    阅读(449)  评论(1编辑  收藏  举报
IT民工