1. 程式人生 > 其它 >位元組跳動架構師講解Java開發!2021Java面試筆試總結

位元組跳動架構師講解Java開發!2021Java面試筆試總結

位元組跳動架構師講解Java開發!2021Java面試筆試總結

容器化時代來了

虛擬化技術已經走過了三個時代,沒有容器化技術的演進就不會有 Docker 技術的誕生。

虛擬化技術演進

(1)物理機時代:多個應用程式可能會跑在一臺機器上。

(2)虛擬機器時代:一臺物理機器安裝多個虛擬機器(VM),一個虛擬機器跑多個程式。

(3)容器化時代:一臺物理機安裝多個容器例項(container),一個容器跑多個程式。

容器化解決了軟體開發過程中一個令人非常頭疼的問題,用一段對話描述:

測試人員:你這個功能有問題。

開發人員:我本地是好的啊。

開發人員編寫程式碼,在自己本地環境測試完成後,將程式碼部署到測試或生產環境中,經常會遇到各種各樣的問題。明明本地完美執行的程式碼為什麼部署後出現很多 bug,原因有很多:不同的作業系統、不同的依賴庫等,總結一句話就是因為本地環境和遠端環境不一致。

容器化技術正好解決了這一關鍵問題,它將軟體程式和執行的基礎環境分開。開發人員編碼完成後將程式打包到一個容器映象中,映象中詳細列出了所依賴的環境,在不同的容器中執行標準化的映象,從根本上解決了環境不一致的問題。

容器化技術的尖刀武器

容器化技術的特點:

  • 可移植性:不依賴具體的作業系統或雲平臺,比如在阿里雲或騰訊雲直接隨意遷移。
  • 佔地小:容器只需要其應用程式以及它需要執行的所有容器和庫的依賴清單,不需要將所有的依賴庫都打包在一起。
  • 共享 bin 和 lib:不同的容器可以共享 bin 和 lib,進一步節省了空間。

Docker 橫空出世

2010年一位年輕小夥子在美國舊金山成立了一家名叫【dotCloud】的公司, 開發了 Docker的核心技術,從此開啟了容器技術的時代。

後面 dotCloud 公司將自己的容器技術進行了簡化和標準化,取名為 Docker,就是大家熟悉的鯨魚 logo。

2013年dotCloud 公司宣佈將 Docker 開源,隨著越來越多的工程師發現了它的優點, Docker 的人氣迅速攀升,成為當時最火爆的開源技術之一。

當前有30%以上的企業在其AWS環境中使用Docker,並且這個數字還在繼續增長。

Docker怎麼用?

其實大多數人談論 Docker 時說的是 Docker Engine,這只是一個構建和執行的容器。

在執行容器前需要編寫Docker File,通過 dockerFile 生成映象,然後才能執行 Docker 容器。

Docker File 定義了執行映象(image)所需的所有內容,包括作業系統和軟體安裝位置。一般情況下都不需要從頭開始編寫 Docker File,在 Docker Hub 中有來自世界各地的工程師編寫好的映象,你可以基於此修改。

編排系統的需求催生 k8s

儘管Docker為容器化的應用程式提供了開放標準,但隨著容器越來越多出現了一系列新問題:

  • 如何協調和排程這些容器?
  • 如何在升級應用程式時不會中斷服務?
  • 如何監視應用程式的執行狀況?
  • 如何批量重新啟動容器裡的程式?

解決這些問題需要容器編排技術,可以將眾多機器抽象,對外呈現出一臺超大機器。現在業界比較流行的有:k8s、Mesos、Docker Swarm。

在業務發展初期只有幾個微服務,這時用 Docker 就足夠了,但隨著業務規模逐漸擴大,容器越來越多,運維人員的工作越來越複雜,這個時候就需要編排系統解救opers。

一個成熟的容器編排系統需要具備以下能力:

  • 處理大量的容器和使用者
  • 負載均衡
  • 鑑權和安全性
  • 管理服務通訊
  • 多平臺部署

k8s與Docker Swarm江湖恩怨

如果你非要拿 Docker 和 k8s 進行比較,其實你更應該拿 Docker Swarm 和 k8s 比較。

Docker Swarm 是 Docker 自家針對叢集化部署管理的解決方案,優點很明顯,可以更緊密整合到 Docker 生態系統中。

雖說 Swarm 是 Docker 親兒子,但依舊沒有 k8s 流行,不流行很大程度是因為商業、生態的原因,不多解釋。

k8s是做什麼用的?

K8s是Google研發的容器協調器,已捐贈給CNCF,現已開源。

Google 利用在容器管理多年的經驗和專業知識推出了 k8s,主要用於自動化部署應用程式容器,可以支援眾多容器化工具包括現在非常流行的Docker。

目前k8s 是容器編排市場的領導者,開源並公佈了一系列標準化方法,主流的公有云平臺都宣佈支援。

一流的廠商都在搶佔標準的制高點,一堆小廠商跟著一起玩,這就叫生態了。國內的大廠商都在幹嘛呢?搶社群團購市場,玩資本遊戲,哎?!

K8s 架構和元件

k8s 由眾多元件組成,元件間通過 API 互相通訊,歸納起來主要分為三個部分:

  • controller manager
  • nodes
  • pods

Controller Manager,即控制平面,用於排程程式以及節點狀態檢測。

  • Nodes,構成了Kubernetes叢集的集體計算能力,實際部署容器執行的地方。
  • Pods,Kubernetes叢集中資源的最小單位。

Docker與k8s 難捨難分

Docker 和 k8s 在業界非常流行,都已經是事實上的標準。

Docker 是用於構建、分發、執行容器的平臺和工具。

而 k8s 實際上是一個使用 Docker 容器進行編排的系統,主要圍繞 pods 進行工作。Pods 是 k8s 生態中最小的排程單位,可以包含一個或多個容器。

Docker 和 k8s 是根本上不同的技術,兩者可以很好的協同工作。

資料分享

這是我從某優質機構弄來的一些資料,內容我認為確實稱得上優質二字,如需領取,請點贊這篇文章,關注我然後點選這裡即可免費領取

首先分享一份學習大綱,內容較多,涵蓋了網際網路行業所有的流行以及核心技術,以截圖形式分享:

(億級流量效能調優實戰+一線大廠分散式實戰+架構師築基必備技能+設計思想開源框架解讀+效能直線提升架構技術+高效儲存讓專案效能起飛+分散式擴充套件到微服務架構.........實在是太多了)

其次分享一些技術知識,以截圖形式分享一部分:

Tomcat架構解析:

演算法訓練+高分寶典:

Spring Cloud+Docker微服務實戰:

最後分享一波面試資料:

切莫死記硬背,小心面試官直接讓你出門右拐

1000道網際網路Java面試題:

Java高階架構面試知識整理: