原創 微服務為什麼一定要用docker

2022-02-01 03:22:00 字數 2713 閱讀 2163

早在2023年的時候,docker就已經發行,然而那會還是很少人了解docker。一直到2023年,martin fowler提出了微服務的概念,兩個不相干的技術終於走在了一起,創造了今天的輝煌!

近幾年來,很多網際網路關係開始跟風,構建docker+微服務的架構體系。然而,根據筆者觀察發現,有些童鞋在使用過程中,只是會用,而根本不了解為什麼使用docker,反正對他們來說,公司讓用就用!而某些公司呢,雖然用上了docker,然而運維方式並沒有發生改變,白白浪費了docker的大好效能!

因此,才有了本文的誕生。本文不會教你怎麼去用什麼docker的api,畢竟官網document很全面,而是去講解docker的優點,進而說明為什麼適合微服務的架構!

這裡必須要先說明物理機、虛擬機器、容器三者的優缺點。筆者不想去列一堆的概念,直接借用知乎的乙個回答,回答位址為:

這裡借用一下這位大神的三張圖,他的回答就三張圖!

所謂的物理機就是下面這樣的別墅

那麼虛擬機器機就是下面這樣的套房

最後就是我們的容器,就是下面這樣的膠囊公寓

那麼,專業的說法就是,容器是一種輕量級、可移植、自包含的軟體打包技術,使應用程式可以在幾乎任何地方以相同的方式執行。容器之間是共享同一套作業系統資源的,由於容器是共享主作業系統的核心,因此就無法在伺服器上執行與主伺服器不同的作業系統,也就是說不能再linux的伺服器上執行windows。就如上面哪個圖一樣,每個膠囊容器是公用乙個廁所,廚房,每個膠囊內無法再構建出自己的廁所和廚房!

隔離強現在:用上了docker容器後,將docker可以將我們的應用程式打包封裝到乙個容器中,該容器包含了應用程式的**、執行環境、依賴庫、配置檔案等必需的資源。容器之間達到程序級別的隔離,在容器中的操作,不會影響道宿主機和其他容器,這樣就不會出現應用之間相互影響的情形!

可移植性

過去:曾幾何時我們和測試mm之間聊天內容是這樣的

**開發:"你去測試環境上,按照開發環境一樣,再去搭三套一樣的測試環境!"

測試:"我....."

幾個小時過去了...

測試:"你幫我看看,為什麼啟動報錯,是不是漏配了什麼引數?"

開發:"我...."

**

於是接下來幾個小時就這麼愉快的和測試mm一起聊天中過去了!!嗯,我相信有些公司是為了解決開發的單身問題,才不使用docker,用心良苦!

然而,和運維gg之間聊天一般是這樣的

**運維:"開發這群腦殘,發布的新war包,又把生產搞掛了!"

開發:"這幫運維傻叉麼,我本地好好的,怎麼一上生產就不行了!"

...**

於是接下來的幾個小時,就在和運維之間的撕逼中過去了!嗯,最終苦的是使用者啊!

現在:自從用上docker容器後,可以實現開發、測試和生產環境的統一化和標準化。映象作為標準的交付件,可在開發、測試和生產環境上以容器來執行,最終實現三套環境上的應用以及執行所依賴內容的完全一致。

在現在微服務的架構中,乙個應用拆成幾十個微服務,每個微服務都對應有開發、測試、生產三套環境需要搭建。自己算算,如果採用傳統的部署方式,有多少環境需要部署。曾聽聞某公司在新建乙個專案的時候,要花整整乙個禮拜來搭建環境,簡直是慘不忍睹!

什麼,你和我說,你們用上了docker,卻還存在這些問題?

筆者曾見過某些公司是這麼用docker的。確實虛擬化出容器了,然後在容器上建立ssh server。接下來就厲害了,部署方式完全沒變,直接連上容器,一切部署照舊!對此,我也是一言難盡啊!你們這是給領導搭的docker麼?

輕量和高效

過去:在2023年的時候,那會在另一家大廠工作。這家稍微規範一點了,乙個應用部署在乙個虛擬機器上!當時最大的體會就是乙個,虛擬機器非常重,構建速度慢,且占用資源多,一台物理機上只能起十來個虛擬機器!

現在:

和虛擬機器相比,容器僅需要封裝應用和應用需要的依賴檔案,實現輕量的應用執行環境,且擁有比虛擬機器更高的硬體資源利用率。在微服務架構中,有些服務負載壓力大,需要以集群部署,可能要部署幾十台機器上,對於某些中小型公司來說,使用虛擬機器,代價太大。如果用容器,同樣的物理機則能支援上千個容器,對中小型公司來說,省錢!

筆者注:筆者一直覺得這個特性只是乙個障眼法。

比如,你說容器啟動速度快?難道你工作中吃飽了撐著沒事幹,一直重啟虛擬機器麼?

你說虛擬機器消耗資源多?絕大部分公司的伺服器資源利用率應該都不到 50%,大量的cpu、記憶體、本地磁碟都是常年浪費的,所以 虛擬機器 的額外開銷不過是浪費了原本就在浪費的資源罷了。所以筆者認為,對於傳統應用來說,使用和不使用docker可能並不能直接給企業帶來好處,相反使用中遇到了問題肯定會給企業帶來麻煩,對於傳統企業來說,不要盲目跟風,vm虛擬機器其實夠用了!。

在技術演進中,docker只是趨勢,並不是結果。相信在未來,一定有更高大上的部署架構出現!

閘道器是什麼 為什麼微服務一定要有閘道器

服務閘道器 路由 過濾器1 路由 接收一切外界請求,到後端的微服務上去 2 過濾器 在服務網關中可以完成一系列的橫切功能,例如許可權校驗 限流以及監控等,這些都可以通過過濾器完成 其實路由 也是通過過濾器實現的 上述所說的橫切功能 以許可權校驗為例 可以寫在三個位置 第一種,缺點太明顯,基本不用 第...

程式設計師為什麼一定要用Linux?

大多數人推薦linux,基本上都會說linux讓你更高效 更優秀。然而工具只是工具。然而工具只是工具。然而工具只是工具。優秀程式設計師和不優秀程式設計師的區別首先是態度上的區別。他們有自己的理想,思考很多,不管是專案開始之前還是在專案進行中,專案完成之後也會進行總結。他們對待問題比較嚴謹,思考比較全...

程式設計師為什麼一定要用Linux

大多數人引薦linux,基本上都會說linux讓你更高效 更優異。然而工具只是工具。然而工具只是工具。然而工具只是工具。優異程式設計師 和不優異程式設計師 的差異首先是態度上的差異。他們有自個的理想,考慮許多,不管是專案開端之前還是在專案進行中,專案完結以後也會進行總結。他們對待疑問對比謹慎,考慮對...