搜尋
首頁後端開發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 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP如何處理對象克隆(克隆關鍵字)和__clone魔法方法?PHP如何處理對象克隆(克隆關鍵字)和__clone魔法方法?Apr 17, 2025 am 12:24 AM

PHP中使用clone關鍵字創建對象副本,並通過\_\_clone魔法方法定制克隆行為。 1.使用clone關鍵字進行淺拷貝,克隆對象的屬性但不克隆對象屬性內的對象。 2.通過\_\_clone方法可以深拷貝嵌套對象,避免淺拷貝問題。 3.注意避免克隆中的循環引用和性能問題,優化克隆操作以提高效率。

PHP與Python:用例和應用程序PHP與Python:用例和應用程序Apr 17, 2025 am 12:23 AM

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。

描述不同的HTTP緩存標頭(例如,Cache-Control,ETAG,最後修飾)。描述不同的HTTP緩存標頭(例如,Cache-Control,ETAG,最後修飾)。Apr 17, 2025 am 12:22 AM

HTTP緩存頭的關鍵玩家包括Cache-Control、ETag和Last-Modified。 1.Cache-Control用於控制緩存策略,示例:Cache-Control:max-age=3600,public。 2.ETag通過唯一標識符驗證資源變化,示例:ETag:"686897696a7c876b7e"。 3.Last-Modified指示資源最後修改時間,示例:Last-Modified:Wed,21Oct201507:28:00GMT。

說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1?說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1?Apr 17, 2025 am 12:06 AM

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP:服務器端腳本語言的簡介PHP:服務器端腳本語言的簡介Apr 16, 2025 am 12:18 AM

PHP是一種服務器端腳本語言,用於動態網頁開發和服務器端應用程序。 1.PHP是一種解釋型語言,無需編譯,適合快速開發。 2.PHP代碼嵌入HTML中,易於網頁開發。 3.PHP處理服務器端邏輯,生成HTML輸出,支持用戶交互和數據處理。 4.PHP可與數據庫交互,處理表單提交,執行服務器端任務。

PHP和網絡:探索其長期影響PHP和網絡:探索其長期影響Apr 16, 2025 am 12:17 AM

PHP在過去幾十年中塑造了網絡,並將繼續在Web開發中扮演重要角色。 1)PHP起源於1994年,因其易用性和與MySQL的無縫集成成為開發者首選。 2)其核心功能包括生成動態內容和與數據庫的集成,使得網站能夠實時更新和個性化展示。 3)PHP的廣泛應用和生態系統推動了其長期影響,但也面臨版本更新和安全性挑戰。 4)近年來的性能改進,如PHP7的發布,使其能與現代語言競爭。 5)未來,PHP需應對容器化、微服務等新挑戰,但其靈活性和活躍社區使其具備適應能力。

為什麼要使用PHP?解釋的優點和好處為什麼要使用PHP?解釋的優點和好處Apr 16, 2025 am 12:16 AM

PHP的核心優勢包括易於學習、強大的web開發支持、豐富的庫和框架、高性能和可擴展性、跨平台兼容性以及成本效益高。 1)易於學習和使用,適合初學者;2)與web服務器集成好,支持多種數據庫;3)擁有如Laravel等強大框架;4)通過優化可實現高性能;5)支持多種操作系統;6)開源,降低開發成本。

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.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具