可伸縮性/可擴展性(Scalable/scalability)
可伸縮性(可擴展性)是一種對軟件系統計算處理能力的設計指標,高可伸縮性代表一種彈性,在系統擴展成長過程中,軟件能夠保證旺盛的生命力,通過很少的改動甚至只是硬件設備的添置,就能實現整個系統處理能力的線性增長,實現高吞吐量和低延遲高性能。
可伸縮性和純粹性能調優有本質區別, 可伸縮性是高性能、低成本和可維護性等諸多因素的綜合考量和平衡,可伸縮性講究平滑線性的性能提升,更側重於系統的水平伸縮,通過廉價的服務器實現分佈式計算;而普通性能優化只是單臺機器的性能指標優化。他們共同點都是根據應用系統特點在吞吐量和延遲之間進行一個側重選擇,當然水平伸縮分區後會帶來CAP定理約束。
軟件的可擴展性設計非常重要,但又比較難以掌握,業界試圖通過雲計算或高併發語言等方式節省開發者精力,但是,無論採取什麼技術,如果應用系統內部是鐵板一塊,例如嚴重依賴數據庫,系統達到一定訪問規模,負載都集中到一兩臺數據庫服務器上,這時進行分區擴展伸縮就比較困難,正如Hibernate框架創建人Gavin King所說:關係數據庫是最不可擴展的。
性能和擴展性
- 什麼是性能問題? 如果你的系統對於一個用戶訪問還很慢,那就是性能問題;
- 什麼是擴展性問題? 如果你的系統對一個用戶來說是快的,但是在用戶不斷增長的高訪問量下就慢了。
延遲和吞吐量
延遲和吞吐量是衡量可擴展性的一對指標,我們希望獲得低延遲和高吞吐量的系統架構。所謂低延遲,也就是用戶能感受到的系統響應時間,比如一個網頁在幾秒內打開,越短表示延遲越低,而吞吐量表示同時有多少用戶能夠享受到這種低延遲,如果併發用戶量很大時,用戶感覺網頁的打開速度很慢,這意味着系統架構的吞吐量有待提高。
擴展性的目標是用可接受的延遲獲得最大的吞吐量。可靠性(可用性)目標:用可接受的延遲獲得數據更新的一致性。
性能專題
性能專題(數十篇)
是什麼阻止了Ruby和Python獲得Javascript V8那樣的速度?
JVM內存模型和性能優化
JVM有關垃圾回收機制的配置
性能優化的首要法則
Tomcat實戰中的微調
性能測試
性能調優
高性能
企業系統擴展性架構設計諮詢培訓
緩存專題
對象池
使用proxysql和線程池擴展MySQL性能
Reactive響應式編程專題
伸縮性文章
可擴展伸縮架構中的狀態
超越分佈式事務
Scalable可伸縮性詳細設計10頁 ( PPT下載 )
JavaEE應用的可擴展性伸縮性
Nginx負載平衡 + Tomcat + 會話存儲Redis配置要點
非推倒重來式的讀/寫伸縮擴展
12306火車票訂票系統的伸縮擴展
Go Reactive宣言
Netflix的亞馬遜雲計算平臺使用
服務器後端性能大比拼
可伸縮性Scalable高性能系統設計
OO + 分佈式計算 = 軟件架構的方向
可伸縮性最佳實戰
Docker容器化組件架構
什麼是cloud native應用?
更多伸縮性scalable討論
雲計算專題
Visual Studio常用插件推薦
Emmet - 所有操作按下“tab”鍵即可瞬間剩....
Java內存泄漏解決之道
Java的核心優勢之一是在內置垃圾收集器(簡稱GC)的幫助下實現自動內存管理。GC隱式地負責分配和....
Hyperledger Explorer是區塊鏈的管理工具
Hyperledger Explorer是一個區塊鏈模塊,也是Linux基金會託管的Hyperle....
把IDE字體增大才能寫出更簡單的代碼
增加 ide 中的字體大小和行高度是一個很好的方式: 減少眼睛緊張, 更多的專注和更大的激勵, 寫....
工程師不應該寫ETL:建立高效率數據科學部門指南
大多數公司將他們的數據科學部門分爲3組: 數據科學家:那些“比統計學家更好的工程師和比工程師....
iDevice.js能探測訪問網站的iOS設備
如果你瞭解訪問你網站的用戶使用什麼iOS設備?希望不同的設備設置不同的屏幕等。 解決方案是向Web....