久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

PHP 微服務集群搭建 – Hyperf

微服務架構

微服務的概念由 Martin Fowler 于2014年3月提出:

微服務架構是一種架構模式,它提倡將單一應用程序劃分成一組小的服務,服務之間相互協調、互相配合,為用戶提供最終價值。每個服務運行在其獨立的進程中,服務和服務之間采用輕量級的通信機制相互溝通。每個服務都圍繞著具體的業務進行構建,并且能夠被獨立的部署到生產環境、類生產環境等。另外,應盡量避免統一的、集中的服務管理機制,對具體的一個服務而言,應根據業務上下文,選擇合適的語言、工具對其進行構建。

下圖是一個電商系統的微服務架構圖:

PHP 微服務集群搭建 - Hyperf

微服務架構與單體應用相比,具有以下優點:

1、每個服務都比較簡單,只關注于一個業務功能;

2、微服務架構方式是松耦合的,每個服務可以獨立測試、部署、升級、發布;

3、每個微服務可由不同團隊獨立開發,可以各自選擇最佳及最合適的不同的編程語言與工具;

4、每個服務可以根據需要進行水平擴展,提高系統并發能力。

沒有銀彈,微服務架構在帶來諸多優點的同時,也會有如下缺點:

1、微服務架構提高了系統的復雜度,增加了運維開銷及成本。如單體應用可能只需部署至一小片應用服務集群,而微服務架構可能變成需要構建/測試/部署/運行數十個獨立的服務,并可能需要支持多種語言和環境;

2、作為一種分布式系統,微服務架構引入了其他若干問題,例如消息序列化、網絡延遲、異步機制、容錯處理、服務雪崩等;

3、服務管理的復雜性,如服務的注冊、發現、降級、熔斷等問題;

4、服務與服務之間存在相互調用的情況,為排查系統故障帶來巨大挑戰。

可以說,正是傳統應用架構的系統變得日益臃腫,面臨難以維護、擴展的問題,同時容器化技術(Docker)的蓬勃發展和 DevOps 思想的日漸成熟,催生了新的架構設計風格 – 微服務架構的出現。

RPC 框架

微服務架構中的各個服務通常不在同一個機器上,甚至不會在同一個網絡環境里,因此微服務之間如何調用是一個亟待解決的問題,我們通常使用 RPC 協議來解決:

RPC(Remote Procedure Call),即遠程過程調用,是一個計算機通信協議。該協議允許運行于一臺計算機的程序調用另一臺計算機的子程序,而程序員無需額外地為這個交互作用編程。——維基百科

實現了 RPC 協議的框架,可以讓服務方和調用方屏蔽各種底層細節,讓調用方像調用本地函數一樣調用遠端的函數(服務)。RPC 框架一般為服務端和客戶端提供了序列化、反序列化、連接池管理、負載均衡、故障轉移、隊列管理、超時管理、異步管理等職能。在網上找到一個說明 RPC 框架工作原理圖:

PHP 微服務集群搭建 - Hyperf

目前,根據序列化數據時采用的技術的不同,可分為 JSON-RPC 和 gRPC 兩種:

1、JSON-RPC 是一種基于 JSON 格式的輕量級的 RPC 協議標準,可基于 HTTP 協議來傳輸,或直接基于 TCP 協議來傳輸。 JSON-RPC 優點是易于使用和閱讀。

2、gRPC 是一個高性能、通用的開源 RPC 框架,其由 Google 主要面向移動應用開發并基于 HTTP/2 協議標準而設計,基于 ProtoBuf (Protocol Buffers) 序列化協議開發,且支持眾多開發語言。 gRPC 具有低延遲、高效率、高擴展性、支持分布式等優點。

Consul

