欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

多租戶組件go語言 多租戶組件go語言怎么改

GO語言商業(yè)案例(十八):stream

切換到新語言始終是一大步,尤其是當(dāng)您的團(tuán)隊(duì)成員只有一個(gè)時(shí)有該語言的先前經(jīng)驗(yàn)?,F(xiàn)在,Stream 的主要編程語言從 Python 切換到了 Go。這篇文章將解釋stream決定放棄 Python 并轉(zhuǎn)向 Go 的一些原因。

站在用戶的角度思考問題,與客戶深入溝通,找到蒼梧網(wǎng)站設(shè)計(jì)與蒼梧網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請域名、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋蒼梧地區(qū)。

Go 非??臁P阅茴愃朴?Java 或 C++。對于用例,Go 通常比 Python 快 40 倍。

對于許多應(yīng)用程序來說,編程語言只是應(yīng)用程序和數(shù)據(jù)庫之間的粘合劑。語言本身的性能通常并不重要。然而,Stream 是一個(gè)API 提供商,為 700 家公司和超過 5 億最終用戶提供提要和聊天平臺。多年來,我們一直在優(yōu)化 Cassandra、PostgreSQL、Redis 等,但最終,您會達(dá)到所使用語言的極限。Python 是一門很棒的語言,但對于序列化/反序列化、排名和聚合等用例,它的性能相當(dāng)緩慢。我們經(jīng)常遇到性能問題,Cassandra 需要 1 毫秒來檢索數(shù)據(jù),而 Python 會花費(fèi)接下來的 10 毫秒將其轉(zhuǎn)換為對象。

看看我如何開始 Go 教程中的一小段 Go 代碼。(這是一個(gè)很棒的教程,也是學(xué)習(xí) Go 的一個(gè)很好的起點(diǎn)。)

如果您是 Go 新手,那么在閱讀那個(gè)小代碼片段時(shí)不會有太多讓您感到驚訝的事情。它展示了多個(gè)賦值、數(shù)據(jù)結(jié)構(gòu)、指針、格式和一個(gè)內(nèi)置的 HTTP 庫。當(dāng)我第一次開始編程時(shí),我一直喜歡使用 Python 更高級的功能。Python 允許您在編寫代碼時(shí)獲得相當(dāng)?shù)膭?chuàng)意。例如,您可以:

這些功能玩起來很有趣,但是,正如大多數(shù)程序員會同意的那樣,在閱讀別人的作品時(shí),它們通常會使代碼更難理解。Go 迫使你堅(jiān)持基礎(chǔ)。這使得閱讀任何人的代碼并立即了解發(fā)生了什么變得非常容易。 注意:當(dāng)然,它實(shí)際上有多“容易”取決于您的用例。如果你想創(chuàng)建一個(gè)基本的 CRUD API,我仍然推薦 Django + DRF或 Rails。

作為一門語言,Go 試圖讓事情變得簡單。它沒有引入許多新概念。重點(diǎn)是創(chuàng)建一種非??焖偾乙子谑褂玫暮唵握Z言。它唯一具有創(chuàng)新性的領(lǐng)域是 goroutine 和通道。(100% 正確CSP的概念始于 1977 年,所以這項(xiàng)創(chuàng)新更多是對舊思想的一種新方法。)Goroutines 是 Go 的輕量級線程方法,通道是 goroutines 之間通信的首選方式。Goroutines 的創(chuàng)建非常便宜,并且只需要幾 KB 的額外內(nèi)存。因?yàn)?Goroutine 非常輕量,所以有可能同時(shí)運(yùn)行數(shù)百甚至數(shù)千個(gè)。您可以使用通道在 goroutine 之間進(jìn)行通信。Go 運(yùn)行時(shí)處理所有復(fù)雜性。goroutines 和基于通道的并發(fā)方法使得使用所有可用的 CPU 內(nèi)核和處理并發(fā) IO 變得非常容易——所有這些都不會使開發(fā)復(fù)雜化。與 Python/Java 相比,在 goroutine 上運(yùn)行函數(shù)需要最少的樣板代碼。您只需在函數(shù)調(diào)用前加上關(guān)鍵字“go”:

Go 的并發(fā)方法很容易使用。與 Node 相比,這是一種有趣的方法,開發(fā)人員必須密切關(guān)注異步代碼的處理方式。Go 中并發(fā)的另一個(gè)重要方面是競爭檢測器。這樣可以很容易地確定異步代碼中是否存在任何競爭條件。

