PHP高性能分布式应用服务器框架-SwooleDistributed

选择SD框架助力企业开发

今年年底历时2年多的迭代,这是SD框架硕果满满的一年,通过不断的迭代和改进SD框架已经在圈内有良好的口碑,不少新生的框架借鉴了SD的设计思想,SD框架也被不少创业型公司和大型企业使用。

SD框架到底是什么技术

SD框架全称SwooleDistributed,从名称上看一个是Swoole一个是Distributed,他是基于Swoole扩展的可以分布式部署的应用服务器框架。
借助于PHP的高效开发环境,Swoole的高性能异步网络通信引擎,以及其他的高可用的扩展和工具,SD框架提供给广大开发者一个稳定的高效的而且功能强大的应用服务器框架。

入门成本

老实的说相对比目前热门的FPM框架来说,SD的入门成本相对还是比较高的,因为设计理念不同以及和传统PHP-FPM环境完全不同的运行环境,对于长时间使用LAMP(LANP)技术的开发人员来说会有一段时间的适应期,如果开发应用简单涉及到的系统复杂度低,那么SD上手还是比较容易,根据简单的例子和文档几乎立即就能开启SD的探索之旅,但是如果开发的是复杂的应用那么SD包含的众多组件还是需要你慢慢熟悉上手的。

SD框架到底包含哪些强大的功能呢

我们这里列举下SD提供的各种各样的功能以及模块组件

  • 混合协议
    SD框架支持长连接协议TCP,WebSocket,短连接协议HTTP,以及UDP。
    通过配置开放不同的端口开发者可以轻松管理不同的协议,并且可以共用一套业务代码,当然你可以通过智能路由进行代码的隔离。
    长连接可以配置不同的数据传输协议,比如二进制协议文本协议等等,通过框架提供的封装器解包器接口可以自定义各种各种的协议封装,并且各种协议之间可以自动转换,比如你通过广播发送一个信息,该信息流向不同客户端,客户端间采用不同协议,那么框架会根据不同的端口自动转换不同的协议封装。
    你也可以通过Http给所有长连接客户端发送推送消息,类似这种混合协议协作的业务在SD框架上会异常简单。
  • MVC以及智能路由
    框架的设计是MVC架构,其中每一个层级都可以继续划分子层级,开发者可以将Controller继续分层通过不同文件夹进行管理,也可以将Model进行细分,划分为业务层和数据层,这都看开发者自身的系统设计。智能路由将处理解包器解包后的数据,负责将这些数据传递到Controller层。
  • 中间件
    SD框架还提供了中间件,中间件可以对流入的数据进行处理,比如清理异常数据,修改数据,流量统计,搜集日志等功能。中间件可以设置多个,他们和端口进行绑定。
  • 对象池
    SD框架内大多数的对象都使用了对象池技术,对象池技术有利于系统内存的稳定,减少GC的次数,提高系统的运行效率,事实证明对象池对系统稳定做出了极大的贡献,开发者也可以使用这一套对象池技术,增加对对象的复用,减少GC和NEW的频率,对系统毛刺现象和内存泄露方面都有很大的稳定性提升。
  • 异步客户端以及连接池
    Mysql,Redis,Http客户端,Tcp客户端,等等其他更为复杂的客户端,在SD框架中均为异步的模式,异步解决了系统整体的并发能力,但异步客户端需要提供连接池维持,SD框架提供了连接池,开发者不需要自己管理连接池,只需要使用即可。
  • 协程
    异步事件回调解决的是并发性能,但造成的是业务代码的混乱。SD框架提供了协程解决了这一问题,通过yield关键字提供对异步的同步写法,消除了业务书写上的大量回调嵌套,你可以通过yield+同步的写法实现异步的性能。
    协程提供了一整套完整的体系,包括超时,异常,休眠,多路选择,以及创建用户协程等等功能。
  • 定时任务
    顾名思义定时执行的任务。
  • 任务投递
    支持将耗时任务投递到Task进程。
  • 自动Reload
    可以开启框架的自动Reload功能,这样代码修改会被立即响应。

上面描述的都是一些基础功能,大家开发应用时经常用到的,那么下面则是一些高级功能。

  • 集群以及微服务
    框架提供集群部署,通过开启集群开关,部署Consul工具服务器,我们就可以开启集群之旅,框架中消息功能都是支持集群环境的。通过暴露API,监听API,我们可以实现微服务,微服务中我们又提供了健康监控,熔断,超时,负载均衡,请求迁移等等功能。
    集群采用的是对等网络,没有中间节点,没有单点隐患,设计理念如下图所示。

     

    image

  • 订阅与发布
    SD提供的订阅发布功能也是支持集群环境,并且它严格的按照MQTT所定义的订阅发布规范,并且实现了所有的功能。这恐怕是最好最优秀的订阅发布功能了。

  • 事件派发
    跨进程跨服务器的事件派发功能,很多SD框架的基础设施都是基于这个搭建的。

  • 用户进程管理以及进程间RPC
    SD框架重新封装了用户进程,开发者可以启动自己的用户进程,用户进程可以是异步的也可以是同步的,也是支持各种连接池和协程,用户进程的用处很多,同样框架也支持用户进程和Worker进程间互相RPC调用。

  • 集群下的定时任务
    通过Consul可以设置定时任务,并且会同步到集群所有的服务器上去执行,集群服务器会选举出一个Leader,可以通过获取是否是Leader来决定这个任务是否被执行。

  • Context上下文
    这个是在消息处理整个流程中被共享的上下文,很实用,很方便。

接下来介绍的是SD特色组件

  • 异步AMQP客户端以及分布式任务系统
    消息队列协议AMQP,框架提供了一个支持AMQP协议的异步客户端,可以和RabbitMQ联动,通过框架提供的分布式任务组件,可以搭建分布式任务系统。
  • 异步MQTT客户端
    异步的MQTT客户端可以和MQTT服务实现订阅与发布
  • MQTT简易集群服务器
    支持QOS0级别的简易MQTT服务器,支持集群部署。
  • 服务器监控系统
    提供了一个服务器监控后台,可以对集群进行监控,也可以监控某一台服务器的具体运行状况。
    下面是一些截图

     

    image

     

    image

     

    image

     

    image

     

    image

SD框架远远不止现在

SD框架一直在高速发展中,有更多开发者的参与才会有更好的未来。
附带SD框架的文档以及官网
官网
文档
GitHub
如果你喜欢,请打个星星支持下~



作者:点聊
链接:https://www.jianshu.com/p/c4328829ee5d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SwooleDistributedswoole分布式系统的实现,他提供了一套基于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、付费专栏及课程。

余额充值