首頁>Club>
10
回覆列表
  • 1 # 架構之美

    看你的介面涉及哪些方面,比如資料庫,快取,或者依賴第三方介面,先從自身程式碼最佳化起,然後一步步最佳化下去,怎麼減少變數,比如資料庫掛了介面能不能正常,快取掛了介面邏輯怎麼處理,第三方介面老超時不穩定程式碼應該怎麼走。

  • 2 # 網路圈

    在日常的開發工作中,API隨處可見,現在市面上也有專門的資料類公司提供各種各樣的API服務。API的穩定性直接關係到應用的穩定,那該如何提高API介面的穩定性呢?下面我來逐步和大家講解一下以供參考。

    API是什麼?

    API是應用程式程式設計介面的簡稱,其實可以理解為是某種服務的一種封裝形式,透過API就可以獲得某種服務而不需要了解其內部實現原理,基本上每款軟體應用都有自己的API,供內部或外部呼叫。

    API本身也是屬於應用軟體(開發人員透過程式語言開發的),它的表現形式有很多種,主要的有:

    RPC

    SOAP

    RESTful

    API的穩定性會受哪些因素影響?

    API效能會受到很多因素影響的,比如說:

    API所在伺服器的配置直接影響了API的效能(如:併發、響應速度);

    API被呼叫的次數;

    API受到駭客攻擊;

    不同網路環境下訪問API時的速度存在差異等。

    如何提高API介面的穩定性?

    1、API的高可用方案

    什麼是高可用呢?高可用是指透過一些技術手段,避免服務出現異常、或減少異常導致的服務不可用時間。

    API部署時也需要考慮高可用,我們推薦的方案是:

    API多節點部署(同一個API服務部署多個),然後透過負載均衡進行分流;

    API作好容錯機制;

    做好限流,避免某使用者訪問API次數過多導致API負載較高;

    必要的熔斷機制,如果API存在多級呼叫的情況,那熔斷機制就很重要了,因為當某個API不可用時可能會導致請求阻塞,嚴重時會影響整臺伺服器的穩定;

    做好許可權認證,必須是合法使用者才能訪問API介面。

    2、API的效能最佳化

    API其實也是一種應用,同樣是由開發人員開發的,因為API充當的是服務的核心,所以API的效能尤為重要,我們在開發API時需要注意以下幾點:

    API需要做好解耦,如果耦合度過高容易導致API效能下降、出現問題時不好定位;

    API涉及到資料庫操作時,SQL語句要做好最佳化,避免SQL查詢效率低下;

    對於及時性要求不高的資料,可在API層做一定快取處理;

    3、API訪問速度最佳化

    如果API是公司內部使用,建議以內網IP形式訪問API服務;如果API也對外提供服務,可考慮將伺服器部署在BGP機房,如果機房不在BGP機房建議在API層上方走CDN加速。

  • 3 # 會點程式碼的大叔

    這個問題我就結合著自己的專案來說一說。

    我們現在的專案是沒有前臺頁面的,只對外提供介面服務,甚至我們專案都沒有交易類的服務,都是單純的查詢類服務。專案最初的建設目標就是為了緩解核心系統資料查詢的壓力,或者你們可以把我們專案看成幾個核心專案的快取層(因為有多個核心繫統,我們專案還可以提供跨系統的查詢,這一點也很重要)。

    打鐵還需自身硬,要提高介面的穩定性和響應速度,首先程式碼要寫好:

    我們專案採用了關係型資料庫做中間庫,資料經過加工後落地到MongoDB和Redis,對外的提供的服務,只會查詢MongoDB和Redis;

    資料加工很重要,關係型資料庫中需要多表關聯的查詢,現在只查詢MongoDB的一個collection就可以了。(因為要做資料加工,所以資料和生產庫比,有一定的延遲,這個一定要看業務場景是否允許有延遲);

    MongoDB採用副本集+分片的方式部署,副本集保證資料庫的穩定性,掛掉一臺,還有其他幾臺可以使用;分片保證資料量增大後,可以平行擴容。(現在資料量大概在億級,個位數);

    服務部署還採用比較傳統的方式,N臺伺服器前面掛負載均衡;上各種監控,隨時關注介面呼叫和資源使用情況;

    嚴格的引數校驗,避免做無用的查詢;

    大原則就是:【能查快取就不要查資料庫,能不查的話就更好】

    除了自身架構之外,還有些非自身的控制:

    內部系統在呼叫介面的時候,主要透過網路許可權的控制,除此之外不做任何的限制,包括鑑權;

    如果是網際網路端的接入,還是需要依賴閘道器;由閘道器做鑑權、限流、降級、熔斷等;

    建議呼叫方設定合理的超時時間,並有合理的重試機制;

    如果可以的話,最好可以採用非同步呼叫的機制;

    如果介面要依賴於另外系統的介面,也需要額外的做一些考慮(依賴的介面返回慢或者報錯,自己的介面肯定會有問題);比如資料時效性要求不高的話,可以考慮把對方介面返回的資料快取下來(設定失效時間,保證一段時間後能把最新的資料重新整理回來),但如果資料時效性要求非常高,可以考慮使用熔斷;不過說實話,還沒見過誰敢用熔斷的....

  • 中秋節和大豐收的關聯?
  • 遇到心動的男神女神怎樣的表白方式能夠讓對方倒追你呢?