专栏首页Swoole开源项目SwooleDistributed:基于 Swoole 扩展的 分布式 全栈 开发框架

SwooleDistributed:基于 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均是支持集群系统的,单机模式和集群模式对业务代码不产生任何的影响。

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

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

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

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

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

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

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

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

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

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

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

附带SD框架的文档以及官网 官网 文档 GitHub 如果你喜欢

本文分享自微信公众号 - Swoole开源项目(gh_d3384702e510)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-08-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 重提URL Rewrite(3):在UR

    在进行了URL Rewrite之后,经常会遇到的问题就是页面中PostBack的目标地址并非客户端请求的地址,而是URL Rewrite之后的地址。以上一篇文章...

    用户2398817
  • Python 多进程使用之监控

    pool用于设置进程池,这个在数据量很大的情况下采用pool远比使用process要好很多,后者会消耗掉大量服务器资源,甚至导致宕机的风险,在数据量不大的情况下...

    用户2398817
  • python的requests库和url

    python中有多种库可以用来处理http请求,比如python的原生库:urllib包、requests类库。urllib和urllib2是相互独立的模块,p...

    用户2398817
  • python2.7 安装ssl模块

    运行脚本,出错信息:urllib2.URLErroe:<urlopen error unknown url type : https>

    用户2398817
  • Python自动化开发学习-Django

    django amdin是django提供的一个后台管理页面,该管理页面提供完善的html和css,使得你在通过Model创建完数据库表之后,就可以对数据进行增...

    用户2398817
  • python对url格式解析的方法

    本文实例讲述了python对url格式解析的方法。分享给大家供大家参考。具体分析如下:

    用户2398817
  • 精通MVC3摘译(2)-生成URL

    处理发来的URL只是MVC中的一部分,我们也需要生成一些URL植入到我们的view中,让用户点击,并提交表单到目标controller和action,下面会介绍...

    用户2398817
  • python---简单的接口测试实例

    我们可以用Jmeter做接口测试,但是呢个人觉得那个有点局限性,用python就灵活很多,

    用户2398817
  • Workerman3.x 版本学习之入门

    用于学习Workerman的虚拟机配置信息如下(至于环境的安装,请参考官方手册自行解决):

    用户2398817
  • 《Python入门》第一个Python

    上一篇讲了《Python入门》Windows 7下Python Web开发环境搭建笔记,接下来讲一下Python语言Web服务的具体实现:第一个Python ...

    用户2398817

扫码关注云+社区

领取腾讯云代金券