欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

go語言rpc路由 golang rpc框架

GoLang -- gRPC框架四大服務(wù)

在 gRPC 里客戶端應(yīng)用可以像調(diào)用本地對象一樣直接調(diào)用另一臺不同的機(jī)器上服務(wù)端 應(yīng)用的方法,使得您能夠更容易地創(chuàng)建分布式應(yīng)用和服務(wù)。與許多 RPC 系統(tǒng)類似,gRPC 也是基于以下理念:定義一個服務(wù),指定其能夠被遠(yuǎn)程調(diào)用的方法(包含參數(shù)和返回類型)。在服務(wù)端實現(xiàn)這個接口,并運(yùn)行一個 gRPC 服務(wù)器來處理客戶端調(diào)用。在客戶端擁有一個存根能夠像服務(wù)端一樣的方法。

成都創(chuàng)新互聯(lián)成立與2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元興山做網(wǎng)站,已為上家服務(wù),為興山各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220

gRPC 客戶端和服務(wù)端可以在多種環(huán)境中運(yùn)行和交互 - 從 google 內(nèi)部的服務(wù)器到你自己的筆記本,并且可以用任何 gRPC 支持的語言來編寫。所以,你可以很容易地用 Java 創(chuàng)建一個 gRPC 服務(wù)端,用 Go、Python、Ruby 來創(chuàng)建客戶端。此外,Google 最新 API 將有 gRPC 版本的接口,使你很容易地將 Google 的功能集成到你的應(yīng)用里。

gRPC 默認(rèn)使用 protocol buffers,這是 Google 開源的一套成熟的結(jié)構(gòu)數(shù)據(jù)序列化機(jī)制(當(dāng)然也可以使用其他數(shù)據(jù)格式如 JSON)。名叫 proto3 的新風(fēng)格的 protocol buffers,它擁有輕量簡化的語法、一些有用的新功能,并且支持更多新語言。當(dāng)前針對 Java 和 C++ 發(fā)布了 beta 版本,針對 JavaNano(即 Android Java)發(fā)布 alpha 版本,在protocol buffers Github 源碼庫里有 Ruby 支持, 在golang/protobuf Github 源碼庫里還有針對 Go 語言的生成器, 對更多語言的支持正在開發(fā)中。

有了 gRPC, 我們可以一次性的在一個 .proto 文件中定義服務(wù)并使用任何支持它的語言去實現(xiàn)客戶端和服務(wù)器,反過來,它們可以在各種環(huán)境中,從Google的服務(wù)器到你自己的平板電腦—— gRPC 幫你解決了不同語言及環(huán)境間通信的復(fù)雜性.使用 protocol buffers 還能獲得其他好處,包括高效的序列號,簡單的 IDL 以及容易進(jìn)行接口更新。

現(xiàn)在讓我們來仔細(xì)了解一下當(dāng) gRPC 客戶端調(diào)用 gRPC 服務(wù)端的方法時到底發(fā)生了什么。我們不究其實現(xiàn)細(xì)節(jié),關(guān)于實現(xiàn)細(xì)節(jié)的部分,你可以在我們的特定語言頁面里找到更為詳盡的內(nèi)容。

首先我們來了解一下最簡單的 RPC 形式:客戶端發(fā)出單個請求,獲得單個響應(yīng)。

服務(wù)端流式 RPC 除了在得到客戶端請求信息后發(fā)送回一個應(yīng)答流之外,與我們的簡單例子一樣。在發(fā)送完所有應(yīng)答后,服務(wù)端的狀態(tài)詳情(狀態(tài)碼和可選的狀態(tài)信息)和可選的跟蹤元數(shù)據(jù)被發(fā)送回客戶端,以此來完成服務(wù)端的工作。客戶端在接收到所有服務(wù)端的應(yīng)答后也完成了工作。

客戶端流式 RPC 也基本與我們的簡單例子一樣,區(qū)別在于客戶端通過發(fā)送一個請求流給服務(wù)端,取代了原先發(fā)送的單個請求。服務(wù)端通常(但并不必須)會在接收到客戶端所有的請求后發(fā)送回一個應(yīng)答,其中附帶有它的狀態(tài)詳情和可選的跟蹤數(shù)據(jù)。

