多个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再访问可以直接读取缓存。