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服务组件的开发,结合消息队列系统实现分布式的异步任务。
安装须知:
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
运行:
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-Compose不熟悉的可以恶补下。
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
集群环境我们可以通过资源编排来进行部署
通过上面步骤制作专属镜像
进入APP文件目录,打开docker-compose.yml进行编辑
执行docker-compose up部署
这里说明下注意事项
dvc是数据卷容器,进行挂载代码动态更新的。
consul服务器可以自行部署成集群模式,模板中是单例。
sd的image填写为你生成的镜像名称比如上面的mysd。
SD框架提供了环境变量
SD框架提供了环境变量,便于使用Docker部署
SD_NODE_NAME
更换Consul的Node_NAME
SD_CONFIG_DIR
设置config配置文件的子目录
SD框架文档地址:http://docs.youwoxing.net
最后在使用 php -m 查看扩展时候,报错: PHP Warning: PHP Startup: Unable to load dynamic library ‘/home/admin/apps/php5/lib/php/extensions/no-debug-non-zts-20060613/gd.so’ - libpng15.so.15: cannot open shared object
运行 php start_swoole_server.php start 报错: ------------- SWOOLE_DISTRIBUTED -------------- System:Linux SwooleDistributed version:1.7.4 Swoole version: 1.9.4 PHP version: 7.1.0 worker_num: 4 task_num: 2
phpize运行报错 grep: /usr/include/php/main/php.h: No such file or directory grep: /usr/include/php/Zend/zend_modules.h: No such file or directory grep: /usr/include/php/Zend/zend_extensions.h: No such fil
(要求Workerman版本>=3.3.0) /Channel/Client 客户端
(要求Workerman版本>=3.3.0) __construct void ChannelServer::__construct([string $listen_ip = '0.0.0.0', int $listen_port = 2206]) 实例化一个ChannelServer服务端 参数 listen_ip 监听的本机ip地址,不传默认是0.0.0.0 listen_port 监听的端口
(要求Workerman版本>=3.3.0) 源码地址:https://github.com/walkor/Channel Channel是一个分布式通讯组件,用于完成进程间通讯或者服务器间通讯。 特点 1、基于订阅发布模型 2、非阻塞式IO 原理 Channel包含Channel/Server服务端和Channel/Client客户端 Channel/Client通过connect接口连接Cha
(要求Workerman版本>=3.3.0) 源码地址:https://github.com/walkor/Channel Channel是一个分布式通讯组件,用于完成进程间通讯或者服务器间通讯。 特点 1、基于订阅发布模型 2、非阻塞式IO 原理 Channel包含Channel/Server服务端和Channel/Client客户端 Channel/Client通过connect接口连接Cha
一、MapReduce概述 Hadoop MapReduce 是一个分布式计算框架,用于编写批处理应用程序。编写好的程序可以提交到 Hadoop 集群上用于并行处理大规模的数据集。 MapReduce 作业通过将输入的数据集拆分为独立的块,这些块由 map 以并行的方式处理,框架对 map 的输出进行排序,然后输入到 reduce 中。MapReduce 框架专门用于 <key,value> 键值
Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。不过,略有遗憾的是,据说在淘宝内部,dubbo由于跟淘宝另一个类似的框架HSF(非开源)有竞争关系,导致dubbo团队已经解散(参见http://www.oschina.net/news/55059/druid-1-0-9 中的评论),反到是
类型 实现框架 应用场景 批处理 MapReduce 微批处理 Spark Streaming 实时流计算 Storm
其于职业介绍所、工头、工人、工作模型的分布式计算框架。 职业介绍所有两种,一种是本地职业介绍所,一种是远程职业介绍所。顾名思义,本地职业介绍所就是在当前计算机上的,远程职业介绍所用于连接到远程职业介绍所的。 工人、工头都可以加入到职业介绍所,所以加到本地或远程种业介绍所都是可以的。 在同一个职业介绍所中,具有同样类型的工人、工头和工作都存在的时候,工作就可以被安排下去执行。当然,有两种安排方式,一