SwooleDistributed - Swoole 分布式通讯框架


Apache 2.0
跨平台
PHP

软件简介

SwooleDistributed 是swoole分布式系统的实现,他提供了一套基于swoole扩展的分布式通讯框架。

结构图:

SwooleDistributed
不仅提供了分布式搭建的必要设施,还提供了4大组件帮助你提高编写代码的效率,你既可以部署成单机模式也可以搭配dispatch模块构建集群系统。

有别于传统的MVC架构,SwooleDistributed
主要应对的是rpc服务或者是通讯服务,也就是说MVC中的View模块是没有实际意义的,所以在SwooleDistributed
中仅存在Model和Controller,另外为了方便开发我们额外添加了2个组件分别是Task和Timer。

Task组件主要是处理异步任务,由于Task的设计结构简单只适合用于辅助swoole的worker进程,处理简单并不复杂的异步操作,如果你将他作为复杂耗时并且频繁调用的组件那是不可取的。

Timer是封装好的定时器,他和Task组件关系密切,你可以通过Timer进行定时任务。

目前提供便利的还有异步的Redis连接池,你可以方便简单的使用redis异步服务而不用担心连接池的问题,我们已经优雅的解决了。但值得注意的是所有的异步服务都只允许在worker进程中调用,task进程只能调用同步服务。

未来将要实现的:

1.异步的mysql服务,建立管理mysql连接池。

2.mysql语法构建器,帮助快速构建mysql语句。

3.Job服务组件的开发,结合消息队列系统实现分布式的异步任务。

安装须知:

  1. php 7.0
    2.需要使用最新版的swoole,请通过github下载编译swoole,1.8.7在php7.0下存在bug不建议使用
    3.需要redis支持,安装redis扩展 swoole编译时选择异步redis选项
    4.需要composer支持,安装composer,运行composer install安装依赖
    5.如需集群自行搭建LVS

运行:

  1. php start_swoole_server.php start
    启动swoole server服务器
    2.php start_swoole_dispatch.php start
    启动swoole dispatch服务器
    3.单独启动swoole server不具备分布式特性,一台物理机只允许启动一个swoole server
    4.swoole dispatch服务器可以和swoole server放在一个物理机上,一台物理机只允许启动一个swoole dispatch
    5.可以启动多台swoole server和多台swoole dispatch搭建分布式系统(至少1台LVS,2台swoole
    server,1台swoole dispatch,1个redis)
    6.单独启动swoole server可作为单机服务器。
    7.修改config目录下配置,改为你自己的配置。
    8.swoole server与swoole dispatch 必须在同一个网段。swoole dispatch无需配置,swoole
    server会自动发现
    9.swoole server与swoole dispatch 都支持动态弹性部署,随时热插拔。swoole dispatch上线后30秒内被swoole
    server发现并建立连接
    10.内置controller,model,task 3大模块
    11.swoole server与swoole dispatch都被设计成无状态服务器,所有的信息共享都通过redis
    12.最新版采用了异步redis进行数据存储,通过开启一个新的redis连接池进程,利用addProcess和sendMessage技术进行结果分发,优雅解决异步问题。
    13.注意taskproxy为单例,不要变成成员变量使用,用到时load

SD框架为Docker提供了部署环境的镜像,包含PHP7.1以及所有框架需要的扩展和工具。

也提供了资源编排模板帮助快速构建SD集群环境。

Docker书籍

如果对Docker和Docker-Compose不熟悉的可以恶补下。
Docker — 从入门到实践

安装Docker

首先建议你注册阿里云账号,访问阿里云Docker镜像仓库
Docker镜像仓库

申请你的专属加速器地址,通过下面的文档安装以及配置好你的Docker。

选择镜像

SD框架提供2种镜像

该版本镜像是基础镜像包含SD框架的运行环境,但不包括Composer安装的代码。

该版本镜像是完整的SD框架,包含Composer安装的代码以及Install,可以直接运行。

如何选择镜像?

如果你的composer.json没有多余的依赖那么可以直接选择sd的镜像,否则请通过swoole基础镜像进行制作。

制作镜像

通过swoole基础镜像制作专属的运行环境。

1. 下载模板

git clone https://github.com/tmtbe/swoole-docker.git

找到SD文件夹,将你的composer.json拷贝进去覆盖。

2. 制作镜像
进入SD文件目录,执行下面代码。

docker build -t mysd .

注意最后的一个‘.’,不要忽略。

3. 运行镜像

docker run mysd

4. 挂载代码目录

将你的代码拷贝到/apps目录下,或者相应的做些调整,我们只需要挂载src目录。

docker run -v /apps/src:/apps/src mysd

资源编排

集群环境我们可以通过资源编排来进行部署

  1. 通过上面步骤制作专属镜像

  2. 进入APP文件目录,打开docker-compose.yml进行编辑

  3. 执行docker-compose up部署

这里说明下注意事项

  1. dvc是数据卷容器,进行挂载代码动态更新的。

  2. consul服务器可以自行部署成集群模式,模板中是单例。

  3. sd的image填写为你生成的镜像名称比如上面的mysd。

  4. SD框架提供了环境变量

环境变量

SD框架提供了环境变量,便于使用Docker部署

SD_NODE_NAME

更换Consul的Node_NAME

SD_CONFIG_DIR

设置config配置文件的子目录

SD框架文档地址:http://docs.youwoxing.net