我們目前用 Go 編寫的最大的微服務(wù)編譯需要 4 秒。與以編譯速度慢而聞名的 Java 和 C++ 等語言相比,Go 的快速編譯時(shí)間是一項(xiàng)重大的生產(chǎn)力勝利。我喜歡在程序編譯的時(shí)候摸魚,但在我還記得代碼應(yīng)該做什么的同時(shí)完成事情會更好。

首先,讓我們從顯而易見的開始:與 C++ 和 Java 等舊語言相比,Go 開發(fā)人員的數(shù)量并不多。根據(jù)StackOverflow的數(shù)據(jù), 38% 的開發(fā)人員知道 Java, 19.3% 的人知道 C++,只有 4.6% 的人知道 Go。GitHub 數(shù)據(jù)顯示了類似的趨勢:Go 比 Erlang、Scala 和 Elixir 等語言使用更廣泛,但不如 Java 和 C++ 流行。幸運(yùn)的是,Go 是一種非常簡單易學(xué)的語言。它提供了您需要的基本功能,僅此而已。它引入的新概念是“延遲”聲明和內(nèi)置的并發(fā)管理與“goroutines”和通道。(對于純粹主義者來說:Go 并不是第一種實(shí)現(xiàn)這些概念的語言,只是第一種使它們流行起來的語言。)任何加入團(tuán)隊(duì)的 Python、Elixir、C++、Scala 或 Java 開發(fā)人員都可以在一個(gè)月內(nèi)在 Go 上發(fā)揮作用,因?yàn)樗暮唵涡浴Ec許多其他語言相比,我們發(fā)現(xiàn)組建 Go 開發(fā)人員團(tuán)隊(duì)更容易。如果您在博爾德和阿姆斯特丹等競爭激烈的生態(tài)系統(tǒng)中招聘人員,這是一項(xiàng)重要的優(yōu)勢。

對于我們這樣規(guī)模的團(tuán)隊(duì)(約 20 人)來說,生態(tài)系統(tǒng)很重要。如果您必須重新發(fā)明每一個(gè)小功能,您根本無法為您的客戶創(chuàng)造價(jià)值。Go 對我們使用的工具有很好的支持。實(shí)體庫已經(jīng)可用于 Redis、RabbitMQ、PostgreSQL、模板解析、任務(wù)調(diào)度、表達(dá)式解析和 RocksDB。與 Rust 或 Elixir 等其他較新的語言相比,Go 的生態(tài)系統(tǒng)是一個(gè)重大勝利。它當(dāng)然不如 Java、Python 或 Node 之類的語言好,但它很可靠,而且對于許多基本需求,你會發(fā)現(xiàn)已經(jīng)有高質(zhì)量的包可用。

Gofmt 是一個(gè)很棒的命令行實(shí)用程序,內(nèi)置在 Go 編譯器中,用于格式化代碼。就功能而言,它與 Python 的 autopep8 非常相似。我們大多數(shù)人并不真正喜歡爭論制表符與空格。格式的一致性很重要,但實(shí)際的格式標(biāo)準(zhǔn)并不那么重要。Gofmt 通過使用一種正式的方式來格式化您的代碼來避免所有這些討論。

Go 對協(xié)議緩沖區(qū)和 gRPC 具有一流的支持。這兩個(gè)工具非常適合構(gòu)建需要通過 RPC 通信的微服務(wù)。您只需要編寫一個(gè)清單,在其中定義可以進(jìn)行的 RPC 調(diào)用以及它們采用的參數(shù)。然后從這個(gè)清單中自動生成服務(wù)器和客戶端代碼。生成的代碼既快速又具有非常小的網(wǎng)絡(luò)占用空間并且易于使用。從同一個(gè)清單中,您甚至可以為許多不同的語言生成客戶端代碼,例如 C++、Java、Python 和 Ruby。因此,內(nèi)部流量不再有模棱兩可的 REST 端點(diǎn),您每次都必須編寫幾乎相同的客戶端和服務(wù)器代碼。.

Go 沒有像 Rails 用于 Ruby、Django 用于 Python 或 Laravel 用于 PHP 那樣的單一主導(dǎo)框架。這是 Go 社區(qū)內(nèi)激烈爭論的話題,因?yàn)樵S多人主張你不應(yīng)該一開始就使用框架。我完全同意這對于某些用例是正確的。但是,如果有人想構(gòu)建一個(gè)簡單的 CRUD API,他們將更容易使用 Django/DJRF、Rails Laravel 或Phoenix。對于 Stream 的用例,我們更喜歡不使用框架。然而,對于許多希望提供簡單 CRUD API 的新項(xiàng)目來說,缺乏主導(dǎo)框架將是一個(gè)嚴(yán)重的劣勢。

Go 通過簡單地從函數(shù)返回錯(cuò)誤并期望調(diào)用代碼來處理錯(cuò)誤(或?qū)⑵浞祷氐秸{(diào)用堆棧)來處理錯(cuò)誤。雖然這種方法有效,但很容易失去問題的范圍,以確保您可以向用戶提供有意義的錯(cuò)誤。錯(cuò)誤包通過允許您向錯(cuò)誤添加上下文和堆棧跟蹤來解決此問題。另一個(gè)問題是很容易忘記處理錯(cuò)誤。像 errcheck 和 megacheck 這樣的靜態(tài)分析工具可以方便地避免犯這些錯(cuò)誤。雖然這些變通辦法效果很好,但感覺不太對勁。您希望該語言支持正確的錯(cuò)誤處理。

Go 的包管理絕不是完美的。默認(rèn)情況下,它無法指定特定版本的依賴項(xiàng),也無法創(chuàng)建可重現(xiàn)的構(gòu)建。Python、Node 和 Ruby 都有更好的包管理系統(tǒng)。但是,使用正確的工具,Go 的包管理工作得很好。您可以使用Dep來管理您的依賴項(xiàng),以允許指定和固定版本。除此之外,我們還貢獻(xiàn)了一個(gè)名為的開源工具VirtualGo,它可以更輕松地處理用 Go 編寫的多個(gè)項(xiàng)目。

我們進(jìn)行的一個(gè)有趣的實(shí)驗(yàn)是在 Python 中使用我們的排名提要功能并在 Go 中重寫它??纯催@個(gè)排名方法的例子:

Python 和 Go 代碼都需要執(zhí)行以下操作來支持這種排名方法:

開發(fā) Python 版本的排名代碼大約花了 3 天時(shí)間。這包括編寫代碼、單元測試和文檔。接下來,我們花了大約 2 周的時(shí)間優(yōu)化代碼。其中一項(xiàng)優(yōu)化是將分?jǐn)?shù)表達(dá)式 (simple_gauss(time)*popularity) 轉(zhuǎn)換為抽象語法樹. 我們還實(shí)現(xiàn)了緩存邏輯,可以在未來的特定時(shí)間預(yù)先計(jì)算分?jǐn)?shù)。相比之下,開發(fā)此代碼的 Go 版本大約需要 4 天時(shí)間。性能不需要任何進(jìn)一步的優(yōu)化。因此,雖然 Python 的最初開發(fā)速度更快,但基于 Go 的版本最終需要我們團(tuán)隊(duì)的工作量大大減少。另外一個(gè)好處是,Go 代碼的執(zhí)行速度比我們高度優(yōu)化的 Python 代碼快大約 40 倍?,F(xiàn)在,這只是我們通過切換到 Go 體驗(yàn)到的性能提升的一個(gè)示例。

與 Python 相比,我們系統(tǒng)的其他一些組件在 Go 中構(gòu)建所需的時(shí)間要多得多。作為一個(gè)總體趨勢,我們看到 開發(fā) Go 代碼需要更多的努力。但是,我們花更少的時(shí)間 優(yōu)化 代碼以提高性能。

我們評估的另一種語言是Elixir.。Elixir 建立在 Erlang 虛擬機(jī)之上。這是一種迷人的語言,我們之所以考慮它,是因?yàn)槲覀兊囊幻麍F(tuán)隊(duì)成員在 Erlang 方面擁有豐富的經(jīng)驗(yàn)。對于我們的用例,我們注意到 Go 的原始性能要好得多。Go 和 Elixir 都可以很好地服務(wù)數(shù)千個(gè)并發(fā)請求。但是,如果您查看單個(gè)請求的性能,Go 對于我們的用例來說要快得多。我們選擇 Go 而不是 Elixir 的另一個(gè)原因是生態(tài)系統(tǒng)。對于我們需要的組件,Go 有更成熟的庫,而在許多情況下,Elixir 庫還沒有準(zhǔn)備好用于生產(chǎn)環(huán)境。培訓(xùn)/尋找開發(fā)人員使用 Elixir 也更加困難。這些原因使天平向 Go 傾斜。Elixir 的 Phoenix 框架看起來很棒,絕對值得一看。

