雙11背後的技術(上)最後衝刺
阿里巴巴的主要業務包括線上交易,支付和其他業務,下圖中列出阿里巴巴中採用的一些開源專案。

阿里巴巴基於服務進行開發系統,服務間通過 RPC 進行通訊。要應對高併發,對於阿里的挑戰。

多租戶的看起來是不是有點像微服務,在淘寶的個人推薦上應該多租戶
每一個 java 的執行緒對應一個native 執行緒。我們通過control group 來分配執行緒。
我們彙總一下阿里對

1.Multi-tenant 有關多租戶之前我們已經介紹過。那麼多租戶具體採用那種技術來實現的呢。在每個租戶的執行緒也是如何分配和隔離的。

多租戶,可以為每個租戶分配一定記憶體和CPU資源。G1 是才用分代演算法,按年輕代和老年代來劃分記憶體。G1 的特點是講記憶體等分為若干小的區域 region , 包括 Eden survivor old。通過改造我們讓每一個租戶都被分配到一定記憶體。G1 會安租戶來管理堆記憶體,進行垃圾回收。所以每一個租戶是獨立的GC。好了,我們看一下每個租戶是如何獲取自己的 CPU 資源。概述一下,每一個 java 執行緒都會對應到 native 執行緒。然後用 control group 管理 native 執行緒來控制如何分配資源給租戶。

2.GCIH :通過 GCIH 劃分出來部分記憶體,自主管理,這些這部分記憶體對於 GC 是不可見的。管理堆記憶體,讓一些記憶體自主管理對 GC 是不可見的。這樣來實現快取資料機制。

3.Wisp :專注於非同步程式設計。每一次使用者請求都是,都是一次等待,都是一次執行緒阻塞。
非同步程式設計是通過執行緒間切換來實現的,其實執行緒間互動資料,在底層是一種很費資源的解決方案,因為執行緒間的通訊是需要切換上下文,早在 Linux 中就不提倡使用執行緒池來實現非同步程式設計。阿里採用協程代替執行緒來進行非同步程式設計。通過協程來做一些阻塞的操作。有關於協程的概念。
如果你有 Python js es6的背景,尤其是你要是有 golang 的經驗就跟不難理解,go 語言是處理高併發的高手,Go語言從語言層面上就支援了併發,這與其他語言大不一樣,不像以前我們要用Thread庫 來新建執行緒,還要用執行緒安全的佇列庫來共享資料。強大武器就是 goroutine和channel
。在新貴的 kotlin 中也對協程有良好的支援,協程相對於執行緒開銷要小的多。java 也是也有自己的併發解決的方案。但是通過執行緒來解決高併發的問題,不僅是開銷的問題,而且是有瓶頸的,當分配執行緒達到一定數量,即是再分配更多的執行緒也不會有明顯的效果。