閱讀755 返回首頁    go 技術社區[雲棲]


Redis開發運維實踐上線部署規劃之服務器部署位置

5.3 服務器部署位置

盡可能把client和server部署在同一台機器上,比如都部署在app server,或者一個網段中,減少網絡延遲對於redis的影響。

如果是同一台機器,又想榨幹redis性能可以考慮采用UNIX domain sockets配置方式,配置方式如下


這樣的配置方式在沒有大量pipeline下會有一定性能提升,具體請參見https://redis.io/topics/benchmarks:

另外,對於混合部署即redis和應用部署在同一台服務器上,那麼可能會出現如下的情況:

出現瞬時 Redis 大量連接和處理超時,應用業務線程被阻塞,導致服務拒絕,過一段時間可能又自動恢複了。這種瞬時故障非常難抓現場,一天來上幾發就會給人業務不穩定的感受,而一般基礎機器指標的監控周期在分鍾級。瞬時故障可能發生在監控的采集間隙,所以隻好上腳本在秒級監控日誌,發現瞬時出現大量 Redis 超時錯誤,就收集當時應用的 JVM 堆棧、內存和機器 CPU Load 等各項指標。終於發現瞬時故障時刻 Redis 機器 CPU Load 出現瞬間飆升幾百的現象,應用和 Redis 混合部署時應用可能瞬間搶占了全部 CPU 導致 Redis 沒有 CPU 資源可用。而應用處理業務的邏輯又可能需要訪問 Redis,而 Redis 又沒有 CPU 資源可用導致超時,這不就像一個死鎖麼。搞清楚了原因其實解決方法也簡單,就是分離應用和 Redis 的部署,各自資源隔離

+

出處: https://mp.weixin.qq.com/s?__biz=MzAxMTEyOTQ5OQ==&mid=402004912&idx=1&sn=7517696a86f54262e60e1b5636d6cbe0&3rd=MzA3MDU4NTYzMw==&scene=6

因此在混合部署下要對極限性能進行監控,提前將可能出現性能問題的應用遷移出來。


最後更新:2017-05-08 10:31:37

  上一篇:go Redis開發運維實踐上線部署規劃之內存規劃
  下一篇:go Redis開發運維實踐開發者設計規範之客戶端推薦