架構必會的性能指標及分析策略

来源:http://www.cnblogs.com/xiexj/archive/2017/11/26/7865808.html
-Advertisement-
Play Games

不管是java還是.net基礎設施必不可少。 MQ: 如果發現MQ是瓶頸。不管用的是rabbitmq還是kafka,其他的也好。作為生產者要確認超時時間、重試機制、非同步線程池。消費方要做兩件事:發現和解決。發現的主要是通過積壓閾值最快發現問題。解決的方法主要有:短期方案:增大線程數,增加伺服器。長期 ...


  不管是java還是.net基礎設施必不可少。

MQ:

  如果發現MQ是瓶頸。不管用的是rabbitmq還是kafka,其他的也好。作為生產者要確認超時時間、重試機制、非同步線程池。消費方要做兩件事:發現和解決。發現的主要是通過積壓閾值最快發現問題。解決的方法主要有:短期方案:增大線程數,增加伺服器。長期需要優化邏輯。積壓閾值的設置主要取決於對積壓的容忍程度,比如我們的服務對延時很敏感,那麼設置積壓閾值為50或者100。這樣有問題可以快速發現。

緩存:

   緩存的話,不管是tair還是redis或者memcached。我們對緩存的寫入成功和數據存在性都不能強依賴。所以基本要做到緩存讀取不成功就需要再次查DB。而且不管出什麼問題,對程式來說,就是拋異常了。所以一定要異常捕獲。數據要用非同步線程池非同步寫入。監控要做好。我們有個服務要做一層緩存。我們組的兄弟比較擔心,問我瞭解不瞭解冷熱啟動的概念。這個其實需要去咨詢維護服務的人怎麼定義這個概念。一般來講:冷啟動數據是從磁碟載入的,熱啟動是從記憶體載入的。

超時和重試:

  為了防止別的服務出問題,一定優化好超時時間和重試機制。超時時間的定義一般設置為一個請求處理99.9%的耗時時間的5到10倍。這是因為考慮到跨機房等網路耗時的問題。雖然運維的同事會告訴說跨機房之間的時延也就是1ms或者2ms的事情,但是實際值要大於這個值,所以一般設置超時時間是100ms起步。很多請求設置了這個值還是超時了,沒關係,就是截獲一個異常然後重試。如果服務不重要,比如展示的時候,去取一個展示的key的字典值,也可以不重試。一般的RPC組件預設重試是3次。

  一般超時的異常有以下特征:

java.lang.reflect.UndeclaredThrowableException
at com.sun.proxy.$Proxy67.xxxx(Unknown Source)
at 

Caused by: org.apache.thrift.TException: tthrift remote(IP:埠) invoke(xxxx) timeout, traceId:-2093033244087395764, timeout:100

  Unknown Source:遠程問題的特征之一

  timeout是超時的特征

服務隔離:

  服務隔離是為了減少損失的影響範圍,避免雪崩效應。比如我們有一些外部的依賴:我們依賴微信支付的穩定性、支付寶支付的穩定性、銀聯支付的穩定性。那麼我需要按照這幾種通道做物理隔離,可以部署相同的代碼但是部署在不同的機器群。

組件版本及時升級:

  比如httpclient4.3的版本有個bug併發量大的時候會阻塞。之前在樂視的時候,部門有個小組的服務就發生過這樣的線上問題。

及時下線不再使用的代碼:

  可能在一個團隊中很多程式bug都是因為存在太多的相容邏輯和臨時代碼,寫這些邏輯的人如果沒有加上很好的註釋,在用完的時候也沒有及時清理。後來維護的人看到這段毫無道理的代碼不敢動。程式里大量的IF和ELSE,很容易踩坑。招聘的時候卡的很嚴,很多面試者不服氣,我也能寫出來代碼。但是會寫代碼和會寫代碼是不一樣的。我們需求很急,但是寧願不做也不要一個寫出一堆問題代碼,處處是坑,難以維護代碼的程式員。

資料庫:

  一個數據表的數據過多,對更新和查詢性能都有影響。對於不再使用的數據要及時備份清走。一般資料庫的容量剩餘不到60%, 就要考慮分庫分表了。一般一臺物理機寫入能力也不能高於QPS1500。所以對於主從延時不是很敏感的業務場景,一定要做好讀寫分離。雖然做了讀寫分離,如果讀和寫的代碼在一個事務里,其實都是走的主庫。杜絕慢查詢。

梳理好依賴:

  開發一個系統,最忌諱的是沒有靈魂。來什麼需求都接。把系統搞得很亂。梳理好系統的邊界和定位。我們應該依賴什麼服務,是強依賴還是可以降級的弱依賴。調用系統的調用方需要什麼東西,我們是應該給提供,還是讓他們自己去解決。

