1. 程式人生 > >PHP高效能分散式應用伺服器框架-SwooleDistributed

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伺服器,支援叢集部署。
* 伺服器監控系統
提供了一個伺服器監控後臺,可以對叢集進行監控,也可以監控某一臺伺服器的具體執行狀況。
下面是一些截圖




SD框架遠遠不止現在

SD框架一直在高速發展中,有更多開發者的參與才會有更好的未來。
附帶SD框架的文件以及官網
官網
文件
GitHub
如果你喜歡,請打個星星支援下~