談談 ServerFul 架構

我寫了一篇文章 《本身實現一個線程池》  http://www.javashuo.com/article/p-bdymuidk-ds.html ,html

 

其實 不只僅 是 線程池, 中間件 層 的 服務 咱們 均可以 從新 寫一遍, 好比 Hadoop, HBase, MapReduce, 又或者 Dubbo , ZooKeeper 之類的 「分佈式服務計算框架」 , 均可以 從新 寫 一遍 。 這些 並不稀奇 。編程

 

基於 虛擬機(Java JVM 或者 .Net CLR) 的 技術 自己 並不複雜, 或者說, 虛擬機(Java JVM 或者 .Net CLR) 層 以上 的 技術自己 並不複雜 。安全

實現 虛擬機(Java JVM 或者 .Net CLR) 的 技術 是 複雜 的 , 可是 虛擬機(Java JVM 或者 .Net CLR) 層 以上 的 技術 並不複雜 。服務器

虛擬機(Java JVM 或者 .Net CLR) 層 以上 的 技術 就是 中間件 和 業務系統 。
網絡

事實上 虛擬機(Java JVM 或者 .Net CLR) 自己就是爲了 簡化開發 因此纔出現的 。
虛擬機(Java JVM 或者 .Net CLR) 中間件 層 最複雜 的 技術 大概就是 多線程 , 最多就是 字節碼 (IL OpCode) 。
沒了 。

多線程

可是 虛擬機(Java JVM 或者 .Net CLR) 自己的 實現 是 複雜的, 是 核心技術 。
這部分 技術 集 計算機 軟件 技術 之 大成, 
首先, 緊密貼近 操做系統,
其次, 編譯器 愈來愈複雜, 由於 語言特性 愈來愈 複雜, 語言愈來愈多,
對 效率 的 優化 也 愈來愈多,
可是 咱們 仍然 要 支持 開源
在 中間件 層 的 開源 也是 頗有意義 的
架構

中間件層 以上的 軟件技術, 
主要 Focus 在
分佈式通訊
快速開發
快速 生產 安全穩定 的 業務系統
快速應對 需求變化
維持 業務系統 的 穩定
運維框架

應對  大規模 訪問  (使用    計算)       要 突破 現有的 集中式 架構 對於 大規模訪問 的 瓶頸, 須要 客戶端 智能化 和 服務器 多中心化, 參考我以前寫的一篇文章     《Grid Virtual Server 和 網格計算》      http://www.javashuo.com/article/p-hctfhgzx-dg.html運維

伸縮性   (彈性)

我發表過 一篇 博客 《將來須要的是 輕量操做系統 而不是 容器》      http://www.javashuo.com/article/p-oeegsskj-gp.html

事實上
要實現 上述目標
虛擬機 + 中間件服務 + 產生式編程 + DevOps         (這裏的 虛擬機 是 硬件虛擬化 的 虛擬機, 不是 JVM 和 .Net CLR 的 那個 虛擬機)
就能夠
沒有必要用 容器
也沒有必要 「無服務器」 (ServerLess)分佈式

因此, 我提出一個 「ServerFul」 架構, ServerFul 架構就是 n 臺 Server 經過 網絡通訊 的 方式 協做在一塊兒 。

也能夠說 ServerFul 架構是 虛擬機 + 中間件服務 + 產生式編程 + DevOps ,

也能夠說 ServerFul 架構是 基於 Server 和 網絡通訊(分佈式計算) 的 軟件實現架構 , Server 能夠是 虛擬機 物理機 , 以及 基於硬件實現的 雲 的 雲服務器 。


有網友問, 「假如你100個虛擬機 + 100箇中間件,你怎麼管理? 不仍是用相似於容器的來操做。」

個人想法是, 用 網絡通訊 的 方式 管理 。 即用 網絡通訊 的方式 管理 服務器 羣 。


容器 我想 它 的 管理方式 有 2 種, 
1 對於 同一個 物理主機 內 多核 的 管理
2 對於 多個 物理主機 的 管理

對於 1 , 應該是 用 操做系統 層面 的 技術

對於 2 , 應該還是用 網絡通訊 的技術

只是,

本來 基於 網絡通訊 的 技術, 透明直觀, 如今 被 容器 包含進去了 吧 ! ^^

