开发分布式WebIm--2(概述)

1.业务分离的设计

  分布式的优点是能用大量的廉价服务器组建成一个巨大的系统,性价比很高。简单的说就是把业务模块尽可能的缩小的一个原子级别,然后从系统中剥离出来单独运行,当把系统中所有的业务一一剥离后,分布式系统也就搭建成功一半了。剩下的就是高效的处理每个业务的数据流。一个简单的IM系统我大概分为4个部分:

1.1。登录认证服务器群

   用于用户的注册和登录,又可以分为Web服务器群和数据库群。根据用户名的前两位Ascii码分配不同的数据库来存储。因此可以把用户分配到(26+10)*(26+10)≈ 400 台服务器中,能够最大程度的分流查询工作。
1.2.聊天应用服务器群

  用于用户间的消息互发与暂存,用户发送的消息缓存在服务器的IIS进程中,不与数据库发生关系。

1.3.用户头像服务器群

  用于用户头像的存储,减少对其他Web服务器的连接依赖。要求IO性能好。

1.4.用户文件服务器群

  用于用户文件的存储,减少对其他Web服务器的连接依赖。要求IO性能好。

 

服务器群组图

 

 

 

聊天应用服务器图

2.认证机制

  分布式系统中再也不能使用cookie和session,因此必须要有一套认证机制使其能够在多个服务器中认证。简单的做法是每个服务器保存一个密钥,在登录过程中,返回Md5(用户名+密钥),以后每次用户访问系统都执行 IsLogined(用户名,Md5(用户名+密钥)即可判断是否合法用户。

3.服务器群组配置文件

  在分布式系统中服务器群组互相通信是很频繁的,为了相互找到对方,就需要知道对方的地址,因此用配置文件的方式来实现。 

 


< xml >
< servers >     
        
< TalkServers >
                192.168.2.1
        
</ TalkServers >
        
< TalkServers >
                192.168.2.2
        
</ TalkServers >
< DbServers >
        
< default >
        server=192.168.2.100;database=IM;Uid=IM;pwd=123;
                
</ default >
        
< AA >   
        server=192.168.2.101;database=IM;Uid=IM;pwd=123;
        
</ AA >
        .
        
< Z9 >
        
</ Z9 >
        
< AA-A9 >
        
</ AA-A9 >
    
</ DbServers >
  <ErroSrervers>

    192.168.2.200

  </ErroSrervers>

</servers>
<key>
                1234567890poiuytrewq
</key>


</xml>

4.跨进程和跨服务器的通讯

  跨服务器通信方案很多,我选择Remoting的Tcp通道,速度较快。跨进程的通讯我还是用Tcp通道,因为Tcp通道在并发模式下性能好,微软有个进程级别的Ipc通道速度快,但是我测试在并发下性能很低。参见《Remoting技术:多线程中IpcChannel的性能太逊 》这篇文章。

 5.集中错误管理机制

     程序中遇到异常以后,通常是记录到本机log,但在分布式下管理太多服务器的log是件很麻烦的事情,因此需要把错误log集中的抛到一台专门的服务器上,还可以设计成错误级别分类,高级别的错误用短信通知管理员。

转载于:https://www.cnblogs.com/nevermad/archive/2009/11/20/1606619.html

WebIM说明 WebIM是一款基于jQuery的一款web即时通讯插件,姑且这么称呼吧。插件最大程度实现了IM的常用功能,除即时通讯的常用功能外,还加入了:消息盒子、窗口抖动、添加删除好友、最近联系人、超时登录界面、网站小秘书、聊天记录、发送频率限制、发送产品、发送名片、发送表情、产品分享、黑名单、举报、收藏、公告、智能网址过滤、消息提醒、修改资料、名片二维码、禁止粘贴、收起联系人列表、推荐好友等30余项改进。全浏览器兼容。 插件调用简单方便,只需在现有的web系统中加入几行代码,理论上可嵌入任何web系统。 2012年项目,已不再维护。 配置 $(function() { $(document).FnWebIM({ autoLogin :true, //boolean型,默认是否自动登录,true:自动登录,false:手动登录,默认为true msgRefreshTime :1000, //number型,消息刷新时间,单位为ms friendRefreshTime :10000, //number型,好友刷新时间,单位为ms showSecretary :true, //boolean型,默认是否显示小秘书,true:显示,false:不显示,默认为true noticeContent :"唐僧师徒历经千辛万苦,终于见到了佛祖……", //string型,公告内容 为空时不显示公告 sendPicture :true, //boolean型,是否允许发送图片,true:允许,false:不允许,默认为true msgMaxSize :300, //number型,单条消息最大允许字符 msgSound :false, //boolean型,是否开启声音提醒,true:开启,false:关闭,默认为true defaultWindow :"" //string型,登录后打开新聊天窗口,此处接收的参数为联系人的uid,否则会出错 }); }); 详细说明文档 http://www.zi-han.net/case/im/help.html 示例 http://www.zi-han.net/developer/721.html 注意 请在服务器(如localhost)环境下打开
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值