如何玩转swoole_基于Swoole扩展分布式全栈开发框架

# 基于Swoole扩展分布式全栈开发框架

PHP在Web界很出名,网站的建设大多数都是使用PHP开发的,但是不是PHP就仅仅限制于Web开发了呢?在Swoole扩展出来之前PHP似乎确实只能在Web建站上蹦跶下,不过在Swoole扩展的支持下,PHP可以说是能在高性能高并发的网络通讯中一战了。

很多人接触过Swoole又被它众多的API和功能打败了,诚然功能越强大复杂度越高,上手难度也就越大,Swoole可以定义为PHP的高性能网络库,如果想灵活自由的使用它则必须在其基础上进行开发,而开发出的框架目的就是优化众多开发者使用体验。

SwooleDistributed框架(简称SD)是基于Swoole开源的一个分布式通讯框架,发展到现在已经接近2年,不断的维护和革新,不断地添加功能和代码优化,如今的SD框架可以说是相当的强大。基于SD框架上线的产品也有不少,稳定性和性能都一致好评,框架开发者也非常的活跃,版本的更新和Bug的修复也相当的快,文档也相对的比较全面,还有些基础的视频帮助大家入门。

那么说说SD框架究竟给了开发者多大的便利呢?

首当其冲的是SD框架天然分布式的架构,基于Consul配置中心SD框架实现了服务节点的发现,通过发现SD节点,SD服务器间会俩俩相连,完成一个网状的拓扑结构,没有中心节点不依赖任何的存储结构。SD服务器间会交换同步客户端数据,每一个SD服务器都能拿到集群中客户端的所有状态。动态添加服务器和移除服务器,以及服务器健康状态的检测均能通过Consul控制台查看SD服务器也会基于这些数据进行集群拓扑的动态调整,SD框架中提供的消息API均是支持集群系统的,单机模式和集群模式对业务代码不产生任何的影响。

![](https://box.kancloud.cn/a3217603caf67ea6ad913ffd190d6087_349x292.png)

![](https://box.kancloud.cn/29dfaae2eaea85c01a10516c7f81b130_1395x805.png)

SD框架还能通过简单的配置将具体服务发布在Consul上,通过Consul实现微服务,同样微服务的发现和健康检测都是自动进行的,SD框架提供了内部的RPC方案,还提供了微服务的降级和熔断,用于保证整体服务的稳定性。我们可以访问框架的状态信息看到目前的服务分布。

![](https://box.kancloud.cn/12b70806daea7e70b6390c9eca483ed7_453x932.png)

SD封装了基于定时器的定时任务系统,并且可以通过Consul实现定时任务的动态装配。

![](https://box.kancloud.cn/198e36c5437fdae419ea7d561f184034_816x371.png)

我们都知道Swoole是基于事件驱动的扩展,是异步回调的风格,那么如果直接使用会导致代码间相互嵌套影响逻辑的写作和代码的识别,SD框架基于yield实现了协程模式,可以通过yield来实现同步的写法。

Swoole提供了异步Redis和异步Mysql客户端的库,SD框架封装了客户端连接池,可以通过连接池实现高并发的异步客户端。

```php

$result = yield $this->redis_pool->getCoroutine()->set('testroute',1);

$this->http_output->end($result);

```

Swoole是多进程模式,SD提供了用户进程模板,可以轻松的实现自定义进程,并能在进程中使用协程调用连接池,并封装了进程间的通讯。

```php

ProcessManager::getInstance()->addProcess(MyProcess::class);

ProcessManager::getInstance()->getRpcCall(ClusterProcess::class, true)->my_sendToAll($data);

```

除此之外SD框架还提供了自动Reload模块,消息分发模块,日志系统,RedisLua管理,高速缓存,分布式锁,Leader选举,对象池等。异步客户端提供了AMQP,MQTT,Http,Tcp等,基本所有的回调都提供了对应的协程风格。

![](https://box.kancloud.cn/b7be372ac36ec031cab8ce7aeed29dd4_1047x300.png)

SD框架是MVC设计风格,通过装载器装载对应的模块,熟悉MVC框架的开发者可以迅速上手。

通过Ports管理SD框架可以开启多个端口,比如通过Http给所有的Tcp客户端发消息这种需求在SD中特别的轻松,通过Pack我们可以给不同的端口开启不同的协议解析,然而在业务代码中开发者只需正常的发送信息,协议间的转换都是由框架自动进行的。通过Route我们可以自定义路由,将消息路由给不同的Controller处理,通过Task我们可以将些耗时的任务丢给Task进程异步处理。通过Event我们可以搭建自己的消息派发机制,比如实现高性能Http同步堵塞,服务间的同步信号等。通过MQTT异步客户端或者是AMQP异步客户端我们可以搭建自己的任务处理系统,通过RabbitMQ进行任务的派发。甚至是和一些开源的MQTT服务器集成,打造纯业务处理的服务器。

![](https://box.kancloud.cn/eea38590a17673b7ca36c96748735d42_494x382.png)

总之通过SD框架可以玩转的东西有很多很多,不仅可以单机,业务量上升后可以转换为集群模式,其实最重要的是更新维护频繁,作者活跃不是么。

附带SD框架的文档以及官网

[官网](http://sd.youwoxing.net/)

[文档](http://docs.youwoxing.net/)

[GitHub](https://github.com/tmtbe/SwooleDistributed)

如果你喜欢,请打个星星支持下~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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 标签:通讯框架

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值