總體:https://segmentfault.com/a/11...。服務化建設,服務多,上線和部署成本高,本文介紹全流程上線部署平臺的設計方案。nginx
接入層:nginx攻防(白名單,黑名單,封禁,限流),機房切換。
1).nginx的限流:令牌桶思想git
算法思想是: 令牌以固定速率產生,並緩存到令牌桶中; 令牌桶放滿時,多餘的令牌被丟棄; 請求要消耗等比例的令牌才能被處理; 令牌不夠時,請求被緩存。 ms = (ngx_msec_int_t) (now - lr->last) excess = lr->excess - ctx->rate * ngx_abs(ms) / 1000 + 1000; if ( excess > limit->burst) { busy } 好比1s最多10個、10ms來了一個。突發最大多5, acess=1000- 10*10 = 900 < 5000 11ms來了一個。 acess=900-10*1+1000=1890 12ms access=1890-10+1000=2890 13 3890 14ms 4890 15ms busy 34ms 4890-30*10+1000=4990就能夠繼續
2).這裏的最大併發,brpc有一個自適應限流:https://github.com/apache/inc...
max_concurrency自適應latency公式:
max_concurrency = max_qps ((2+alpha) min_latency - latency)
min_latency是最近一段時間測量到的latency較小值的ema,是noload_latency的估算值。
latency是當前採樣窗口內全部請求的平均latency。
max_qps是最近一段時間測量到的qps的極大值(回覆的)github
min_latency:每隔一段時間縮小max_concurrency,過一小段時間後( latency * 2)以此時的latency做爲noload_latency if latency > min_latency: min_latency = latency * ema_alpha + (1 - ema_alpha) * min_latency else: do_nothing max_qps: if current_qps > max_qps: max_qps = current_qps else: max_qps = current_qps * ema_alpha / 10 + (1 - ema_alpha / 10) * max_qps 將max_qps的ema參數置爲min_latency的ema參數的十分之一的緣由是: max_qps 降低了一般並不意味着極限qps也降低了。而min_latency降低了,一般意味着noload_latency確實降低了。
慢啓動解決:web
產品線生產數據①以後,調用文件飛線的客戶端(圖中爲orp_scp.sh),指定好數據源,發到服務端(圖中爲中控機),服務端從ORP的基礎設施NamingService讀取產品線所在的機器及相關路徑,而後進行部署(③④⑤)。產品線用戶能夠經過查看ORP平臺,得到部署的進度和部署的結果(成功或失敗)redis
獨立計時器觸發
,任務平臺
去任務集
中取任務部署到任務平臺,工做。
平臺=》分發集羣+zk=》業務機器的agent=》業務sdk算法
架構
數據庫