日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

上周有個朋友問我說:

沈老師,我們有很多服務(wù)依賴第三方接口,他們的接口不穩(wěn)定,從而影響我們的服務(wù),有沒有什么方法避免?

今天和大家聊一聊這個問題。

首先,可以將第三方接口,收口到一個服務(wù)內(nèi)。

這樣,可以避免每個調(diào)用方都依賴于第三方服務(wù):

(1)解除調(diào)用方與第三方接口的耦合;

(2)當?shù)谌降慕涌谧儎訒r,只有服務(wù)需要修改,而不是所有調(diào)用方均修改;

此時,接口調(diào)用流程是什么樣的呢?

第三方服務(wù)掛了,如何保證服務(wù)不受影響?

 

如上圖1-4所述:

(1)業(yè)務(wù)調(diào)用方調(diào)用內(nèi)部service;

(2)內(nèi)部service跨公網(wǎng)調(diào)用第三方接口;

(3)第三方接口返回結(jié)果給內(nèi)部service;

(4)內(nèi)部service返回結(jié)果給業(yè)務(wù)調(diào)用方;

封裝了服務(wù)之后,還存在什么潛在的問題呢?

第三方服務(wù)掛了,如何保證服務(wù)不受影響?

 

內(nèi)部服務(wù)可能對上游業(yè)務(wù)提供了很多服務(wù)接口,當有一個接口跨公網(wǎng)第三方調(diào)用超時時,可能導(dǎo)致所有接口都不可用,即使大部分接口不依賴于跨公網(wǎng)第三方調(diào)用。

為什么會出現(xiàn)“一個第三方接口超時,所有接口都不可用”的情況呢?

內(nèi)部服務(wù)對業(yè)務(wù)方提供的N個接口,會共用服務(wù)容器內(nèi)的工作線程(假設(shè)有100個工作線程)。

假設(shè)這N個接口的某個接口跨公網(wǎng)依賴于第三方的接口,發(fā)生了網(wǎng)絡(luò)抖動,或者接口超時(不妨設(shè)超時時間為5秒)。

潛臺詞是,這個工作線程會被占用5秒鐘,然后超時返回業(yè)務(wù)調(diào)用方。

假設(shè)這個請求的吞吐量為20qps,言下之意,很短的時間內(nèi),所有的100個工作線程都會被卡在這個第三方超時等待上,而其他N-1個原本沒有問題的接口,也得不到工作線程處理。

如何來進行優(yōu)化呢?

常見的方案有三種:

(1)增大工作線程數(shù)(不根本解決問題);

(2)降低超時時間(不根本解決問題);

(3)垂直拆分,N個接口拆分成若干個服務(wù),使得在出問題時,被牽連的接口盡可能少(依舊不根本解決問題,難道一個服務(wù)只提供一個接口嗎?);

還能如何優(yōu)化呢?

異步代理法,是一種很常見的架構(gòu)實踐。

業(yè)務(wù)場景:通過OpenID實時獲取微信用戶基本信息。

解決方案:增加一個代理,向服務(wù)屏蔽究竟是“本地實時”還是“異步遠程”去獲取返回結(jié)果。

第三方服務(wù)掛了,如何保證服務(wù)不受影響?

 

本地實時流程如上圖1-5:

(1)業(yè)務(wù)調(diào)用方調(diào)用內(nèi)部service;

(2)內(nèi)部service調(diào)用異步代理service;

(3)異步代理service通過OpenID在本地拿取數(shù)據(jù);

(4)異步代理service將數(shù)據(jù)返回內(nèi)部service;

(5)內(nèi)部service返回結(jié)果給業(yè)務(wù)調(diào)用方;

遠程異步流程如上圖6-8粗箭頭的部分:

(6)異步代理service定期跨公網(wǎng)調(diào)用微信服務(wù);

(7)微信服務(wù)返回數(shù)據(jù);

(8)刷新本地數(shù)據(jù);