包括像 Service Mesh 這樣的技術, 也是 基於 容器 的

容器是一個 操做系統 層面的 技術

個人想法是,

用 中間件 的 技術 來 管理 服務器 集羣

而不是 用 操做系統 的 技術

我知道的很少, 不過 對於 CPU 資源 的 管理分配 , 這應該是 操做系統 層面的技術

不過 如今 容器 彷佛把 更大範圍 的 服務器集羣 管理 之類 的 也 包含到 自身裏了

容器 的核心代碼 應該是 操做系統 內核代碼 的 一部分


容器 客戶端 應該是跟 核心代碼 通訊

容器 實際上 應該是 修改了 操做系統 進程管理 的 代碼

來實現 CPU 資源分配

或者說,

容器 實現了一個 「進程組」(進程 Group)


一組進程 就是一個 容器,也至關因而一個 小虛擬機

這部分是 修改了 操做系統 內核代碼 中的 進程管理 部分

這應該是 容器 的 核心

此外的話,就是 對於 存儲資源 的 管理

內存 到 磁盤

我猜的 ~

再次就是 網絡通訊

大概 能夠 虛擬 網卡

一個 網卡 虛擬成 多個 虛擬網卡 來提供給 多個 容器 和 外界通訊

這也是 操做系統 內核 , 屬於 內核中 網絡通訊 的 部分, 網卡驅動

同時

像 Service Mesh 這樣負責根據 業務 提供一個 虛擬網絡 通路 的 技術

也 是 基於 容器 的

事實上 不基於 容器 也能夠實現 這種 虛擬網絡通路

只是 如今 流行 使用 容器 吧 ~ !

還有

Kubernates 還包含了 管理 服務器 集羣 的 能力

前段 時間 看到 文章說,

Kubernates 在 國外 某個 大學 (好像是, 反正大概是 科研單位 之類的)
爲一個 項目 管理 了 上千臺 服務器
用於 科學計算 之類的 吧 ?
虛擬網路通路 最核心基本 的 技術應該是 虛擬網卡

Service Mesh 基於 容器 , 虛擬網卡 多是 最主要的緣由
這個 不須要 容器 也能夠實現

虛擬機 (VMWare 之類的) 應該已經實現

還有另一個緣由

就是 如今流行用 容器

因此, Service Mesh 直接選擇了 容器 做爲 基礎架構

虛擬網卡 實際上 就是 一個 網卡驅動程序

在 網卡驅動程序 裏 對 包 做一些 Wrap 和 UnWrap

邏輯 上 跟咱們 中間件層 寫 AOP 之類的 差很少

或者 Http 代理 , Http 攔截器(Interceptor) 之類的 差很少

跟 Asp.net 裏的 HttpModule

Asp.net Core 裏的 MiddleWare 差很少

固然 這樣 虛擬來 虛擬去

效率 確定 打折扣

服務器 集羣 管理, 其中一個工做就是 批量部署, 或者說 鏡像部署, 或者說 克隆部署

這也能夠用 中間件 技術 實現

本質上就是 拷貝文件 嘛 !

虛擬網卡 的 實現, 至關於 在 驅動程序 裏 要加入一份 IP 協議 的 邏輯, 把 數據 按 虛擬網卡(IP) 處理後, 再傳給 操做系統 的 IP 協議

這樣就至關於 經歷了 2 次 IP 協議 的 處理

效率天然會受影響

固然, VMWare 也能夠 修改 操做系統 內核

即 直接 修改 操做系統 的 IP 協議, 在 操做系統 的 IP 協議 中 加入 虛擬網卡(IP) 的 邏輯

這樣將 虛擬網卡(IP) 的 工做 合併 到了 操做系統 的 IP 協議 裏

能夠 減小一些 重複的 工做量

但 對於 效率 仍然有 影響

同時, 這種 作法,

修改了 操做系統 內核,

會 形成 代碼版本 很差 管控

操做系統 代碼 變得 複雜,

且 難於 管控

好比, 這個 操做系統 修改了 內核代碼

就須要 考慮 Merge 的問題

或者 操做系統 修補了 某個 漏洞

也一樣 須要 考慮 Merge 的 問題

相關文章
相關標籤/搜索