搜索
首页后端开发php教程Dora-RPC 端午升级 PHP微服务开发包

Dora-RPC端午升级,目前master还在beta版本增加了大量的特性。

项目线上已经有几家公司平稳使用一年多了,当然他们是以此为原型进行了一定改造。最近升级改进了很多,如去掉unique函数导致性能翻倍,发现服务端有个别函数会被重复执行问题目前都已经修复,另外增加了异步任务拿回结果。目前groupclient也在改造,稍晚会将groupclient的功能集成到client内而不是两个客户端。

在之前一直没有深入做介绍,这里简单介绍一些目前有的特性:

此开源使用Swoole扩展进行的再次封装,用于PHP前后端分离,当我们项目变得庞大的时候我们需要隔离一些功能作为公共服务,我们希望通过这个方式将我们复杂的系统通过API服务变的简单易维护,更好评估复杂项目和跨项目组调用更加清晰。

框架思考:

  • 仅提供一套最基本的服务端和客户端,通过简单集成即可使用在任何开发框架上。
  • 返回数据结构分三层,每层都有msg和code,第一层(底层)代表当前客户端通讯情况,第二层代表当前api在服务端执行情况是否有异常或者投递情况,第三层代表代码执行情况若业务代码产生异常自动会纪录在这里。使用这个方式是因为RPC本身的复杂性,特提供这个方式来判断系统真正的状态。
  • 为了支持异步任务稍晚获取功能,将开发包底层都做了升级,主要原因是服务端处理完异步任务后会向客户端发送处理结果,如果当前客户端向服务端下发新任务并执行Recive的时候,之前客户端是无法判断出这次返回的内容是否为此次请求,与此同时由于长链接的特殊性,上一次的请求如果被异常中断没有执行recive的话,会导致上次的结果被本次请求拿到。为了防止以上问题特做了guid生成功能通过guid的判断完成了异步任务结果的收集和非本次请求的返回数据鉴别。
  • 由于我们的业务代码特殊性,我们不能保证我们的业务代码不会因为一些特殊原因产生故障,很多故障会导致进程终止,为此我们的业务代码都是在task上执行的,而不是worker上。通过这个方式我们可以做很多特殊的功能。不过task缺点是很多swoole异步特性不支持。
  • 服务分组,很多情况下我们是一个公共池子,既然同在一片天下我们就会收到影响。另外不同业务部署在不同的服务器上也很常见,为此我们提供了服务分组功能。规定某个服务器属于哪几个组,通过组能找到正确的服务器配置进行连接工作。

任务下发模式:

下发任务数量可以分为:

  • 并发多个任务下发
  • 单个任务下发

下发任务等待结果有多个模式:

  • 下发任务阻塞当前进程等待处理完毕并拿到返回数据
  • 下发异步任务不等待任务处理结果,只会返回下发成功,而任务在服务器跑完毕后没有任何返回
  • 下发异步任务不等待任务在服务器的处理,下发成功后马上返回下发成功,而服务完成后服务端返回处理结果给客户端,客户端通过一个函数统一将所有之前异步任务结果获取返回给当前业务进程。

通过以上方式我们可以成倍的增加我们接口响应速度和服务器利用能力。即使不使用复杂的多线程我们也可以达到我们的目标。 