Go 是一種非常高性能的語言,對并發(fā)有很好的支持。它幾乎與 C++ 和 Java 等語言一樣快。雖然與 Python 或 Ruby 相比,使用 Go 構(gòu)建東西確實(shí)需要更多時(shí)間,但您將節(jié)省大量用于優(yōu)化代碼的時(shí)間。我們在Stream有一個(gè)小型開發(fā)團(tuán)隊(duì),為超過 5 億最終用戶提供動力和聊天。Go 結(jié)合了 強(qiáng)大的生態(tài)系統(tǒng) 、新開發(fā)人員的 輕松入門、快速的性能 、對并發(fā)的 可靠支持和高效的編程環(huán)境 ,使其成為一個(gè)不錯(cuò)的選擇。Stream 仍然在我們的儀表板、站點(diǎn)和機(jī)器學(xué)習(xí)中利用 Python 來提供個(gè)性化的訂閱源. 我們不會很快與 Python 說再見,但今后所有性能密集型代碼都將使用 Go 編寫。我們新的聊天 API也完全用 Go 編寫。

Kubernetes 面試題干貨集錦

簡述 etcd 及其特點(diǎn)?

答:etcd 是 CoreOS 團(tuán)隊(duì)發(fā)起的開源項(xiàng)目,是一個(gè)管理配置信息和服務(wù)發(fā)現(xiàn)

(service discovery)的項(xiàng)目,它的目標(biāo)是構(gòu)建一個(gè)高可用的分布式鍵值(key-value)

數(shù)據(jù)庫,基于 Go 語言實(shí)現(xiàn)。

特點(diǎn):

l 簡單:支持 REST 風(fēng)格的 HTTP+JSON API

l 安全:支持 HTTPS 方式的訪問

l 快速:支持并發(fā) 1k/s 的寫操作

l 可靠:支持分布式結(jié)構(gòu),基于 Raft 的一致性算法,Raft 是一套通過選舉主節(jié)點(diǎn)來

實(shí)現(xiàn)分布式系統(tǒng)一致性的算法。

簡述 etcd 適應(yīng)的場景?

答:etcd 基于其優(yōu)秀的特點(diǎn),可廣泛的應(yīng)用于以下場景:

l 服務(wù)發(fā)現(xiàn)(Service Discovery):服務(wù)發(fā)現(xiàn)主要解決在同一個(gè)分布式集群中的進(jìn)程

或服務(wù),要如何才能找到對方并建立連接。本質(zhì)上來說,服務(wù)發(fā)現(xiàn)就是想要了解

集群中是否有進(jìn)程在監(jiān)聽 udp 或 tcp 端口,并且通過名字就可以查找和連接。

一些配置信息放到 etcd 上進(jìn)行集中管理。

l 負(fù)載均衡:在分布式系統(tǒng)中,為了保證服務(wù)的高可用以及數(shù)據(jù)的一致性,通常都

會把數(shù)據(jù)和服務(wù)部署多份,以此達(dá)到對等服務(wù),即使其中的某一個(gè)服務(wù)失效了,

也不影響使用。etcd 本身分布式架構(gòu)存儲的信息訪問支持負(fù)載均衡。etcd 集群化

以后,每個(gè) etcd 的核心節(jié)點(diǎn)都可以處理用戶的請求。所以,把數(shù)據(jù)量小但是訪問

頻繁的消息數(shù)據(jù)直接存儲到 etcd 中也可以實(shí)現(xiàn)負(fù)載均衡的效果。

通過注冊與異步通知機(jī)制,實(shí)現(xiàn)分布式環(huán)境下不同系統(tǒng)之間的通知與協(xié)調(diào),從而

對數(shù)據(jù)變更做到實(shí)時(shí)處理。

l 分布式鎖:因?yàn)?etcd 使用 Raft 算法保持了數(shù)據(jù)的強(qiáng)一致性,某次操作存儲到集

群中的值必然是全局一致的,所以很容易實(shí)現(xiàn)分布式鎖。鎖服務(wù)有兩種使用方式,

一是保持獨(dú)占,二是控制時(shí)序。

l 集群監(jiān)控與 Leader 競選:通過 etcd 來進(jìn)行監(jiān)控實(shí)現(xiàn)起來非常簡單并且實(shí)時(shí)性強(qiáng)。

簡述 Kubernetes 和 Docker 的關(guān)系?

答:Docker 提供容器的生命周期管理和,Docker 鏡像構(gòu)建運(yùn)行時(shí)容器。它的主要優(yōu)

點(diǎn)是將將軟件/應(yīng)用程序運(yùn)行所需的設(shè)置和依賴項(xiàng)打包到一個(gè)容器中,從而實(shí)現(xiàn)了可移

植性等優(yōu)點(diǎn)。

Kubernetes 用于關(guān)聯(lián)和編排在多個(gè)主機(jī)上運(yùn)行的容器。

