1. 程式人生 > >餓了麼在API的實踐——構建API Everything框架

餓了麼在API的實踐——構建API Everything框架

內容來源:2018 年 01 月 05 日,餓了麼研發總監樑向東在“2018移動技術創新大會【行業技術落地案例專場】”上進行的《餓了麼API Everything的實踐》演講分享。IT 大咖說作為獨家視訊合作方,經主辦方和講者審閱授權釋出。

閱讀字數:2600 | 7分鐘閱讀

觀看完整嘉賓演講視訊及PPT,請點選: t.cn/EwkEljh

摘要

本次分享將詳細介紹餓了麼API Everything框架概念以及構成部分,對比傳統開發解決了那些問題,又有那些有待解決的問題。

什麼是API Everything

簡單來說就是後端服務通過API的形式對外暴露,作為前端訪問後端的中間層。API Everything會將SOA服務介面適配給外部各端進行訪問。

為什麼需要API Everything

我們在之前的開發中後端沒有分層,是直接在Web API層寫業務邏輯,甚至直接訪問資料庫。但是Web API的風格存在差異,不利於團隊間的溝通合作。

API文件也容易過時,不能及時反映程式碼的變更情況。另一個常見的問題就是前後端開發不同步,前端需要等待後端的API 介面開發完成。

產品技術方案原則

我們在構建API Everything框架時所確定的最基本原則是穩定性、效能、高可用以及容錯性。另外為了讓業務團隊能夠自行解決使用API Everything時遇到的問題,還將DevOps中心配置到框架中。

其他一些原則,包括自動化、程式碼即文件、使用者體驗以及功能需求。這其中的程式碼即文件可以將程式碼中的註釋給提取出來,使開發者無需另外建立API 文件。使用者體驗是面向開發人員準備的,讓開發過程能夠更加方便。

生命週期

除了對產品原則的考量外,我們還需要考慮整個API的生命週期。API Everything作為SOA與前端之間的中間層,它的生命週期一般由API開發、API管理、API閘道器、API運維這樣的流程構成。上圖詳細的羅列出了各個生命週期所需要考慮的細節,例如在API開發時就要著手考慮文件以及Mock的問題,API管理階段考慮訪問許可權以及限流、灰度問題。

產品規劃

基於對產品原則和生命週期的考慮,我們提出了完善的產品規劃。API Portal負責從程式碼中抽出文件、API Mock、訪問許可權、限流灰度以及API拼接剪裁,主要是對API的定義。

在定義完成後由Stargate Cluster來實現功能,包括鑑權認證、協議裝換、監控告警、部署擴容、API拼接裁剪。MockServer中包含的是針對Mock功能的實現,這裡不僅僅是Mock API還有Mock SOA,在SOA沒有準備好前,可以事先通過Mock SOA實現出來。最後的API Robot主要是一些測試相關的功能。

系統互動

前端通過Nginx訪問到達圈SOA服務,灰色表示正常訪問服務,紅色則是先通過query string訪問Mock。Stargatecluster會相對API Portal準備好的API定義,去呼叫SOA服務。API Robot則是消費API定義來進行API測試及迴歸測試。

提高效率 – Automation

  • API文件生成自動化:程式碼註釋和標註寫完,提交程式碼,就可以看到API文件。

  • API程式碼自動生成:通過標註將SOA介面自動對映成Http介面,並且生成程式碼。

  • API部署自動化:在SOA服務部署的時候,自動部署對應的Web API。

  • API Mock自動生成:根據API Model自動生成Mock資料,支援函式。

  • API自動監控告警:每個應用接入,自動進行全鏈路監控和告警。

StargateCluster技術架構

Stargate Cluster是執行在docker環境下的。圖中右上角的ELESS是餓了麼內部的釋出環境,當SOA環境釋出後會呼叫Stargate_core,然後進入MaxQ,再由Stargate運營管理服務去消費MaxQ,最後通知Stargatenodes進行分析處理。

Stargate Cluster基於Docker部署

圖中是Stargate Cluster的具體部署環境,流量先從F5api-xxx.ele.me到達Nginx,再通過upstream抵達Docker環境,最後Docker會將IP註冊到Nginx上。

部署環境

圖中是一些部署的log,包括部署訊息、是否部署成功以及變更等。

APIPortal – 自動化文件

這份文件相對前端比較友好,後端可能更喜歡直觀的資料展示。文件中會有一些討論、版本控制以及變更對比之類的資訊。

API -討論

在API完成提交到git中後,釋出系統會建立build。buid完成後就會自動化生成API文件。通過圖中的public APIs就可以通知相關人員API完成的訊息,接受到訊息的人員可以來到API介面進行討論留言,之後留言將被轉發給API開發人員。

MockServer流程

圖中的ServiceProvider需要依賴後面的服務,而通過Mock Server就可以Mock這些服務。

Mock Server – 自動解析

將相關的依賴放入Mock中後,Mock Server會自動解析依賴或者API對應架包所包含的方法,並且還能自主新增Mock case。

前後端分離

前面我們談論了StargateCluster、API Portal、Mock Server這些可以獨立使用的工具。而在前後端開發分離實踐中這些工具將會被很好的結合在一起。上圖就是整個開發過程的流程圖,能夠看到所有的部分都被有機的結合在一起。

應用實踐——配送範圍迭代

我們的前端基本上就是通過API Portal完成Mock相關的部分。後端原本是要寫Web controller,以及相應的測試,現在通過Stargate Cluster可以自動化生成Web API。之前開發中經常會出現部分功能留待聯調期間進行開發的情況,以至於聯調時間變長。而現在前後端是獨自進行開發的,聯調時間明顯減少。

問題解決了?

通過API Everything框架看起來是解決了所有的問題,但是其實還存在不足。

可以自動化迴歸測試嗎?

我們設想中API Robot會錄製線上流量,然後進行回放。錄製下來的流量會被回放給到新上線的系統,來測試新系統是否有問題。

而要完成迴歸測試需要錄製很多東西,包括SOA1和SOA2依賴、第三方應用、Redis還有Database。使用者端的至下而上請求同樣需要根據時間點錄製,再進行整合分析抽取出合適的順序,也就是Case。這整個過程可謂相當複雜。

今天的分享就到這裡,謝謝大家!