淺析項目架構(gòu)-a

單元化,set集裝箱,意思都差不多,一個set或單元服務(wù)一定量用戶,根據(jù)用戶位置轉(zhuǎn)向就近機房為其服務(wù),每個set或單元都有在其他機房的備份便于容災(zāi)

  • 一個請求可能經(jīng)歷的路徑(目前使用手機的情況居多,以app為例)

    • 1.請求一個域名(httpDNS or GSLB獲取就近服務(wù)器機房VIP-通過用戶IP信息)
    • 2.lvs-fullnat負載均衡到一個real server(一般是nginx)
    • 3.nginx再負載均衡到backend server(一般是tomcat or jetty)
  • httpDNS or GSLB

    • 根據(jù)服務(wù)器域名 和 用戶信息 獲取 就近的機房VIP
  • 機房

    • 一般至少都有2-3個異地機房(如:北京,廣州,華中等地)
  • DB

    假設(shè)機房a,b,c

    • 機房a: mysql master, mysql slave
    • 機房b: mysql slave
    • 機房c: mysql slave
  • 讀寫分離組件

    一般我們都使用Druid數(shù)據(jù)庫連接池

    • 可以基于druid寫一個讀寫分離的數(shù)據(jù)庫組件,以jar包的形式,可以看成mysql-connector-j的plus版本
    • 讀的時候再支持負載均衡
  • 服務(wù)化

    • 抽出核心的業(yè)務(wù)服務(wù)化,獨立出來
    • 現(xiàn)有的rpc框架實現(xiàn)其服務(wù)化, dubbo(不跨語言,僅java)
  • 容災(zāi)

    • mysql 存儲: 一主多從-多機房
    • 服務(wù)多機房部署
    • nginx-backend server
      • openresty(lua) 檢測backend出問題時返回靜態(tài)文件如json數(shù)據(jù)
      • 此json數(shù)據(jù)可以是task定時請求接口獲取
  • 服務(wù)降級-保證核心業(yè)務(wù)正常使用

    • 自動降級
      • 非核心業(yè)務(wù)統(tǒng)計qps,達到閾值,斷掉調(diào)用核心業(yè)務(wù)接口,避免核心業(yè)務(wù)受影響
    • 手動降級
      • 降級開關(guān)
        • 服務(wù)a調(diào)用存儲api,打開降級開關(guān),此調(diào)用被切斷直接返回值
  • 降低mysql讀壓力

    • 這里可以添加一層redis,請求到redis獲取數(shù)據(jù),task刷數(shù)據(jù)到redis。調(diào)用很頻繁的可以再加一層local cache,本機緩存,避免redis壓力過大,也可以減少網(wǎng)絡(luò)流量。
  • 限流

    • nginx限流
    • backend限流
    • 常見算法:令牌桶 漏桶
  • 監(jiān)控及報警

  • 機器信息(cpu使用率,負載,內(nèi)存使用,網(wǎng)絡(luò)流量等)監(jiān)控

  • 服務(wù)器監(jiān)控nginx, tomcat or jetty, rpc server, mq

  • 服務(wù)調(diào)用次數(shù):失敗,成功,異常

  • 線上錯誤日志異常統(tǒng)計報警

  • 常見問題解決方案

  • cpu過高 top

    • 一般是jvm進程問題 dump線程堆棧看看線程都在干什么
    • 有可能是共享了一臺物理機,受到其他業(yè)務(wù)的影響
  • 內(nèi)存泄漏

    • dump內(nèi)存 IBM memory analyzer分析 可疑泄漏點
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容