簡述 Kubernetes 中什么是 Minikube、Kubectl、Kubelet?

答:Minikube 是一種可以在本地輕松運(yùn)行一個(gè)單節(jié)點(diǎn) Kubernetes 群集的工具。

Kubectl 是一個(gè)命令行工具,可以使用該工具控制 Kubernetes 集群管理器,如檢查

群集資源,創(chuàng)建、刪除和更新組件,查看應(yīng)用程序。

Kubelet 是一個(gè)代理服務(wù),它在每個(gè)節(jié)點(diǎn)上運(yùn)行,并使從服務(wù)器與主服務(wù)器通信。

簡述 Kubernetes 常見的部署方式?

答:常見的 Kubernetes 部署方式有:

l kubeadm:也是推薦的一種部署方式;

l 二進(jìn)制:

l minikube:在本地輕松運(yùn)行一個(gè)單節(jié)點(diǎn) Kubernetes 群集的工具。

簡述 Kubernetes 如何實(shí)現(xiàn)集群管理?

答:在集群管理方面,Kubernetes 將集群中的機(jī)器劃分為一個(gè) Master 節(jié)點(diǎn)和一群工

作節(jié)點(diǎn) Node。其中,在 Master 節(jié)點(diǎn)運(yùn)行著集群管理相關(guān)的一組進(jìn)程 kube

apiserver、kube-controller-manager 和 kube-scheduler,這些進(jìn)程實(shí)現(xiàn)了整個(gè)集

群的資源管理、Pod 調(diào)度、彈性伸縮、安全控制、系統(tǒng)監(jiān)控和糾錯(cuò)等管理能力,并且

都是全自動完成的。

簡述 Kubernetes 相關(guān)基礎(chǔ)概念?

答:

l master:k8s 集群的管理節(jié)點(diǎn),負(fù)責(zé)管理集群,提供集群的資源數(shù)據(jù)訪問入口。

擁有 Etcd 存儲服務(wù)(可選),運(yùn)行 Api Server 進(jìn)程,Controller Manager 服務(wù)

進(jìn)程及 Scheduler 服務(wù)進(jìn)程。

l node(worker):Node(worker)是 Kubernetes 集群架構(gòu)中運(yùn)行 Pod 的服

務(wù)節(jié)點(diǎn),是 Kubernetes 集群操作的單元,用來承載被分配 Pod 的運(yùn)行,是 Pod

運(yùn)行的宿主機(jī)。運(yùn)行 docker eninge 服務(wù),守護(hù)進(jìn)程 kunelet 及負(fù)載均衡器

kube-proxy。

l pod:運(yùn)行于 Node 節(jié)點(diǎn)上,若干相關(guān)容器的組合。Pod 內(nèi)包含的容器運(yùn)行在同

一宿主機(jī)上,使用相同的網(wǎng)絡(luò)命名空間、IP 地址和端口,能夠通過 localhost 進(jìn)行通信。Pod 是 Kurbernetes 進(jìn)行創(chuàng)建、調(diào)度和管理的最小單位,它提供了比容

器更高層次的抽象,使得部署和管理更加靈活。一個(gè) Pod 可以包含一個(gè)容器或者

多個(gè)相關(guān)容器。

l label:Kubernetes 中的 Label 實(shí)質(zhì)是一系列的 Key/Value 鍵值對,其中 key 與

value 可自定義。Label 可以附加到各種資源對象上,如 Node、Pod、Service、

RC 等。一個(gè)資源對象可以定義任意數(shù)量的 Label,同一個(gè) Label 也可以被添加到

任意數(shù)量的資源對象上去。Kubernetes 通過 Label Selector(標(biāo)簽選擇器)查詢

和篩選資源對象。

l Replication Controller:Replication Controller 用來管理 Pod 的副本,保證集

群中存在指定數(shù)量的 Pod 副本。集群中副本的數(shù)量大于指定數(shù)量,則會停止指定

數(shù)量之外的多余容器數(shù)量。反之,則會啟動少于指定數(shù)量個(gè)數(shù)的容器,保證數(shù)量

不變。Replication Controller 是實(shí)現(xiàn)彈性伸縮、動態(tài)擴(kuò)容和滾動升級的核心。

l Deployment:Deployment 在內(nèi)部使用了 RS 來實(shí)現(xiàn)目的,Deployment 相當(dāng)

于 RC 的一次升級,其最大的特色為可以隨時(shí)獲知當(dāng)前 Pod 的部署進(jìn)度。

l HPA(Horizontal Pod Autoscaler):Pod 的橫向自動擴(kuò)容,也是 Kubernetes

