一尚粘、故事背景
最近負責(zé)的業(yè)務(wù)由于三方配額不夠郎嫁,需要購買配額祈噪。問題來了,買多少配額合適盔腔?下圖是目前的調(diào)用關(guān)系铲觉。由于是關(guān)于IOT的業(yè)務(wù)吓坚,其中老的實現(xiàn)是設(shè)備直接調(diào)用三方接口(安卓設(shè)備調(diào)用Http接口)灯荧。后來由于長遠規(guī)劃,逐步增加一層「平臺服務(wù)」链烈。新版本的設(shè)備調(diào)用「平臺服務(wù)」强衡,由后者調(diào)用「三方接口」。
已知:
- 「三方接口」一段時間的配額內(nèi)的調(diào)用次數(shù)統(tǒng)計码荔。小時漩勤、天、20分鐘等等缩搅。
- 「平臺服務(wù)」統(tǒng)計的新版本設(shè)備調(diào)用次數(shù)統(tǒng)計越败,以及由于配額超限導(dǎo)致的失敗次數(shù)。
- 「平臺服務(wù)」調(diào)用「三方接口」的平均耗時硼瓣。
- 當前購買的并發(fā)數(shù)配額究飞。
求:
- 高峰期實際一小時調(diào)用量。
- 實際高峰期需要并發(fā)配額堂鲤,從而知道還需要買多少亿傅。
二、計算所需配額
<1> 高峰期實際一小時調(diào)用量
要求「高峰期實際一小時調(diào)用量」瘟栖,如果同一時刻調(diào)用失敗率全局相同袱蜡,就很容易得出,即:
高峰期實際一小時調(diào)用量 = 這一小時的配額內(nèi)調(diào)用量 / (1 - 這一小時的超配額的失敗率)
「平臺服務(wù)」統(tǒng)計的高峰一小時的失敗率是否能代表同一小時「舊版本設(shè)備」的失敗率呢慢宗?
響應(yīng)超過配額的是「三方接口」端坪蚁,站在這個角度敏晤,它并沒有對這兩個地方來的調(diào)用做區(qū)分,所以應(yīng)該失敗率是全局的译打。
<2> 實際高峰期需要并發(fā)配額
這里對于2個概念重新再回顧下:
QPS:對一個特定的請求,服務(wù)端每秒鐘可以處理的次數(shù)韵洋;
并發(fā):服務(wù)端可以同時處理的請求次數(shù)食拜。如果一個請求服務(wù)端還在處理中,就會占用一個并發(fā)惑惶。
一個并發(fā)的QPS = 1秒 / 接口平均耗時
實際需要總QPS= 實際需要并發(fā)數(shù) * 一個并發(fā)的QPS
高峰期實際一小時調(diào)用量 = 實際需要總QPS * 3600秒
聯(lián)立上面三個式子,可以求出「實際需要并發(fā)數(shù)」,其余參數(shù)都可直接或者間接得到千绪。
三、還沒完
本以為根據(jù)上面得到的配額買了加上去就大功告成瑞妇。發(fā)現(xiàn)失敗率下降不少控漠,但是仍然還是存在偶翅。考慮到上面計算的配額是根據(jù)一小時的調(diào)用統(tǒng)計進行計算垦巴,雖然根據(jù)監(jiān)控序愚,分鐘級別調(diào)用均勻芬膝,但是在秒級別看就存在波峰波谷了锰霜。事實上「平臺服務(wù)」層已經(jīng)做了削峰操作。使用線程池進行控制并發(fā)線程數(shù)控制小于購買的并發(fā)數(shù)友存,目的是給舊設(shè)備一些并發(fā)余量搀军。
目前看來需要設(shè)備全部切到平臺才可以做到準確的控制。削峰要考慮以下兩點:
1.對于下游服務(wù)的訪問是否做到準確控制檩坚;
2.必須在滿足對于上游調(diào)用方響應(yīng)耗時承諾的前提下氓润,對下游訪問進行控制挨措;