?阿里巴巴的主要業(yè)務(wù)包括在線交易态鳖,支付和其他業(yè)務(wù),下圖中列出阿里巴巴中采用的一些開源項目。
阿里巴巴基于服務(wù)進行開發(fā)系統(tǒng)崭篡,服務(wù)間通過 RPC 進行通訊挪哄。要應(yīng)對高并發(fā),對于阿里的挑戰(zhàn)琉闪。
多租戶的看起來是不是有點像微服務(wù)迹炼,在淘寶的個人推薦上應(yīng)該多租戶
每一個 java 的線程對應(yīng)一個native 線程。我們通過control group 來分配線程颠毙。
我們匯總一下阿里對
1.Multi-tenant 有關(guān)多租戶之前我們已經(jīng)介紹過斯入。那么多租戶具體采用那種技術(shù)來實現(xiàn)的呢。在每個租戶的線程也是如何分配和隔離的吟秩。
多租戶咱扣,可以為每個租戶分配一定內(nèi)存和CPU資源。G1 是才用分代算法涵防,按年輕代和老年代來劃分內(nèi)存闹伪。G1 的特點是講內(nèi)存等分為若干小的區(qū)域 region , 包括 Eden survivor old。通過改造我們讓每一個租戶都被分配到一定內(nèi)存壮池。G1 會安租戶來管理堆內(nèi)存偏瓤,進行垃圾回收。所以每一個租戶是獨立的GC椰憋。好了厅克,我們看一下每個租戶是如何獲取自己的 CPU 資源。概述一下橙依,每一個 java 線程都會對應(yīng)到 native 線程证舟。然后用 control group 管理 native 線程來控制如何分配資源給租戶。
2.GCIH :通過 GCIH 劃分出來部分內(nèi)存窗骑,自主管理女责,這些這部分內(nèi)存對于 GC 是不可見的。管理堆內(nèi)存创译,讓一些內(nèi)存自主管理對 GC 是不可見的抵知。這樣來實現(xiàn)緩存數(shù)據(jù)機制。
3.Wisp :專注于異步編程软族。每一次用戶請求都是刷喜,都是一次等待,都是一次線程阻塞立砸。
異步編程是通過線程間切換來實現(xiàn)的掖疮,其實線程間交互數(shù)據(jù),在底層是一種很費資源的解決方案仰禽,因為線程間的通訊是需要切換上下文氮墨,早在 Linux 中就不提倡使用線程池來實現(xiàn)異步編程纺蛆。阿里采用協(xié)程代替線程來進行異步編程吐葵。通過協(xié)程來做一些阻塞的操作规揪。有關(guān)于協(xié)程的概念。
如果你有 Python js es6的背景温峭,尤其是你要是有 golang 的經(jīng)驗就跟不難理解猛铅,go 語言是處理高并發(fā)的高手,Go語言從語言層面上就支持了并發(fā)凤藏,這與其他語言大不一樣奸忽,不像以前我們要用Thread庫 來新建線程,還要用線程安全的隊列庫來共享數(shù)據(jù)揖庄。強大武器就是? goroutine和channel
栗菜。在新貴的 kotlin 中也對協(xié)程有良好的支持,協(xié)程相對于線程開銷要小的多蹄梢。java 也是也有自己的并發(fā)解決的方案疙筹。但是通過線程來解決高并發(fā)的問題,不僅是開銷的問題禁炒,而且是有瓶頸的而咆,當分配線程達到一定數(shù)量,即是再分配更多的線程也不會有明顯的效果幕袱。