的一種資源,通過追蹤分析 RC 控制的所有 Pod 目標(biāo)的負(fù)載變化情況,來確定是

否需要針對性的調(diào)整 Pod 副本數(shù)量。

l Service:Service 定義了 Pod 的邏輯集合和訪問該集合的策略,是真實(shí)服務(wù)的抽

象。Service 提供了一個(gè)統(tǒng)一的服務(wù)訪問入口以及服務(wù)代理和發(fā)現(xiàn)機(jī)制,關(guān)聯(lián)多個(gè)

相同 Label 的 Pod,用戶不需要了解后臺 Pod 是如何運(yùn)行。

l Volume:Volume 是 Pod 中能夠被多個(gè)容器訪問的共享目錄,Kubernetes 中的

Volume 是定義在 Pod 上,可以被一個(gè)或多個(gè) Pod 中的容器掛載到某個(gè)目錄下。l Namespace:Namespace 用于實(shí)現(xiàn)多租戶的資源隔離,可將集群內(nèi)部的資源對

象分配到不同的 Namespace 中,形成邏輯上的不同項(xiàng)目、小組或用戶組,便于

不同的 Namespace 在共享使用整個(gè)集群的資源的同時(shí)還能被分別管理。

簡述 Kubernetes RC 的機(jī)制?

答:Replication Controller 用來管理 Pod 的副本,保證集群中存在指定數(shù)量的 Pod

副本。當(dāng)定義了 RC 并提交至 Kubernetes 集群中之后,Master 節(jié)點(diǎn)上的 Controller

Manager 組件獲悉,并同時(shí)巡檢系統(tǒng)中當(dāng)前存活的目標(biāo) Pod,并確保目標(biāo) Pod 實(shí)例的數(shù)量剛好等于此 RC 的期望值,若存在過多的 Pod 副本在運(yùn)行,系統(tǒng)會停止一些

Pod,反之則自動創(chuàng)建一些 Pod。

簡述 Kubernetes 中 Pod 的重啟策略?

答:Pod 重啟策略(RestartPolicy)應(yīng)用于 Pod 內(nèi)的所有容器,并且僅在 Pod 所處

的 Node 上由 kubelet 進(jìn)行判斷和重啟操作。當(dāng)某個(gè)容器異常退出或者 健康 檢查失敗

時(shí),kubelet 將根據(jù) RestartPolicy 的設(shè)置來進(jìn)行相應(yīng)操作。

Pod 的重啟策略包括 Always、OnFailure 和 Never,默認(rèn)值為 Always。

l Always:當(dāng)容器失效時(shí),由 kubelet 自動重啟該容器;

l OnFailure:當(dāng)容器終止運(yùn)行且退出碼不為 0 時(shí),由 kubelet 自動重啟該容器;

l Never:不論容器運(yùn)行狀態(tài)如何,kubelet 都不會重啟該容器。

同時(shí) Pod 的重啟策略與控制方式關(guān)聯(lián),當(dāng)前可用于管理 Pod 的控制器包括

ReplicationController、Job、DaemonSet 及直接管理 kubelet 管理(靜態(tài) Pod)。

不同控制器的重啟策略限制如下:

l RC 和 DaemonSet:必須設(shè)置為 Always,需要保證該容器持續(xù)運(yùn)行;

l Job:OnFailure 或 Never,確保容器執(zhí)行完成后不再重啟;

l kubelet:在 Pod 失效時(shí)重啟,不論將 RestartPolicy 設(shè)置為何值,也不會對 Pod

進(jìn)行 健康 檢查。

簡述 Kubernetes Pod 的 LivenessProbe 探針的常見方式?

答:kubelet 定期執(zhí)行 LivenessProbe 探針來診斷容器的 健康 狀態(tài),通常有以下三種

方式:

l ExecAction:在容器內(nèi)執(zhí)行一個(gè)命令,若返回碼為 0,則表明容器 健康 。

l TCPSocketAction:通過容器的 IP 地址和端口號執(zhí)行 TCP 檢查,若能建立 TCP

連接,則表明容器 健康 。

l HTTPGetAction:通過容器的 IP 地址、端口號及路徑調(diào)用 HTTP Get 方法,若響

應(yīng)的狀態(tài)碼大于等于 200 且小于 400,則表明容器 健康 。

. 簡述 Kubernetes Pod 的常見調(diào)度方式?

答:Kubernetes 中,Pod 通常是容器的載體,主要有如下常見調(diào)度方式:

l Deployment 或 RC:該調(diào)度策略主要功能就是自動部署一個(gè)容器應(yīng)用的多份副本,

