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

介绍

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

原则

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

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

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

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

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

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

  • 未完待续

功能

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

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

框架

下面是schat的基本服务拓扑图,如下所示:
schat IM系统服务端结构以上的每一组SET内的服务均可平行扩展,具体不同的服务功能后面详述

服务说明

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

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

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

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

    • 说明
      conn_serv,logic_serv,db_logic_serv一般1:1:1配置对应作为一个用户连接,处理和数据的逻辑单元,按逻辑单元平行扩展
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值