現在有了 RPC 框架,我們就可以只考慮服務與服務之間的業務調用而不用考慮底層傳輸細節。此時,如果服務 A 想調用服務 B 時,我們可以在服務 A 中配置服務 B 的 IP 地址和端口,然后剩下的傳輸細節就交給 RPC 框架。這在微服務規模很小的情況下是沒有問題的,但是在服務規模很大、而且每個服務不止部署一個實例的情況下會面臨巨大挑戰。比如,服務 B 部署了三個實例,這時候服務 A 想調用服務 B 該請求哪個實例的 IP ?假如服務 B 部署的三個實例有兩個都掛掉了,服務 A 可能會依舊去請求掛掉的實例,服務將不可用。將 IP 地址和端口寫成配置文件顯得很不靈活,微服務架構往往要保證高可用及動態伸縮。

因此,我們需要一個服務注冊與服務發現的工具,能夠動態地變更服務信息,并且找到可用的服務的 IP 地址和端口。目前市面上服務發現的工具有很多,如 Consul、ZooKeeper 、Etcd、Doozerd 等,本文主要以 Consul 軟件為例。

Consul 是一個支持多數據中心、分布式高可用的服務發現和配置共享的服務軟件,由 HashiCorp 公司用 Go 語言開發, 基于 Mozilla Public License 2.0 的協議進行開源。 Consul 支持健康檢查,并允許 HTTP 、gRPC 和 DNS 協議調用 API 存儲鍵值對。

下面是引入服務注冊與服務發現工具后的架構圖:

PHP 微服務集群搭建 - Hyperf

在這個架構中:

首先 S-B 的實例啟動后將自身的服務信息(主要是服務所在的 IP 地址和端口號)注冊到 Consul 中。

Consul 會對所有注冊的服務做健康檢查,以此來確定哪些服務實例可用哪些不可用。

S-A 啟動后就可以通過訪問 Consul 來獲取到所有健康的 S-B 實例的 IP 和端口,并將這些信息放入自己的內存中,S-A 就可用通過這些信息來調用 S-B。

S-A 可以通過監聽 Consul 來更新存入內存中的 S-B 的服務信息。比如 S-B-1 掛了,健康檢查機制就會將其標為不可用,這樣的信息變動就被 S-A 監聽到了,S-A 就更新自己內存中 S-B-1 的服務信息。

可見, Consul 軟件除了服務注冊和服務發現的功能之外,還提供了健康檢查和狀態變更通知的功能。

Hyperf

對于 Java 開發者來說,有技術相當成熟的 Dubbo 和 Spring Cloud 微服務框架可供選擇。作為一名 PHPer,我用 Google 查了一下「PHP + 微服務」,發現有用的相關內容少之又少 ,沒有什么實質性的參考價值,無限惆悵。。。幸好,有大神在基于 Swoole 擴展的基礎上,實現了高性能、高靈活性的 PHP 協程框架 Hyperf ,并提供了微服務架構的相關組件。

Hyperf 是基于 Swoole 4.3+ 實現的高性能、高靈活性的 PHP 協程框架,內置協程服務器及大量常用的組件,性能較傳統基于 PHP-FPM 的框架有質的提升,提供超高性能的同時,也保持著極其靈活的可擴展性,標準組件均基于 PSR 標準 實現,基于強大的依賴注入設計,保證了絕大部分組件或類都是 可替換 與 可復用 的。

于是,我在學習了微服務架構相關的基礎知識之后,使用 Hyperf 框架構建了一個基于 PHP 的微服務集群,這是項目源碼地址:https://github.com/Jochen-z/p…。該項目使用 Dokcer 搭建,docker-compose.yml 代碼如下:

version: "3" services:   consul-server-leader:     image: consul:latest     container_name: consul-server-leader     command: "agent -server -bootstrap -ui -node=consul-server-leader -client=0.0.0.0"     environment:       - CONSUL_BIND_INTERFACE=eth0     ports:       - "8500:8500"     networks:       - microservice   microservice-1:     build:       context: .     container_name: "microservice-1"     command: "php bin/hyperf.php start"     depends_on:       - "consul-server-leader"     volumes:       - ./www/microservice-1:/var/www     networks:       - microservice     tty: true   microservice-2:     build:       context: .     container_name: "microservice-2"     command: "php bin/hyperf.php start"     depends_on:       - "consul-server-leader"     volumes:       - ./www/microservice-2:/var/www     networks:       - microservice     tty: true   app:     build:       context: .     container_name: "app"     command: "php bin/hyperf.php start"     depends_on:       - "microservice-1"     volumes:       - ./www/web:/var/www     ports:       - "9501:9501"     networks:       - microservice     tty: true networks:   microservice:     driver: bridge volumes:   microservice:     driver: local

