zoukankan      html  css  js  c++  java
  • 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再访问可以直接读取缓存。

  • 相关阅读:
    Contract
    VS.NET 发布 常识
    案例分析:培训合同与赔款事宜
    DNN最新资源,目前在学SAP,所以.Net的工作就停滞了。
    劳动争议处理依据劳动法
    开发网格应用程序<1>
    BI在中国成了装饰品
    VOIP侵蚀电信利益,未来最赚钱的行业.
    [转]个人知识管理-Web2.0技术下的一个热点
    [转]冲杯三鹿奶粉给你喝!
  • 原文地址:https://www.cnblogs.com/zc22/p/1741273.html
Copyright © 2011-2022 走看看