以及持續(xù)監(jiān)控副本的數(shù)量,在集群內(nèi)始終維持用戶指定的副本數(shù)量。

l NodeSelector:定向調(diào)度,當(dāng)需要手動指定將 Pod 調(diào)度到特定 Node 上,可以

通過 Node 的標(biāo)簽(Label)和 Pod 的 nodeSelector 屬性相匹配。

l NodeAffinity 親和性調(diào)度:親和性調(diào)度機(jī)制極大的擴(kuò)展了 Pod 的調(diào)度能力,目前

有兩種節(jié)點(diǎn)親和力表達(dá):

l requiredDuringSchedulingIgnoredDuringExecution:硬規(guī)則,必須滿足指定

的規(guī)則,調(diào)度器才可以調(diào)度 Pod 至 Node 上(類似 nodeSelector,語法不同)。

l preferredDuringSchedulingIgnoredDuringExecution:軟規(guī)則,優(yōu)先調(diào)度至滿

足的 Node 的節(jié)點(diǎn),但不強(qiáng)求,多個(gè)優(yōu)先級規(guī)則還可以設(shè)置權(quán)重值。

l Taints 和 Tolerations(污點(diǎn)和容忍):

l Taint:使 Node 拒絕特定 Pod 運(yùn)行;

l Toleration:為 Pod 的屬性,表示 Pod 能容忍(運(yùn)行)標(biāo)注了 Taint 的 Node。

簡述 Kubernetes DaemonSet 類型的資源特性?

答:DaemonSet 資源對象會在每個(gè) Kubernetes 集群中的節(jié)點(diǎn)上運(yùn)行,并且每個(gè)節(jié)

點(diǎn)只能運(yùn)行一個(gè) pod,這是它和 deployment 資源對象的最大也是唯一的區(qū)別。因此,

在定義 yaml 文件中,不支持定義 replicas。

它的一般使用場景如下:

l 在去做每個(gè)節(jié)點(diǎn)的日志收集工作。

l 監(jiān)控每個(gè)節(jié)點(diǎn)的的運(yùn)行狀態(tài)。

簡述 Kubernetes Service 分發(fā)后端的策略?

答:Service 負(fù)載分發(fā)的策略有:RoundRobin 和 SessionAffinity

l RoundRobin:默認(rèn)為輪詢模式,即輪詢將請求轉(zhuǎn)發(fā)到后端的各個(gè) Pod 上。

l SessionAffinity:基于客戶端 IP 地址進(jìn)行會話保持的模式,即第 1 次將某個(gè)客戶

端發(fā)起的請求轉(zhuǎn)發(fā)到后端的某個(gè) Pod 上,之后從相同的客戶端發(fā)起的請求都將被

轉(zhuǎn)發(fā)到后端相同的 Pod 上。

簡述 Kubernetes Scheduler 使用哪兩種算法將 Pod 綁定到 worker 節(jié)點(diǎn)?

答:Kubernetes Scheduler 根據(jù)如下兩種調(diào)度算法將 Pod 綁定到最合適的工作節(jié)點(diǎn):

l 預(yù)選(Predicates):輸入是所有節(jié)點(diǎn),輸出是滿足預(yù)選條件的節(jié)點(diǎn)。kube

scheduler 根據(jù)預(yù)選策略過濾掉不滿足策略的 Nodes。如果某節(jié)點(diǎn)的資源不足或

者不滿足預(yù)選策略的條件則無法通過預(yù)選。如“Node 的 label 必須與 Pod 的

Selector 一致”。

l 優(yōu)選(Priorities):輸入是預(yù)選階段篩選出的節(jié)點(diǎn),優(yōu)選會根據(jù)優(yōu)先策略為通過

預(yù)選的 Nodes 進(jìn)行打分排名,選擇得分最高的 Node。例如,資源越富裕、負(fù)載

越小的 Node 可能具有越高的排名。

簡述 Kubernetes Secret 有哪些使用方式?

答:創(chuàng)建完 secret 之后,可通過如下三種方式使用:

l 在創(chuàng)建 Pod 時(shí),通過為 Pod 指定 Service Account 來自動使用該 Secret。

l 通過掛載該 Secret 到 Pod 來使用它。

l 在 Docker 鏡像下載時(shí)使用,通過指定 Pod 的 spc.ImagePullSecrets 來引用它。

簡述 Kubernetes 網(wǎng)絡(luò)策略原理?

答:Network Policy 的工作原理主要為:policy controller 需要實(shí)現(xiàn)一個(gè) API

