imcloud-基于swoole-原生协程构建分布式推送中间件

52次阅读

共计 1303 个字符,预计需要花费 4 分钟才能阅读完成。

github:http://github.com/brewlin/im-…

  • im-cloud 基于 swoole 原生协程构建分布式推送中间件
  • im-cloud 分布式中间件的安装部署
  • im-cloud <> goim 分布式中间件并发压测对比
  • im-cloud 分布式中间件分析(一)- 通讯协议
  • im-cloud 分布式中间件分析(二)-cloud 节点实现
  • im-cloud 分布式中间件分析(三)-job 节点实现
  • im-cloud 分布式中间件分析(四)-logic 节点实现

一、概述

基于 swoole 原生协程构建商业化即时推送 im 服务中间件, 不进行业务处理,单独作为中间件使用,可弹性扩充节点增加性能处理. 不依赖外部框架,核心代码为原生 swoole 构建的组件

借鉴 goim(bilibili 出品 经过生成验证百万消息秒级推送),使用 swoole 实现基于 php 的高性能分布式 im 中间件,提升高性能并发的推送

二、服务业务节点

cloud,job,logic 等节点都可以水平扩容

  • 例如在消费能力不足时可以启动 n 个 job 节点提高并消费能力
  • 启动多个 cloud 节点作为 client 客户端负载均衡,将多个websockettcp client 分布到多个 cloud 节点中,提高 cloud 节点中心处理能力
  • logic 提供对外 restapi 作为主要业务节点
  • 高性能 协程化、水平扩容、分布式服务架构、接入服务治理

@cloud

cloud 作为中心服务节点 grpc-server 节点,对外接收 TCP、Websocket 客户端进行 长连接, 可以水平扩容至多个节点 并注册到服务中心,例如consul。每个 cloud 节点维护自己的客户端

@job

job 节点作为消费节点 消费队列数据 然后进行 grpc 和 cloud 服务进行通讯 进行 push push room broadcast, 作为节点中间件,消费kafakarockermq。。。 之类,可以扩展多个节点提高并发消费能力

@logic

logic 节点 提供 rest api 接口,作为生产节点 和 grpc 客户端, 可写入队列作为生产者,也可以扩展自己的业务进行 grpc 直接调用 cloud 节点中心进行推送

三、组件依赖包 package

服务间配置独立,使用 composer 进行依赖管理,进行 composer 组件化开发

  • core 为核心基础组件,底层设计借鉴 swoft源码设计
  • grpc 定义 grpc 接口规范 composer 包, 使用 protobuf 构建, 封装有连接池
  • discovery 服务发现注册组件,注册grpc-server,发现服务等封装
  • process 进程管理模块,可以注册启动自定义进程,并交由 swoole master 进程管理声明周期
  • queue 消息队列管理模块,提供消息队列接口,底层实现了 连接池 接口,无需管理连接,根据类型可以切换不同的消息队列(done rabbitmq,soon kafak)
  • redis 封装了连接池版本的 redis client
  • task 异步任务组件,封装投递 task 进程任务的接口,目前仅支持投递worker->task, 不支持自定义进程投递以及投递到自定义进程

四、数据流程

im-cloud 连接流程图

im-cloud 数据流程图

im-cloud 业务流程

正文完
 0