總結:

  上面提到的哪一步沒有做好,都可能引發蝴蝶效應。比如:一個MQ的消費能力差,積壓了,生產者同步寫入,寫入等待。另外一個服務調用了這個介面,還把這個調用包裹到事務里,導致這個事務長時間不提交。這樣的請求來幾個,線程池滿了,整個服務就掛了。如果別人調用這個服務,超時時間設置的過長,別的服務也跟著線程池滿,掛掉了。如果沒做好物理隔離,所有服務都掛了。

      

跑題時間:

  瑪格麗特.米切爾寫的《飄》英文原名是《gone with the wind》,意思是美國南部的奴隸制文明一去不返,中文的翻譯完全沒有這種韻味。女主人公斯嘉麗愛慕阿希禮的高貴氣質,冒著生命危險為他做了很多的事情。而阿希禮只在斯嘉麗需要的時候給了她一把土。當時光沉澱了一切,斯嘉麗意識到自己愛上的只是自己想象出來的一個人,基於阿希禮。阿希禮只是空有一副皮囊,他的靈魂基於他的妻子梅蘭。而斯嘉麗自己的丈夫白瑞德才更配的上自己的靈魂。愛情來的時候本來就是毫無道理,而自己困境中望著你,你一次次將我逼進絕望。我一次次從絕望中翻身的強大會將你從心裡擠走。一個再堅強的女孩子最後也會愛上讓自己不用堅強的人。

  喜歡做魚頭雞湯。魚肉可以做出很多種花樣,而魚頭吃起來比較費勁,骨頭多,做湯最好。雞片入鍋,加上水豆豉,枸杞、薑片、甘草。將魚頭放到笊籬里,水煮到笊籬里只剩魚骨,將笊籬拿出。關火裝盤即可。好湯關鍵是食材,食材越好,調料可以越少。

  世界上最遙遠的距離是魚和飛鳥的距離,一個在天際一個卻深潛水底。我卻偏偏想讓他們在一起。即使不用一起成為湯,他們也可以在水面的一瞬間相遇。世界上最遙遠的距離是我變成了你最喜歡的樣子站在你面前,卻不喜歡你。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 字典中 嵌套字典 如同json 對象, data={ "msg":{ “xxx.com”:["a","b"] } } data.values();#列印所有的值,不包括key data["meg"][“xxx.com”][1]=c;#b值變成c data.setdefault(key,value); ...
  • Elasticsearch 是一個實時的分散式搜索分析引擎, 它能讓你以一個之前從未有過的速度和規模,去探索你的數據。 它被用作全文檢索、結構化搜索、分析以及這三個功能的組合。-- 權威指南Elasticsearch版本:6.0一、安裝1、從官網下載Elasticsearch:https://www... ...
  • 一、socket(單鏈接) 1、socket:應用層與TCP/IP協議族通信的中間軟體抽象層,它是一組介面。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket介面後面;也有人將socket說成ip+port,ip是用來標識互聯網中的一臺主機的位置,而por ...
  • 1.元組 元組和列表很相似,最大的區別就是不可以對元組進行修改,因此也可將元組稱之為不可修改的列表。 在表示上列表使用中括弧,元組使用的是小括弧。都是用逗號將元素隔開。 有一點值得註意的是,創建只有一個元素的元組時需在元素後加逗號,如tup = (2,)。所以可見元組判別元組的依據是逗號而不是小括弧 ...
  • feedparser模塊 1.簡介 feedparser是一個Python的Feed解析庫,可以處理RSS ,CDF,Atom 。使用它我們可從任何 RSS 或 Atom 訂閱源得到標題、鏈接和文章的條目了。 RSS(Really Simple Syndication,簡易信息聚合):是一種描述和同 ...
  • The GNU Compiler Collection (usually shortened to GCC) is a compiler system produced by the GNU Project supporting various programming languages. But ...
  • 1、Java常量的應用 語法:final 常量名 = 值; 舉一個簡單的例子 2、Java數組 Java中操作數組只需要四個步驟: (1)聲明數組 語法:數組類型[ ] 數組名; 或者數組類型 數組名[ ]; (2)分配空間 語法: 數組名 = new 數據類型 [ 數組長度 ]; 也可以直接合併 ...
  • 從0開始搭建自動部署環境(續) 前言 上一篇 "從0開始搭建自動部署環境" 雖然環境搭建起來了,但是配置少了一部分步驟。本來應該寫到上一篇中,但是這樣做篇幅過長了。另外,此篇會使用自動部署一個同步在Github上的Spring Boot項目為例,介紹如何使用該自動部署環境。 配置Global Too ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...