网络通讯:

  • 客户端可以在PHP-FPM及CLI下工作,可维持长链接
  • 每次来回一次请求网络耗时在 0.002~0.004 左右(也取决于内网网络)
  • 请求处理完毕后链接仍旧保留不关闭 减少握手耗时及客户端队服务器的端口数消耗。
  • 若数据较大,支持包压缩gzip若有特殊需要可简单更改为其他压缩方式
  • 序列化使用的PHP自带的serialize若有需要可以直接自行更换
  • 连接和接收结果默认超时3秒,在const文件内设置,如果出现超时,客户端会自动使用其他配置进行尝试重试指定次数后返回json描述错误原因。如果有需要可以在重试逻辑内增加重试监控,监测各个服务器的工作状态。
  • 如果在本次请求中有一个ip已经失败过一次会自动在本次内进行屏蔽,如果发现所有配置已经都尝试或超过重试次数会返回失败。cli下失败一次后再次下发API时会取消掉之前所有屏蔽配置继续重试。
  • 之前RPC单线程客户端和虚拟机下的测试QPS大概在200~500次每秒通讯,但是每次下发的任务可以很多QPS可以在2k 单应用服务器
  • 当前的通讯架构并没有假如反向代理服务,因为客户端连接反向代理会消耗一定时间。另外反向代理服务器虽然性能高但是本身也是一个“单点”,对于分布式服务来说这种方式还是直连比较方便。

服务发现:

  • 当我们服务器需要增加减少的时候我们正常的流程是更新客户端的配置来实现新服务器的增加,但是这个方式还是很多缺点如果某台服务器出现故障,短期内我们无法发现,发现后还是需要人工修改配置或去运维配置中心区去摘除,通过服务发现我们可以自动的摘除,增加服务器,只要我们的控制逻辑做的很完善后期我们可以让这个过程完全自动。
  • 本框架提供了最简单的服务发现实现方式,使用redis作为存储,纪录所有服务端的ip和端口及所在分组。
  • 启动应用服务器并告诉他服务发现的redis列表后,服务器会自动将当前服务的ip和端口及分组上报到多个redis上进行注册,并定期刷新其超时时间。如果有个别节点在超过超时时间仍旧没有再上报那么自动摘除。
  • 客户端会定期从多个redis获取到最新的配置,并且更新本地配置文件内容。

后期支持:

下一步将会支持分布式日志,配置同步等

最后Dora-RPC是一个很开放的开源,本意是给Swoole社区用户作为参考做出优秀的RPC及微服务。

与此同时也希望各位踊跃参与此项目开发,任何有效的参与人都会纪录在wiki内。

项目地址:https://github.com/xcl3721/Dora-RPC 

最近活动:http://www.huodongxing.com/event/5337738177600 分享SOA实战经历,免费门票

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
PHP行动:现实世界中的示例和应用程序PHP行动:现实世界中的示例和应用程序Apr 14, 2025 am 12:19 AM

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP:轻松创建交互式Web内容PHP:轻松创建交互式Web内容Apr 14, 2025 am 12:15 AM

PHP可以轻松创建互动网页内容。1)通过嵌入HTML动态生成内容,根据用户输入或数据库数据实时展示。2)处理表单提交并生成动态输出,确保使用htmlspecialchars防XSS。3)结合MySQL创建用户注册系统,使用password_hash和预处理语句增强安全性。掌握这些技巧将提升Web开发效率。

PHP和Python:比较两种流行的编程语言PHP和Python:比较两种流行的编程语言Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP的持久相关性:它还活着吗?PHP的持久相关性:它还活着吗?Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。

PHP的当前状态:查看网络开发趋势PHP的当前状态:查看网络开发趋势Apr 13, 2025 am 12:20 AM

PHP在现代Web开发中仍然重要,尤其在内容管理和电子商务平台。1)PHP拥有丰富的生态系统和强大框架支持,如Laravel和Symfony。2)性能优化可通过OPcache和Nginx实现。3)PHP8.0引入JIT编译器,提升性能。4)云原生应用通过Docker和Kubernetes部署,提高灵活性和可扩展性。

PHP与其他语言:比较PHP与其他语言:比较Apr 13, 2025 am 12:19 AM

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

PHP与Python:核心功能PHP与Python:核心功能Apr 13, 2025 am 12:16 AM

PHP和Python各有优势,适合不同场景。1.PHP适用于web开发,提供内置web服务器和丰富函数库。2.Python适合数据科学和机器学习,语法简洁且有强大标准库。选择时应根据项目需求决定。

PHP:网络开发的关键语言PHP:网络开发的关键语言Apr 13, 2025 am 12:08 AM

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器