Listener,監(jiān)聽用戶設(shè)置的 Network Policy 定義,并將網(wǎng)絡(luò)訪問規(guī)則通過各 Node 的

Agent 進(jìn)行實(shí)際設(shè)置(Agent 則需要通過 CNI 網(wǎng)絡(luò)插件實(shí)現(xiàn))。

簡述 Kubernetes 集群聯(lián)邦?

答:Kubernetes 集群聯(lián)邦可以將多個(gè) Kubernetes 集群作為一個(gè)集群進(jìn)行管理。因此,

可以在一個(gè)數(shù)據(jù)中心/云中創(chuàng)建多個(gè) Kubernetes 集群,并使用集群聯(lián)邦在一個(gè)地方控

制/管理所有集群。

簡述 Kubernetes 如何進(jìn)行優(yōu)雅的節(jié)點(diǎn)關(guān)機(jī)維護(hù)?

答:由于 Kubernetes 節(jié)點(diǎn)運(yùn)行大量 Pod,因此在進(jìn)行關(guān)機(jī)維護(hù)之前,建議先使用

kubectl drain 將該節(jié)點(diǎn)的 Pod 進(jìn)行驅(qū)逐,然后進(jìn)行關(guān)機(jī)維護(hù)。

. 簡述 Kubernetes 中,如何使用 EFK 實(shí)現(xiàn)日志的統(tǒng)一管理?

答:在 Kubernetes 集群環(huán)境中,通常一個(gè)完整的應(yīng)用或服務(wù)涉及組件過多,建議對

日志系統(tǒng)進(jìn)行集中化管理,通常采用 EFK 實(shí)現(xiàn)。

EFK 是 Elasticsearch、Fluentd 和 Kibana 的組合,其各組件功能如下:

l Elasticsearch:是一個(gè)搜索引擎,負(fù)責(zé)存儲日志并提供查詢接口;

l Fluentd:負(fù)責(zé)從 Kubernetes 搜集日志,每個(gè) node 節(jié)點(diǎn)上面的 fluentd 監(jiān)控并

收集該節(jié)點(diǎn)上面的系統(tǒng)日志,并將處理過后的日志信息發(fā)送給 Elasticsearch;

l Kibana:提供了一個(gè) Web GUI,用戶可以瀏覽和搜索存儲在 Elasticsearch 中的

日志。通過在每臺 node 上部署一個(gè)以 DaemonSet 方式運(yùn)行的 fluentd 來收集每臺 node

上的日志。Fluentd 將 docker 日志目錄/var/lib/docker/containers 和/var/log 目錄

掛載到 Pod 中,然后 Pod 會在 node 節(jié)點(diǎn)的/var/log/pods 目錄中創(chuàng)建新的目錄,可

以區(qū)別不同的容器日志輸出,該目錄下有一個(gè)日志文件鏈接到

/var/lib/docker/contianers 目錄下的容器日志輸出。

組件分享之后端組件——基于Go語言的HTML和CSS網(wǎng)站生成器Hugo

近期正在探索前端、后端、系統(tǒng)端各類常用組件與工具,對其一些常見的組件進(jìn)行再次整理一下,形成標(biāo)準(zhǔn)化組件專題,后續(xù)該專題將包含各類語言中的一些常用組件。歡迎大家進(jìn)行持續(xù)關(guān)注。

本節(jié)分享一個(gè)基于Go語言的HTML和CSS網(wǎng)站生成器 hugo ,它針對速度、易用性和可配置性進(jìn)行了優(yōu)化。Hugo 獲取一個(gè)包含內(nèi)容和模板的目錄,并將它們呈現(xiàn)為一個(gè)完整的 HTML 網(wǎng)站。Hugo 依賴于 Markdown 文件和元數(shù)據(jù)的前端,你可以從任何目錄運(yùn)行 Hugo。這適用于您沒有特權(quán)帳戶的共享主機(jī)和其他系統(tǒng)。例如我們?nèi)粘>帉懸恍┎┛臀恼?,進(jìn)行快速生成一套靜態(tài)頁面進(jìn)行分享時(shí)可以使用它來進(jìn)行生成一套靜態(tài)頁面作為我們的博客部署基礎(chǔ)。

它支持大量的主題模板,我們可以通過 進(jìn)行選擇相關(guān)的主題使用,有興趣的小伙伴可以進(jìn)行深入研究一下

本文名稱:多租戶組件go語言 多租戶組件go語言怎么改
URL網(wǎng)址:http://chinadenli.net/article22/dodshjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、靜態(tài)網(wǎng)站、品牌網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站導(dǎo)航、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司