雙向流式 RPC ,調(diào)用由客戶端調(diào)用方法來初始化,而服務(wù)端則接收到客戶端的元數(shù)據(jù),方法名和截止時間。服務(wù)端可以選擇發(fā)送回它的初始元數(shù)據(jù)或等待客戶端發(fā)送請求。 下一步怎樣發(fā)展取決于應(yīng)用,因為客戶端和服務(wù)端能在任意順序上讀寫 - 這些流的操作是完全獨(dú)立的。例如服務(wù)端可以一直等直到它接收到所有客戶端的消息才寫應(yīng)答,或者服務(wù)端和客戶端可以像"乒乓球"一樣:服務(wù)端后得到一個請求就回送一個應(yīng)答,接著客戶端根據(jù)應(yīng)答來發(fā)送另一個請求,以此類推。

通過運(yùn)行下面的命令克隆并安裝grpc-go代碼庫:

下載protobuf源碼包

安裝golang-protobuf

第一步使用 protocol buffers去定義 gRPC service 和方法 request 以及 response 的類型。

要定義一個服務(wù),必須在.proto 文件中指定 service:

然后在服務(wù)中定義 rpc 方法,指定請求的和響應(yīng)類型,gRPC 允許定義4種類型的 service 方法。

服務(wù).proto文件如下所示:

Go - Micro微服務(wù)框架實踐 - API(十三)

Micro的api就是api網(wǎng)關(guān)

API參考了 API網(wǎng)關(guān)模式 為服務(wù)提供了一個單一的公共入口。基于服務(wù)發(fā)現(xiàn),使得micro api可以提供具備http及動態(tài)路由的服務(wù)。

Micro的API基于HTTP協(xié)議。請求的API接口通過HTTP協(xié)議訪問,并且路由是基于服務(wù)發(fā)現(xiàn)機(jī)制向下轉(zhuǎn)發(fā)的。 Micro API在 go-micro 之上開發(fā),所以它集成了服務(wù)發(fā)現(xiàn)、負(fù)載均衡、編碼及基于RPC的通信。

因為micro api內(nèi)部使用了go-micro,所以它自身也是可插拔的。 參考 go-plugins 了解對gRPC、kubernetes、etcd、nats、及rabbitmq等支持。另外,api也使用了 go-api ,這樣,接口handler也是可以配置的。

ACME( Automatic Certificate Management Environment)是由 Let’s Encrypt 制定的安全協(xié)議。

可以選擇是否配置白名單

API服務(wù)支持TLS證書

API使用帶分隔符的命名空間來在邏輯上區(qū)分后臺服務(wù)及公開的服務(wù)。命名空間及http請求路徑會用于解析服務(wù)名與方法,比如 GET /foo HTTP/1.1 會被路由到 go.micro.api.foo 服務(wù)上。

API默認(rèn)的命名空間是 go.micro.api ,當(dāng)然,也可以修改:

我們演示一個3層的服務(wù)架構(gòu):

完整示例可以參考: examples/greeter

先決條件:我們使用Consul作為默認(rèn)的服務(wù)發(fā)現(xiàn),所以請先確定它已經(jīng)安裝好了,并且已經(jīng)運(yùn)行,比如執(zhí)行 consul agent -dev 這樣子方式運(yùn)行。

向micro api發(fā)起http請求

HTTP請求的路徑 /greeter/say/hello 會被路由到服務(wù) go.micro.api.greeter 的方法 Say.Hello 上。

繞開api服務(wù)并且直接通過rpc調(diào)用:

使用JSON的方式執(zhí)行同一請求:

micro api提供下面類型的http api接口

請看下面的例子

Handler負(fù)責(zé)持有并管理HTTP請求路由。

默認(rèn)的handler使用從注冊中心獲取的端口元數(shù)據(jù)來決定指向服務(wù)的路由,如果路由不匹配,就會回退到使用”rpc” hander。在注冊時,可以通過 go-api 來配置路由。

API有如下方法可以配置請求handler:

通過 /rpc 入口可以繞開handler處理器。

API處理器接收任何的HTTP請求,并且向前轉(zhuǎn)發(fā)指定格式的RPC請求。

RPC處理器接收json或protobuf格式的HTTP POST請求,然后向前轉(zhuǎn)成RPC請求。

代理Handler其實是內(nèi)置在服務(wù)發(fā)現(xiàn)中的反向代理服務(wù)。

事件處理器使用go-micro的broker代理接收http請求并把請求作為消息傳到消息總線上。

Web處理器是,它是內(nèi)置在服務(wù)發(fā)現(xiàn)中的HTTP反向代理服務(wù),支持web socket。

/rpc 端點(diǎn)允許繞過主handler,然后與任何服務(wù)直接會話。

示例:

更多信息查看可運(yùn)行的示例: github.com/micro/examples/api

解析器,Micro使用命名空間與HTTP請求路徑來動態(tài)路由到具體的服務(wù)。