這種方案有什么優(yōu)缺點呢?

優(yōu)點:公網(wǎng)抖動,第三方接口超時,不影響內(nèi)部接口調(diào)用。

缺點:本地返回的不是最新數(shù)據(jù)(很多業(yè)務(wù)可以接受數(shù)據(jù)延時)。

畫外音:有時候,內(nèi)部service和異步代理service可以合成一個service。

還有其他的方法嗎?

第三方接口備份與切換,也是一種常見的實踐。

業(yè)務(wù)場景:調(diào)用第三方短信網(wǎng)關(guān),或者電子合同等。

解決方案:同時使用(或者備份)多個第三方服務(wù)。

第三方服務(wù)掛了,如何保證服務(wù)不受影響?

 

流程如上圖1-4:

(1)業(yè)務(wù)調(diào)用方調(diào)用內(nèi)部service;

(2)內(nèi)部service調(diào)用第一個三方接口;

(3)超時后,調(diào)用第二個備份服務(wù),未來都直接調(diào)用備份服務(wù),直到超時的服務(wù)恢復(fù);

(4)內(nèi)部service返回結(jié)果給業(yè)務(wù)調(diào)用方;

這種方案有什么優(yōu)缺點呢?

優(yōu)點:公網(wǎng)抖動,第三方接口超時,不影響內(nèi)部接口調(diào)用(初期少數(shù)幾個請求會超時)。

缺點:不是所有公網(wǎng)調(diào)用都能夠像短息網(wǎng)關(guān),電子合同服務(wù)一樣有備份接口的,像微信、支付寶等就只此一家。

還有其他的方法嗎?

異步調(diào)用法,也是一種實踐。

業(yè)務(wù)場景:本地結(jié)果,同步第三方服務(wù),例如用戶在58到家平臺下單,58到家平臺需要通知平臺商家為用戶提供服務(wù)。

解決方案:本地調(diào)用成功就返回成功,異步調(diào)用第三方接口同步數(shù)據(jù)(和異步代理有微小差別)。

第三方服務(wù)掛了,如何保證服務(wù)不受影響?

 

本地流程如上圖1-3:

(1)業(yè)務(wù)調(diào)用方調(diào)用內(nèi)部service;

(2)內(nèi)部service寫本地數(shù)據(jù);

(3)內(nèi)部service返回結(jié)果給業(yè)務(wù)調(diào)用方成功;

異步流程如上圖4-5粗箭頭的部分:

(4)異步service定期將本地數(shù)據(jù)取出(或者通知也行,實時性好);

(5)異步調(diào)用第三方接口同步數(shù)據(jù);

這種方案有什么優(yōu)缺點呢?

優(yōu)點:公網(wǎng)抖動,第三方接口超時,不影響內(nèi)部接口調(diào)用。

缺點:不是所有業(yè)務(wù)場景都可以異步同步數(shù)據(jù)。

總結(jié)

跨公網(wǎng)調(diào)用第三方,可能存在的問題

(1)公網(wǎng)抖動,第三方服務(wù)不穩(wěn)定,影響自身服務(wù);

(2)一個接口超時,占住工作線程,影響其他接口;

降低影響的優(yōu)化方案有:

(1)增大工作線程數(shù);

(2)降低超時時間;

(3)服務(wù)垂直拆分;

任何脫離業(yè)務(wù)的架構(gòu)方案都是耍流氓,可以結(jié)合業(yè)務(wù)實施方案:

(1)業(yè)務(wù)能接受舊數(shù)據(jù):讀取本地數(shù)據(jù),異步代理定期更新數(shù)據(jù);

(2)有多個第三方服務(wù)提供商:多個第三方互備;

(3)向第三方同步數(shù)據(jù):本地寫成功就算成功,異步向第三方同步數(shù)據(jù);

希望第三方的服務(wù)掛掉,不再影響大家的服務(wù)。

分享到:
標簽:第三方 服務(wù)
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定