日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Re:从 0 开始的微服务架构--(三)微服务架构 API 的开发与治理--转

發布時間:2025/4/5 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Re:从 0 开始的微服务架构--(三)微服务架构 API 的开发与治理--转 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文來自:聊聊架構公眾號

前面的文章中有說到微服務的通信方式,Martin Folwer 先生在他對微服務的定義中也提到“每個服務運行在其獨立的進程中,服務與服務間采用 輕量級的通信機制 互相協作(通常是基于 HTTP 協議的 RESTful API)”。

那么,在各個微服務之間具體怎么進行輕量級的通信呢?這篇文章就來聊聊微服務 API 開發及治理的幾個方面。

首先需要解釋一下,標題中的“內網環境中 的 API”指的是提供給內網里的其它微服務調用的 API。與其相對應的是“開放給互聯網 用戶調用的 API”,它們的開發方法大體相同,但治理方法卻不太一樣。

例如開放給互聯網用戶調用的 API 需要在 API 網關上加上授權、鑒權、限流、限并發、統計、計費等等功能。

本篇文章分享的是內網環境中的 API 開發及治理。

API 開發

API 開發,首先考慮的就是該用什么樣的協議,是 HTTP API 還是 RPC?

我們先來介紹一下這兩種 API 類型:

?HTTP API

HTTP API 指的是簡單的基于 HTTP 協議的 API,具體的例子就是 Spring MVC 的 Controller,例如?

http://127.0.0.1/helloworld/myapi.do”

?RPC

RPC 就是 Remote Procedure Call,中文名遠程過程調用,在 API 調用的場景下,大多指的是基于 Socket 通信方法的遠程調用(當然,我們也可以使用 HTTP 協議來實現 RPC 調用,例如 gRPC)。Json-RPC 和 Xml-RPC 指的是使用 Json 或 Xml 作為文本格式的方式傳輸命令和數據。

那么回到剛才那個問題,到底要使用 HTTP API 還是 RPC 呢?我們之所要對比 HTTP API 和 RPC,主要是因為大家都知道 HTTP 簡單,而基于 Socket 的 RPC 性能更好

這個問題我們糾結了很久,直到后來,想明白了下面兩件事,最終決定在絕大部分場景中使用 HTTP API。

HTTP API 的性能足以支撐大多數項目

通常來講(根據資料),算上序列化的時間,RPC 協議的吞吐量是 HTTP 性能 兩倍(沒有親測),例如 Protobuf、Thrift、Kyro、Dubbo 等等。

這里面,又以 Thrift 的性能最高。具體的性能測試報告可以參考《RPC 框架性能基本比較測試》。

我們團隊在結合自身技術棧、成本、穩定性、易用性、可維護性、業務場景等等因素綜合考慮后,覺得我們面臨的大多數場景中,HTTP 和 RPC 的性能差別并不是主要問題

再加上下圖所示的 HTTP 性能測試結果作為佐證,我們完全可以采用 HTTP API 的方式來進行微服務 API 開發。

再者,當業務發展到一定的程度,如果某些業務功能的性能壓力變大時,我們還是可以使用 RPC 小范圍地進行改造。這也是符合敏捷思想的一個決定。

下圖是對 helloworld 頁面進行 10000 次連續請求的測試結果,總耗時 1.504 秒,平均每個請求耗時 0.15 毫秒。

測試環境:原生 Tomcat7(沒有任何優化)運行在本地虛擬機上

下面是對 helloworld 頁面以 100 并發數進行 10 萬次請求的測試結果,平均每個請求耗時 11.9 毫秒。

測試環境:原生 Tomcat7(沒有任何優化)運行在本地虛擬機上

所以,按照上面的測試結果,HTTP API 方式的性能完全足以支撐絕大多數的微服務 API 開發。讓我們把 RPC 方式留給那些可能出現雙十一業務量的大型互聯網公司去玩

RESTful API 適用于開放 API 的場景

這是另一個折磨人的問題。相對于 HTTP API,RESTful API 在 HTTP API 的基礎上增加了一些非常抽象晦澀的概念,例如資源(Resource)、表述(REpresentation)、狀態轉移(State Transfer)、統一接口(Uniform Interface)……。

在經歷了一次又一次的折磨,例如“login/logout 是什么 RESTful 方法?”、“批量刪除該怎么實現?”、“RESTful 的 resource 究竟該怎么定義?”之后,越來越感覺這是一個形而上學的問題,太過于抽像。