API命名的空間是 go.micro.api 。可以通過指令 --namespace 或者環(huán)境變量 MICRO_NAMESPACE= 設(shè)置命名空間。

下面說一下解析器是如何使用的:

RPC解析器示例中的RPC服務(wù)有名稱與方法,分別是 go.micro.api.greeter , Greeter.Hello 。

URL會被解析成以下幾部分:

帶版本號的API URL也可以很容易定位到具體的服務(wù):

代理解析器只處理服務(wù)名,所以處理方案和RPC解析器有點(diǎn)不太一樣。

URL會被解析成以下幾部分:

go語言實現(xiàn)一個簡單的簡單網(wǎng)關(guān)

網(wǎng)關(guān)=反向代理+負(fù)載均衡+各種策略,技術(shù)實現(xiàn)也有多種多樣,有基于 nginx 使用 lua 的實現(xiàn),比如 openresty、kong;也有基于 zuul 的通用網(wǎng)關(guān);還有就是 golang 的網(wǎng)關(guān),比如 tyk。

這篇文章主要是講如何基于 golang 實現(xiàn)一個簡單的網(wǎng)關(guān)。

轉(zhuǎn)自: troy.wang/docs/golang/posts/golang-gateway/

整理:go語言鐘文文檔:

啟動兩個后端 web 服務(wù)(代碼)

這里使用命令行工具進(jìn)行測試

具體代碼

直接使用基礎(chǔ)庫 httputil 提供的NewSingleHostReverseProxy即可,返回的reverseProxy對象實現(xiàn)了serveHttp方法,因此可以直接作為 handler。

具體代碼

director中定義回調(diào)函數(shù),入?yún)?http.Request,決定如何構(gòu)造向后端的請求,比如 host 是否向后傳遞,是否進(jìn)行 url 重寫,對于 header 的處理,后端 target 的選擇等,都可以在這里完成。

director在這里具體做了:

modifyResponse中定義回調(diào)函數(shù),入?yún)?http.Response,用于修改響應(yīng)的信息,比如響應(yīng)的 Body,響應(yīng)的 Header 等信息。

最終依舊是返回一個ReverseProxy,然后將這個對象作為 handler 傳入即可。

參考 2.2 中的NewSingleHostReverseProxy,只需要實現(xiàn)一個類似的、支持多 targets 的方法即可,具體實現(xiàn)見后面。

作為一個網(wǎng)關(guān)服務(wù),在上面 2.3 的基礎(chǔ)上,需要支持必要的負(fù)載均衡策略,比如:

隨便 random 一個整數(shù)作為索引,然后取對應(yīng)的地址即可,實現(xiàn)比較簡單。

具體代碼

使用curIndex進(jìn)行累加計數(shù),一旦超過 rss 數(shù)組的長度,則重置。

具體代碼

輪詢帶權(quán)重,如果使用計數(shù)遞減的方式,如果權(quán)重是5,1,1那么后端 rs 依次為a,a,a,a,a,b,c,a,a,a,a…,其中 a 后端會瞬間壓力過大;參考 nginx 內(nèi)部的加權(quán)輪詢,或者應(yīng)該稱之為平滑加權(quán)輪詢,思路是:

后端真實節(jié)點(diǎn)包含三個權(quán)重:

操作步驟:

具體代碼

一致性 hash 算法,主要是用于分布式 cache 熱點(diǎn)/命中問題;這里用于基于某 key 的 hash 值,路由到固定后端,但是只能是基本滿足流量綁定,一旦后端目標(biāo)節(jié)點(diǎn)故障,會自動平移到環(huán)上最近的那么個節(jié)點(diǎn)。

實現(xiàn):

具體代碼

每一種不同的負(fù)載均衡算法,只需要實現(xiàn)添加以及獲取的接口即可。

然后使用工廠方法,根據(jù)傳入的參數(shù),決定使用哪種負(fù)載均衡策略。

具體代碼

作為網(wǎng)關(guān),中間件必不可少,這類包括請求響應(yīng)的模式,一般稱作洋蔥模式,每一層都是中間件,一層層進(jìn)去,然后一層層出來。

中間件的實現(xiàn)一般有兩種,一種是使用數(shù)組,然后配合 index 計數(shù);一種是鏈?zhǔn)秸{(diào)用。

具體代碼

網(wǎng)頁題目:go語言rpc路由 golang rpc框架
URL分享:http://chinadenli.net/article0/hepdio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站企業(yè)網(wǎng)站制作電子商務(wù)虛擬主機(jī)全網(wǎng)營銷推廣自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)