GO从零构建一个分布式IM系统

介绍

这个系列将主要介绍从服务端基于go语言从零开始构建一个基于群聊分布式IM系统。同时提供了对应的android客户端作为功能的演示和验证,前后端均开源,方便二次开发。

原则

基于go语言来构建的这个群聊系统被命令为schat,即simple chat,首先需要满足simple,简单性。

  • 简单依赖
    在构建一个系统时不可避免的要集成其他的许多框架来综合使用,这又不断引入新的学习成本,提高了心智负担,所以在schat的构建过程中极力避免引入第三方框架或者其他库(除了逼不得已)。能使用GO的标准库尽量使用标准库完成,虽然可能会有一些性能上的损失,不过以简单为第一要务。在实际部署过程中,基于普通的linux开发环境,只需要安装正常的go开发包、redis以及protobuf作为服务端的序列化通信即可

  • 简单迁移
    作为演示使用的schat服务端部署在单机系统内,这里假设以单机部署为例,在单台服务器失效时可以很容易的迁移群聊数据到新的设备,并维持以前的聊天场景

  • 简单部署
    演示时使用的单机部署,不过本身框架是基于分布式的,所以很容易平行扩展多机部署

  • 简单开发
    可以基于现有框架简单入手,进行二次开发(咳咳)

  • 简单安全
    链接加密,通信加密及本地的数据加密

  • 未完待续

功能

整个聊天系统以群聊为核心,所有功能均围绕群展开,目前包括以下功能:

  • 账号注册 以名字为Key申请注册账号
  • 创建群组 注册成功的用户可以创建聊天群和入群密码
  • 申请入群 申请加入群
  • 审批申请 群主审批请求,同意或拒绝
  • 群内聊天 入群之后可以发送文本,图片,视频等内容
  • 退出群聊 群员可以主动退群
  • 踢出群聊 群主可以踢出成员
  • 解散群组 群主可以解散群

框架

下面是schat的基本服务拓扑图,如下所示:
GO从零构建一个分布式IM系统_第1张图片以上的每一组SET内的服务均可平行扩展,具体不同的服务功能后面详述

服务说明

对拓扑图里的进程功能及部署进行说明

  • conn_serv
    客户端接入进程,负责维护客户端的连接,客户端使用TCP长链接接入

  • logic_serv
    在线用户的数据缓存,处理用户本身的主要逻辑服务

  • db_logic_serv
    与logic_serv配对的db代理进程,负责与reddis的连接与数据交互

    • 说明
      conn_serv,logic_serv,db_logic_serv一般1:1:1配置对应作为一个用户连接,处理和数据的逻辑单元,按逻辑单元平行扩展
    Client
    conn_serv
    logic_serv
    db_logic
    redis
  • disp_serv
    作为星形拓扑的包分发中心,负责分派各业务进程之间的数据包转发,这样每个业务进程不需要维护其他多余的进程通信地址,只需要和disp进程组连接即可。一般需要与其他业务进程组互相通信的进程组与disp_serv进程组建议通信;disp_serv可以平行扩展

  • online_serv
    缓存世界里所有在线用户的logic_serv地址,一般部署两个serv即可,双主作为互备

  • file_serv
    静态文件服务进程,目前主要有以下功能:

    • 将群聊内发布的多媒体文件包括图片、视频等进行分布式存储,并转发到logic_serv生成对应的聊天记录;
    • 存储用户头像。
    • 进程可以设置安全等级,作为一般的服务验证。每个file_serv需要配置唯一的servindex作为文件url的一部分,同时方便数据迁移而保持所有群聊文件数据。文件服务进程亦可平行扩展,更具体说明可以参考wiki
  • chat_serv
    聊天管理进程,这里会缓存所有活跃(主要是聊天等)的群组数据,群组数据按群ID hash分布到chat_serv上。同时用于同步转发聊天信息.

  • db_chat_serv
    服务于chat_serv的db代理,

    • 说明
      一般与chat_serv 1:1配置作为一个逻辑处理单元,平行扩展时最好按处理单元扩展
    disp
    chat_serv
    db_chat
    redis
  • dir_serv
    用于connect_serv前端的负载均衡,同时作为file_serv的相关地址信息管理

演示

这里是一个简单的功能展示,包含了对schat服务端的通信协议处理及相关功能。目前只支持android客户端,可以去
https://github.com/nmsoccer/schat-cli/releases 下载最新的安装包直连119.29.135.45:11802进行测试体验

GO从零构建一个分布式IM系统_第2张图片

GO从零构建一个分布式IM系统_第3张图片

GO从零构建一个分布式IM系统_第4张图片

GO从零构建一个分布式IM系统_第5张图片

后面的章节将详细介绍schat服务端的具体安装及各项功能的实现

目录

安装部署
通信协议
数据传输

你可能感兴趣的:(schat,golang)