我們不該盲從于時髦的技術,需要加上技術人的基于自身情況的理性思考。所以,RESTful 雖好,但不是我們團隊的菜。

再者,即使團隊中有些人可以理解并正確地實踐,也很難或者說不可能讓整個團隊來正確地實踐這樣一種方法。

所以,我們在一番掙扎后,選擇了 HTTP API 方式,原來怎么開發,現在還是怎么開發,把主要精力放到了 API 的監控和治理上面。

這里推薦大家看看知乎上的這篇討論 《WEB 開發中,使用 JSON-RPC 好,還是 RESTful API 好?》,幾位大神講得都挺好。

[https://www.zhihu.com/question/28570307]

API 治理API 文檔

API 存在的意義在于有人調用它,如果調用方在調用 API 的時候很麻煩,甚至不能正確地調用,那么團隊內部及團隊之間的溝通成本及配合程度就會大受影響。

我們是通過文檔來溝通的,項目開始的時候還好,但隨著時間的推移,文檔的更新變得不是那么及時(這其實是個自我辯解的說法,事實是大部分情況下文檔都不更新了),API 變更時,也不容易找出哪些模塊調用了這個 API。

所以,得先解決 文檔不及時更新 的問題。雖然我們可以通過流程管理的方式來強制大家更新文檔,但這對于開發人員來說,顯然是不夠科學或人性化的,因為變更一個 API,就要在兩個地方進行修改,一是 API 代碼,二是 API 文檔,程序員的思維就得在代碼和文檔之間不斷切換,工作效率必然受影響。

我們就想,能不能只需要在同一個地方修改,如果能做到,API 文檔的更新就沒有那么麻煩了,于人于已都是好事。

經過調研,我們選擇使用 Swagger 來編寫文檔,按照 Swagger 的規范,在 API 上加一些描述性的 Annotation 就可以了。

通過以上的 Annotation,將自動生成以下在線 API 文檔。

調用方可以在 API 文檔界面填入參數并點擊“Try it out!”按鈕嘗試調用這個 API。這樣,在沒有 API 提供方支持的情況下,即可以自行完成絕大部分的 API 調用,是不是很爽?

調用鏈管理

API 開發出來了,API 文檔也寫好了,接下來就是被調用了。前篇文章講到,通過 Spring Cloud 的 Eureka + Ribbon + Zuul 可以很方便地調用到這些 API。

那么,如何來追蹤 API 被誰調用了,調用是否出錯及出錯原因,調用鏈路里各個 API 的性能怎么樣,是不是存在僵尸 API……這些都是關于 API 治理的問題。

實現這個目標,有一個比較取巧的方法,就是在 Ribbon 的客戶端里做點文章,在調用 API 之前記錄一下開始時間,API 調用返回后,記錄 API 調用耗時、調用狀態,如果有錯則記錄一下錯誤原因。

如果還想追蹤調用鏈,可以在請求頭里加上一個調用鏈 ID,這樣就來把調用關系都串連起來。

下邊是我們自己研發的調用鏈管理組件(DCTrace)的幾個效果圖:

查看微服務之間的調用關系,調用性能

查看調用失敗原因

圖形化查看調用關系,太亂 ,下次迭代改進一下 [攤手]

站在技術管理者的角度,可以從調用鏈里看出來,哪些模塊之間發生了不正當關系 [噗嗤];哪些模塊之間本該有關系的,事實卻沒有;通過對比 Swagger 和調用鏈的 API 清單,找出僵尸 API……

API 測試

使用微服務架構后,API 是每個微服務的 唯一能力出口。由于互聯網行業的快速發展,軟件需求變更變得越來越頻繁,迭代升級的速度變得越來越快。

對于提供方來說,需要保證變更和迭代的過程中,不影響之前承諾的功能(包括正確性、穩定性和性能等)。

對于調用方來說,同樣需要確保自身依賴的 API 能正常使用,不能因為其它模塊的錯誤而導致自身業務受到影響(包括正確性、穩定性和性能等)。

畢竟,從組織角度來看,系統出錯就是出錯,不管原因是自身導致的還是服務提供方導致的,所以 服務調用方就需要對服務提供方進行管理

這也就是前幾年契約測試(Pact)方法大行其道的原因。有興趣的朋友可以去看看這種測試方法。

對于 API 白盒測試,推薦使用基于 Java 的 REST-Assured 測試框架,用起來特別方便。

[https://github.com/rest-assured/rest-assured]

更進一步,基于 HTTP 協議、JSON/XML 報文的規范性,完全可以開發一個 API 測試小工具(暫且叫它 小鷹 吧)來替換 REST-Assured。我們也暫未實踐,只是覺得會很有用,供大家參考。

基礎步驟是:

  • 服務提供方開發 API,并正確書寫 Swagger 文檔。

  • 服務提供方在小鷹的界面上選擇需要測試的 API,并填寫測試參數。(API 清單和參數都可以通過調用 Swagger 的 API 獲取)

  • 服務調用方根據自已的理解,也將對自己有用的服務方提供的 API 配置到小鷹上。

  • 小鷹 7*24 小時為服務提供方和調用方巡視這些 API,并在異常出現時發送警報。

  • 總 ? 結

    所以,對于微服務 API 開發,我們

    • 使用最常見的技術(例如 Spring MVC)進行 API 開發

    • 使用 REST-Assured(以及未來的 小鷹)進行測試

    • 使用 Swagger 來管理 API 文檔

    • 使用自研的 DCTrace 進行調用鏈管理

    轉載于:https://www.cnblogs.com/davidwang456/p/7419647.html

    總結

    以上是生活随笔為你收集整理的Re:从 0 开始的微服务架构--(三)微服务架构 API 的开发与治理--转的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲视频六区 | 日韩视频一区二区三区 | jzjzjz欧美丰满少妇 | 欧美人与性动交α欧美精品 | 久久精品黄 | 亚洲一区二区天堂 | 激情小说专区 | 欧美一区二区三区成人精品 | 男女啪啪免费看 | 无码人妻aⅴ一区二区三区69岛 | a级在线播放 | 精品人妻一区二区三区视频 | 男女野外做受全过程 | 亚洲一级在线观看 | 麻豆性生活 | 久久国产剧情 | 婷婷欧美 | 国产主播福利在线 | 一区二区三区四区精品视频 | 8x8ⅹ成人永久免费视频 | 国产哺乳奶水91在线播放 | 六月丁香在线视频 | 欧美成人乱码一二三四区免费 | 精品国产aⅴ一区二区三区四川人 | 色哟哟在线播放 | 国内国产精品天干天干 | www.色亚洲| 18无套直看片红桃 | 91国内精品久久久久 | 亚洲黑丝在线 | 波多野结衣中文字幕一区二区 | 人人插人人爽 | 亚色成人 | 亚洲成人一级片 | 三级全黄做爰龚玥菲在线 | 国产又粗又黄又爽又硬的视频 | 久久精品亚洲a | 96视频在线观看 | 国产主播自拍av | 黄色仓库av | 精品熟妇一区二区三区 | 婷婷综合亚洲 | 免费看黄色片的网站 | 亚洲 激情 | 亚洲午夜精品在线观看 | 操少妇视频 | 欧美xxxx少妇 | 激情小说在线观看 | 亚洲妇熟xx妇色黄蜜桃 | 中文字幕 欧美 日韩 | 黄色avv | 91免费网址 | 师生出轨h灌满了1v1 | 波多野结衣在线观看视频 | www四虎精品视频免费网站 | 亚洲av无码国产精品永久一区 | 成人h视频在线观看 | 亚洲中文字幕无码一区二区三区 | 欧美日韩亚洲激情 | 中文字幕乱码人妻二区三区 | 久久大尺度 | 天天爽夜夜爽夜夜爽精品视频 | 欧美日韩一二三区 | 依人综合| 欧美成人三级在线 | 一本久久综合亚洲鲁鲁五月天 | 亚洲欧美日韩国产一区二区三区 | 熟女丝袜一区 | 男女乱淫视频 | 国产在线精品成人欧美 | 美国成人av | 波多野结衣欧美 | 中国在线观看免费视频 | 小毛片在线观看 | 免费观看黄色网 | 日本在线h | 男裸体无遮挡网站 | 三级影片在线免费观看 | 国产福利视频在线观看 | 在线看成人 | 日韩精品2| www.天天干| 奇米影视四色在线 | 日本欧美久久久久免费播放网 | 色www.| 日产精品久久久久久久 | 天天综合网在线观看 | 国产在线青青草 | 日本不卡视频一区 | 欧美a级在线免费观看 | 最好看的2019年中文在线观看 | 精品国产乱码久久久久久久软件 | av资源在线 | 午夜色影院 | 日本伦理在线 | 国内精品视频一区二区三区 | 一区二区三区精品视频 | 中文字幕国产精品 | 中国少妇做爰全过程毛片 |