2 Star 11 Fork 0

weiqingbin666 / distribute_message

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 3.32 KB
一键复制 编辑 原始数据 按行查看 历史
weiqingbin666 提交于 2024-02-07 06:52 . update README.md.

介绍

实现集群间通信,比如:客户端C1和服务端S1建立连接,客户端C2和服务端S2建立连接,C1给C2发送消息,C2如何接收的问题

  1. 服务端之间建立连接
    服务大多是集群化部署,每个服务都要与前面的n-1个服务建立连接,假如共有n个服务,那么建立的连接数是多少呢?1+2+3+...+n-1 = n * (n-1)/2; 可见随着服务数增多,光维持心跳都消耗不少的资源
  2. mq
    mq广播模式极大浪费资源;建议集群模式(每个server订阅一个topic,将client和topic的映射保存到redis,根据client找到topic发送msg,这样对应server就收到了)
  3. redis pubsub or 队列
  4. 单独搭建tcp服务进行转发消息(基于此开发)

软件架构

输入图片说明 Distribute Server为tcp转发服务,可以启动多个,这里只画出一个,默认采用随机策略来选择 Distribute Server。

  1. 基于netty主从模式搭建tcp服务端、客户端作为网络传输框架
  2. 采用二进制协议的 protostuff进行序列化
  3. 实现了序列化、反序列化的zero-copy,大大减少了内存分配、复制的开销(对象 > ByteBuf, ByteBuf > 对象)
  4. 异步、缓存
  5. 实现ack机制,接收者收到消息,返回ack,在超时时间后,没有收到ack,抛出异常给发送者(可以选择性开启ack)

安装教程

前提:运行redis,zookeeper

  1. center为转发服务,启动类BootStrap
  2. client基于springboot开发的二方包
  3. client-test为example

使用说明

  1. 如何进行简单测试
    先运行center中的 BootStrap启动类,
    client-test,启动两个进程,每个进程都要调用/login接口,clientId 不能一样(clientId 代表两个客户端id),访问/send接口,from to必填,from和to分别对应你那两个进程中的clientId,如下
    http://localhost:7020/login?clientId=1001
    http://localhost:7021/login?clientId=1002
    http://localhost:7020/send?from=1001&to=1002
  2. 如何进行压力测试: 先运行center中的 BootStrap启动类,再运行RedirectTest
  3. RedirectTest模拟多个客户端,相互发消息给对方
  4. 当然你也可以以jar的形式运行client-tes,默认启动类RedirectTest

压测结果

压测详情:https://www.yuque.com/weiqb/xb4msy/ifc0uaw4p3v0m1pd?singleDoc# 《distribute_message压测》
在200连接下,qps约29万左右, rt0.8ms左右 输入图片说明 输入图片说明

参与贡献

  1. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request

喜欢就Star一下吧 你的Star是我前进的动力

特技

  1. 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
  2. Gitee 官方博客 blog.gitee.com
  3. 你可以 https://gitee.com/explore 这个地址来了解 Gitee 上的优秀开源项目
  4. GVP 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
  5. Gitee 官方提供的使用手册 https://gitee.com/help
  6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 https://gitee.com/gitee-stars/
Java
1
https://gitee.com/weiqingbin666/distribute_message.git
git@gitee.com:weiqingbin666/distribute_message.git
weiqingbin666
distribute_message
distribute_message
master

搜索帮助