當前位置:
首頁 > 知識 > 可擴展系統的9個性能問題

可擴展系統的9個性能問題

可擴展系統的9個性能問題

如果你有部署過一些可擴展系統的經驗,你就會知道跟其它問題比起來,設計上的問題是最嚴重的。編寫嚴謹的代碼是一回事,而如何避免在系統設計過程中存在嚴重性的缺陷問題是另一回事。

這裡有9個常見的問題——真的是很糟糕的設計選擇——這些問題會導致你的系統運行的很慢。與許多糟糕的決策不同,這些問題可以被逆轉。

【資料庫很慢?使用這21條規則可以提高RDBMS的速度和可伸縮性,獲得更快的SQL查詢速度。我一直關注著InfoWorld的應用開發者報告簡報中最熱門的編程話題。】


1.N+1查詢

如果你在一個查詢中select出了一位客戶的所有訂單,然後循環通過每個訂單中的每個訂單的行項,這是n次訪問資料庫加1。這種情況使用一個外部連接的查詢將更有效。如果你需要減少一次,那麼你可以使用一種分頁形式。使用緩存的開發人員常常會意外地編寫n+1問題。你可以使用諸如Oracle Enterprise Monitor(OEM)或APM工具之類的資料庫監視工具來發現這些情況,比如狡猾的內向或簡單的查詢日誌記錄。還有更糟糕的版本,比如那些試圖在平板中存儲樹的人,而不是使用CTEs。在NoSQL資料庫中也存在類似的問題,因此沒有人是安全的。


2.頁面或記錄鎖定

哥兒們,我曾經很討厭DB2和SQL Server。我現在仍然討厭他們的默認鎖定模式。根據平台的不同,DB2會為更新鎖定記錄的「頁面」。你最終會鎖定那些與你所做的事情無關的記錄。行鎖更常見。一個長時間運行的事務對一行進行一個小的更新,這不會對其他任何事情產生影響。所有其他查詢塊。與此同時,這些事務持有更多的鎖,從而造成了級聯性能問題。如果你在這兩個資料庫中,請打開並設計快照隔離。Oracle默認使用一種快照隔離形式。有一些NoSQL資料庫可以被配置為偏執程度的一致性。在你傷害自己之前,先了解它的鎖定模式。


3.線程同步

這個問題有很多形式。有時它藏在圖書館裡。多年以前,XML解析器使用名為Bean激活框架的Java庫來驗證MIME類型,該Java庫使用了與每個方法同步的舊Java「Hashtable」集合。這意味著所有進行XML解析的線程最終都在同一個位置排隊,造成了巨大的並發瓶頸。你可以通過閱讀線程轉儲找到這個問題。許多現代開發人員已經習慣了為他們處理大多數線程的工具。這很好,直到有些事情不能正常工作。每個人都需要理解並發性。

4.資料庫序列

如果你只需要一個惟一的ID,不要使用序列。只有在合理地需要每個ID時才使用一個序列。順序。序列是如何實現的?線程鎖。也就是說,所有的序列都是這樣的。另一種方法是使用隨機生成的UUID,使用安全隨機演算法。儘管理論上有可能得到一份複製品,但在產生了幾萬億行之後,你仍然有更大的機會被隕石擊中頭部。我曾經讓開發人員坐在我面前,光著頭戴著沒有隕石頭盔的頭盔,告訴我,即使是理論上的複製機會在他們的系統中都是可以接受的,但我猜他們對自己的生活並不重視。至少要用錫箔紙。


5.打開資料庫連接

不管是資料庫,HTTP,還是別的什麼,都要把這些東西進行池化。在更大的系統上,不要嘗試同時打開它們,因為你會發現你的資料庫並不是這樣設計的!


6.交換

你需要的內存總比你所希望的要多。如果你選擇了犧牲其它方面從而交換得到內存,那是不好的。我曾經將我的Linux boxes設置為不允許交換,因為與默默地在後台殺死我的軟體相比,我更想讓它們出現崩潰。


7.I/O 同步

大多數高速緩存軟體都有「write behind」的能力,也就是將數據寫到至少兩台機器上的內存中,而不用等待磁碟。這「軟化」了讀寫波。最終,如果寫吞吐量足夠高,那麼在write-behind緩存崩潰之前,你將不得不阻塞以趕上進度。在其他地方也存在類似的輸入/輸出同步,在日誌文件之類的地方。一些軟體仍然經常調用fsync,而這不是你想要的高端分散式可擴展軟體——至少在很多幫助下是這樣。


8.遺留的進程問題

一些軟體包仍然是圍繞進程和子進程設計的,每個進程都有一個單獨的線程,特別是在Unix操作系統上。你可以把它們組合起來,對它們進行復用,但這不是一個好的設計。每個進程和子進程都有自己的內存空間。有時你可以分配另一個可怕的想法,叫做共享內存。現在的軟體都具有管理多線程的進程。現在的多核cpu中,這一比例要大得多,因為每個核心都可以同時處理多個線程。

9.爭用網路資源

假設一個分散式的文件系統和內存中計算的火花使你的所有伺服器節點協同工作,而生命是盛大的,對吧?實際上,你仍然有網卡和開關以及其他限制帶寬的東西。nic可以被綁定,並且交換器每秒的數據包數是固定的(這和一個1G的交換機不同,在所有的20個埠上都不能提供1G)。很好,你有很多節點都在發送數據,但是它們會在自己的網卡,你的實際網路帶寬,或者你的交換機實際可用的吞吐量上瓶頸嗎?

如果你正在編寫代碼和架構系統,那麼希望你可以跳過這些陷阱。否則,請記住,一些老員工離開了這個行業然後開設酒吧這樣的事情是經常會發生。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 PHP愛好者 的精彩文章:

每個程序員書櫃必備的編程書籍
快速成長期的雲原生應用架構實踐
一位程序員工作10年總結了這些忠告
劣質代碼產生的五個原因

TAG:PHP愛好者 |

您可能感興趣

你有第二個免疫系統,它可能會毀了你的愛情生活
從不可能變為可能,這項技術點燃「絕對安全」通信系統的希望
10種可能的免疫系統紊亂的跡象
系統思考,方能行遠:一個苗族人絕不能喪失的3種關鍵能力!
有關於過濾系統的問題
如何整合肌力與能量系統訓練
想要安裝家居智能燈光系統,這五個問題需要了解
新生兒少了這些行為,有可能是神經系統發育異常
經絡系統的3種功能
有些人認為信息化戰爭時代,就要增強整個系統的信息獲取能力,並在系統內部合理流動
這些食物能增強你的免疫系統能力,不想生病就多吃點吧!
「自我系統」——關於人生的另一種可能
電腦藍屏問題除了重裝系統,我們還可以這麼解救系統
這樣如廁 生殖系統將會出現嚴重問題
一個健康的免疫系統怎樣提高我們的預防疾病能力
這件武器能讓所有導彈防禦系統失效,並有可能重新定義世界秩序
現時流行的幾種重裝系統,詳解其優點與缺點
學會這些再也不用擔心文件刪了錯系統崩潰問題了
重整系統可靠性 iOS 12可能延期?
虛擬現實VR的的智能展示系統