這里啟動了一個 Consul 容器 consul-server-leader 作為服務注冊和服務發現的組件,容器 microservice-1 和 microservice-2 分別提供了加法運算和除法運算的服務。容器 app 作為服務調用方,配置了 consul-server-leader 容器的 URL,通過訪問 consul-server-leader 獲取 microservice-1 和 microservice-2 服務的 IP 地址和端口,然后 app 通過 RPC 協議調用加法運算和除法運算的服務獲取結果并返回給用戶。

app 容器為 Web 應用,部署了一個 Hyperf 項目并對外提供 HTTP 服務。例如,在 AppControllerIndexController 控制器里有 add 方法:

public function add(AdditionService $addition) {   $a = (int)$this->request->input('a', 1); # 接受前端用戶參數   $b = (int)$this->request->input('b', 2);   return [     'a' => $a,     'b' => $b,     'add' => $addition->add($a, $b) # RPC調用   ]; }

在 AppJsonRpcAdditionService 中 add 的實現:

class AdditionService extends AbstractServiceClient {     /**      * 定義對應服務提供者的服務名稱      * @var string      */     protected $serviceName = 'AdditionService';     /**      * 定義對應服務提供者的服務協議      * @var string      */     protected $protocol = 'jsonrpc-http';     public function add(int $a, int $b): int     {         return $this->__request(__FUNCTION__, compact('a', 'b'));     } }

繼承了 AbstractServiceClient 即可創建一個微服務客戶端請求類,Hyperf 在底層幫我們實現了與 Consul 和服務提供者交互的細節,我們只要 AdditionService 類里的 add 方法即可遠程調用 microservice-1 和 microservice-2 提供的服務。

至此,PHP 微服務集群搭建就完成了!

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
一区二区三区午夜视频| 亚洲精品乱码久久久久久蜜桃麻豆 | 国产精品3区| 亚洲欧美日韩国产综合精品二区 | 日韩毛片一区| 日韩欧美在线精品| 在线视频观看日韩| 午夜av成人| 日本少妇一区二区| 91精品美女| 97精品国产| 美女av一区| 精品国产美女a久久9999| 成人在线网站| 精品国产免费人成网站| 99久久婷婷| 国产精品调教| 日韩电影免费在线观看| 久久国产日本精品| 免费在线观看不卡| 亚洲高清av| 日本欧美在线| 日韩在线观看不卡| 亚洲色图综合| 国产精品v日韩精品v欧美精品网站 | 91精品国产自产在线丝袜啪| 国产精品流白浆在线观看| 国产91在线精品| 亚洲一区久久| 福利一区和二区| 丝瓜av网站精品一区二区| 国产精久久久| 午夜一区在线| 精品视频97| 蜜桃传媒麻豆第一区在线观看 | 女人天堂亚洲aⅴ在线观看| 欧美成人久久| 亚洲在线观看| 97精品国产一区二区三区| 自拍日韩欧美| 激情黄产视频在线免费观看| 日韩黄色在线观看| 久久三级视频| 日产午夜精品一线二线三线| 妖精视频成人观看www| 精品亚洲a∨一区二区三区18| 99视频精品免费观看| 福利精品一区| 日本精品一区二区三区在线观看视频| 亚洲www啪成人一区二区| 国产日本久久| 视频一区中文字幕精品| 国产一区二区三区黄网站| 婷婷精品进入| 88xx成人免费观看视频库| 国产精品久久久久久久久久久久久久久 | 亚洲美洲欧洲综合国产一区| 狠狠躁少妇一区二区三区| 美腿丝袜在线亚洲一区| 三级久久三级久久久| 91成人精品| 欧美一区三区| 亚洲午夜黄色| 欧美久久精品一级c片| 欧美 日韩 国产精品免费观看| а√天堂8资源中文在线| 国产精品久久观看| 国产精品三上| 影音先锋久久精品| 国产日韩中文在线中文字幕| 国产精品一区三区在线观看| 国产欧美日韩| 日本欧美国产| 国产精品99免费看| 三级欧美在线一区| 中文字幕免费精品| 欧美亚洲综合视频| 国产欧美自拍一区| 国产一区二区三区免费在线| 日韩高清成人| 国产精品人人爽人人做我的可爱| 奶水喷射视频一区| 日韩avvvv在线播放| 精品精品国产三级a∨在线| 久久精品青草| 日韩av中文字幕一区二区三区| 麻豆精品一区二区综合av| 中文av在线全新| 日韩精品五月天| 精品99在线| 午夜在线视频观看日韩17c| 日本一区二区中文字幕| 欧美好骚综合网| 噜噜噜久久亚洲精品国产品小说| 日产欧产美韩系列久久99| 国产中文欧美日韩在线 | 国内精品伊人| 日韩中文欧美在线| 狠狠久久伊人| 蜜臀av亚洲一区中文字幕| 麻豆精品久久| 亚洲在线一区| 福利在线免费视频| 亚洲精品在线a| 国产不卡av一区二区| 亚洲一卡久久| 日本一二区不卡| 欧美一区影院| 蜜臀精品一区二区三区在线观看 | 亚洲欧洲日韩| 免费成人网www| 97视频热人人精品免费| 日韩欧美中文字幕在线视频| 成人av二区| 欧美a一区二区| 日韩av午夜在线观看| 在线观看亚洲精品福利片| 欧美日韩国产在线观看网站 | 国产精品久久久久毛片大屁完整版| 91成人精品视频| 免费观看不卡av| 婷婷综合五月| 91精品国产91久久久久久黑人| 国产成人在线中文字幕| 国产精品国码视频| 国产麻豆精品| 国产日韩免费| 日韩av资源网| 欧美一区不卡| 国产精品久久久久久久久久久久久久久| 石原莉奈一区二区三区在线观看| 在线综合欧美| 蜜桃久久久久久| 欧美日韩一区二区三区四区在线观看| 日本欧美在线看| 亚洲三级精品| 在线精品视频一区| 中文字幕日本一区| 国产精品xvideos88| 国产一区二区三区不卡av| 精品久久不卡| av资源亚洲| 亚洲香蕉网站| 日韩视频一区| 亚洲ww精品| 国产精品乱战久久久| 日韩成人综合| 亚洲影视一区| 美女毛片一区二区三区四区最新中文字幕亚洲 | 精品72久久久久中文字幕| 国产自产自拍视频在线观看| 在线视频观看日韩| 日韩不卡一区二区| 免费高潮视频95在线观看网站| 欧美va天堂在线| 国产日韩欧美三区| 亚洲激精日韩激精欧美精品| 日本va欧美va欧美va精品| 日韩一区二区三区免费播放| 亚洲深夜影院| 久久三级毛片| 水蜜桃久久夜色精品一区的特点 | 日韩欧美在线中字| 免费观看日韩电影| 国产一区二区三区亚洲| 美女91精品| 精品五月天堂| 亚洲精品va| 国产aⅴ精品一区二区三区久久 | 亚洲激情久久| 手机在线电影一区| 日韩高清不卡一区二区| 蜜臀国产一区| 亚洲精品美女| 欧美成人国产| 国产精品扒开腿做爽爽爽软件| 爽爽淫人综合网网站| 日韩免费一区| 麻豆91在线播放| 欧美伊人久久| **爰片久久毛片| 日韩精品中文字幕吗一区二区| 免费国产自久久久久三四区久久| 精品深夜福利视频| 美女久久久久久| 久久99蜜桃| 欧美日韩一区二区三区四区在线观看| 欧美 日韩 国产精品免费观看| 国产h片在线观看| 久久久精品区| 欧美天堂在线| 日韩欧美美女在线观看| 蜜桃一区二区三区在线观看| 亚洲专区在线| 亚洲免费专区| 国产亚洲高清在线观看| 欧美亚洲tv| 97视频热人人精品免费| 国产传媒在线| 91精品推荐|