天天看點

容器程序模型

作者:springapp

容器是單程序模型,本質上就是一個程序。

之是以說容器是單程序,容器不像OS一樣擁有systemd。systemd具有管理程序的功能,systemd是1号程序,是所有程序的父程序。如圖1所示。

容器程式模型

圖1

systemd啟動之後,會按照配置好的啟動順序“拉起”其他程序。是以說,隻要容器裡面有systemd之類的管理程序,也是支援多程序的。nginx容器擁有管理程序,支援多程序,如圖2。

容器程式模型

圖2

master是1号程序,還有另外兩個worker程序。在nginx中,master負責管理worker程序,worker負責業務處理(真正幹活兒的)。

那容器本身為什麼不實作類似systemd, nginx-master等管理程序的功能呢?說法有很多,但最本質的原因,是粒度問題。如圖3所示。

容器程式模型

圖3

如果容器實作了程序管理功能,容器中運作着紅、黃、綠三個程序。存在以下缺點:

伸縮不精準

假設隻有小紅是主服務,其他的都是邊緣服務。當負載增大時隻需要擴容小紅就可以了,但所有服務都在一個容器中,隻能所有服務都擴容了。

容器狀态處理

假設隻有小紅有問題,每隔一段時間就會挂掉,那容器該如何處理呢?

A 容器直接簡單粗暴地選擇原地重新開機小紅,不向上回報,表示自己搞的定,一切正常。

缺點:上遊認為容器正常,掩蓋了問題的存在,不能真正解決問題。

B 容器不處理這個問題,向上回報自己有問題,需要幫助。

缺點:上遊感覺到了容器異常,假設上遊選擇重新開機容器,導緻容器中的正常服務也被重新開機。甚至會引起雪崩效應。

最終容器采用了單程序模型,一個容器隻能管理一個程序,也就是1号程序。