go語言守護進程運行 golang守護進程

為什么要使用 Go 語言?Go 語言的優(yōu)勢在哪里

1、學習曲線

創(chuàng)新互聯(lián)公司專注于網(wǎng)站建設(shè)|網(wǎng)頁維護|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計與制作經(jīng)驗,為許多企業(yè)提供了網(wǎng)站定制設(shè)計服務(wù),案例作品覆蓋混凝土攪拌罐等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷售的產(chǎn)品,結(jié)合品牌形象的塑造,量身開發(fā)品質(zhì)網(wǎng)站。

它包含了類C語法、GC內(nèi)置和工程工具。這一點非常重要,因為Go語言容易學習,所以一個普通的大學生花一個星期就能寫出來可以上手的、高性能的應(yīng)用。在國內(nèi)大家都追求快,這也是為什么國內(nèi)Go流行的原因之一。

2、效率

Go擁有接近C的運行效率和接近PHP的開發(fā)效率,這就很有利的支撐了上面大家追求快速的需求。

3、出身名門、血統(tǒng)純正

之所以說Go語言出身名門,是因為我們知道Go語言出自Google公司,這個公司在業(yè)界的知名度和實力自然不用多說。Google公司聚集了一批牛人,在各種編程語言稱雄爭霸的局面下推出新的編程語言,自然有它的戰(zhàn)略考慮。而且從Go語言的發(fā)展態(tài)勢來看,Google對它這個新的寵兒還是很看重的,Go自然有一個良好的發(fā)展前途。我們看看Go語言的主要創(chuàng)造者,血統(tǒng)純正這點就可見端倪了。

4、組合的思想、無侵入式的接口

Go語言可以說是開發(fā)效率和運行效率二者的完美融合,天生的并發(fā)編程支持。Go語言支持當前所有的編程范式,包括過程式編程、面向?qū)ο缶幊桃约昂瘮?shù)式編程。

5、強大的標準庫

這包括互聯(lián)網(wǎng)應(yīng)用、系統(tǒng)編程和網(wǎng)絡(luò)編程。Go里面的標準庫基本上已經(jīng)是非常穩(wěn)定,特別是我這里提到的三個,網(wǎng)絡(luò)層、系統(tǒng)層的庫非常實用。

6、部署方便

我相信這一點是很多人選擇Go的最大理由,因為部署太方便,所以現(xiàn)在也有很多人用Go開發(fā)運維程序。

7、簡單的并發(fā)

它包含降低心智的并發(fā)和簡易的數(shù)據(jù)同步,我覺得這是Go最大的特色。之所以寫正確的并發(fā)、容錯和可擴展的程序如此之難,是因為我們用了錯誤的工具和錯誤的抽象,Go可以說這一塊做的相當簡單。

8、穩(wěn)定性

Go擁有強大的編譯檢查、嚴格的編碼規(guī)范和完整的軟件生命周期工具,具有很強的穩(wěn)定性,穩(wěn)定壓倒一切。那么為什么Go相比于其他程序會更穩(wěn)定呢?這是因為Go提供了軟件生命周期的各個環(huán)節(jié)的工具,如go

tool、gofmt、go test。

如何運行一個golang程序為守護進程

您好,很高興為您解答。

安裝daemonize

安裝git環(huán)境

yum?install?git?-y

獲取daemonize

git?clone?git://github.com/bmc/daemonize.git

安裝daemonize

cd?daemonize

./configure

make??make?install

查看是否安裝

daemonize?-v

通過daemonize執(zhí)行g(shù)olang守護進程

需要打包golang程序為可執(zhí)行文件(go build),并通過daemonize來執(zhí)行它來實現(xiàn)守護進程,如:

daemonize?-p?/var/run/myapp.pid?-l?/var/lock/subsys/myapp?-u?nobody?/path/to/myapp

如若滿意,請點擊右側(cè)【采納答案】,如若還有問題,請點擊【追問】

希望我的回答對您有所幫助,望采納!

~?O(∩_∩)O~

Consul簡介及環(huán)境搭建

Consul是由HashiCorp基于Go語言開發(fā)的支持多數(shù)據(jù)中心的分布式高可用服務(wù)發(fā)布和注冊軟件, 采用Raft算法保持服務(wù)的一致性, 且支持健康檢查.

和Eureka的侵入式服務(wù)中心不同的是, Consul是以獨立的軟件形式運行, 對項目侵入性小, 更方便部署.

上圖為多機房數(shù)據(jù)中心部署, 每個數(shù)據(jù)中心至少三臺Consul, 一臺LEADER, 另外的兩臺是FOLLOWER.

代理是Consul集群上每個成員的守護進程, 它是由consul agent命令開始運行. 代理能夠以客戶端或服務(wù)器模式運行. 由于所有節(jié)點都必須運行代理, 所以將節(jié)點引用為客戶端或服務(wù)器更為簡單, 但還有其他實例的代理. 所有代理可以運行DNS或HTTP接口, 并負責運行檢查和保持服務(wù)同步.

客戶端可以將所有RPC請求轉(zhuǎn)發(fā)到服務(wù)器的代理. 客戶端是相對無狀態(tài)的. 客戶端執(zhí)行的唯一后臺活動是LANgossip池. 它消耗最小的資源開銷和少量的網(wǎng)絡(luò)帶寬.

服務(wù)器端是具有擴展的功能的代理, 它主要參與維護集群狀態(tài), 響應(yīng)RPC查詢, 與其他數(shù)據(jù)中心交換WAN gossip, 以及向leader節(jié)點或遠程數(shù)據(jù)中心轉(zhuǎn)發(fā)查詢.

雖然數(shù)據(jù)中心的定義似乎很明顯, 但仍有一些細微的細節(jié)必須考慮. 比如說, 在EC2中, 多個可用中心 (EC2和AZ是AWS里的概念, 不了解的話可以去看看AWS文檔) 是否應(yīng)該被認為是一個單個的數(shù)據(jù)中心呢? 我們將一個數(shù)據(jù)中心定義為一個私有, 低延遲和高帶寬的網(wǎng)絡(luò)環(huán)境, 這不包括通過公共互聯(lián)網(wǎng)的通信. 但是為了我們的目的, 單個EC2區(qū)域內(nèi)的多個可用區(qū)域?qū)⒈灰暈閱蝹€數(shù)據(jù)中心的一部分.

在我們的文檔中, "一致性"的意思是對于被選舉出的leader以及事物的順序的認同. 因為這些事件被應(yīng)用到有限狀態(tài)機上, 我們對一致性的定義又暗含了復制備份的狀態(tài)機的一致性.

consul是建立在Serf之上的, 它提供了一個完整的gossip協(xié)議, 用在很多地方. Serf提供了成員管理, 故障檢測和事件廣播的功能. Gossip的節(jié)點到節(jié)點之間的通信使用了UDP協(xié)議.

指在同一局域網(wǎng)或數(shù)據(jù)中心的節(jié)點上的LAN Gossip池. Client到Server會通過Lan Gossip, 所有的節(jié)點都在Gossip pool中

指包含服務(wù)器的WAN Gossip池, 這些服務(wù)器在不同的數(shù)據(jù)中心, 通過網(wǎng)絡(luò)進行通信.

以開發(fā)模式啟動: consul agent -dev, 如果需要Web界面的話加-ui即可, 集群的LAN服務(wù)默認啟動在8301端口上, WAN服務(wù)默認啟動在8302端口上, Web服務(wù)默認端口是8500, DNS服務(wù)默認端口是8600, gRPC服務(wù)默認端口是8502

默認是以server角色啟動的, 啟動后用consul members可以查看服務(wù)下的節(jié)點信息, 或者通過HTTP接口請求 也可以看到節(jié)點信息數(shù)據(jù)以json形式返回.

使用dig命令可以查看consul中DNS服務(wù)的一些信息, 命令如: dig @127.0.0.1 -p 8600 nodeName

一般情況下consul會在啟動時通過參數(shù)的形式進行配置, 但這樣子比較麻煩, 我們通過在/etc/consul.d目錄下來新建配置文件的形式, 在每次啟動時加載配置文件來進行啟動.

consul的配置信息可以在 查看, 其中部分選項如下:

按照慣例, 我們將配置文件放在/etc/consul.d/目錄下, 分別在幾個機器上創(chuàng)建該目錄. 在以bootstrap模式啟動的server1上, 我們創(chuàng)建/etc/consul.d/bootstrap和/etc/consul.d/server目錄, 在server2和server3上我們創(chuàng)建/etc/consul.d/server目錄, 在agent上, 我們創(chuàng)建/etc/consul.d/agent目錄.

server1的bootstrap目錄下的配置文件config.json如下:

其他兩臺服務(wù)器中server目錄下的配置文件config.json如下:

代理服務(wù)器中agent目錄下的config.json如下:

這樣, 首先啟動server1上的consul: consul agent -config-dir /etc/consul.d/bootstrap, 然后依次啟動server2, server3上的consul:consul agent -config-dir /etc/consul.d/server. 這樣, 三個consul server就組成了一個cluster. 此時server1上的consul運行在bootstrap狀態(tài)下. 可以在不與server2以及server3商議的情況下直接執(zhí)行決議, 此時我們終結(jié)server1上運行的consul, 并執(zhí)行consul agent -config-dir /etc/consul.d/server, 讓server1以普通server的身份重新加入cluster. 最后啟動agent模式 consul agent -config-dir /etc/consul.d/agent.

** 注意: encrypt可以使用consul keygen命令來生成, 所有服務(wù)器上需要配置一樣, 如果因為哪里配置錯誤導致啟動失敗, 修改后還報失敗的話, 可以嘗試刪除$data_dir/serf/local.keyring后重新啟動 **

在需要部署服務(wù)的機器上同樣創(chuàng)建/etc/consul.d/, 然后把不同的服務(wù)分開不同的目錄, 或者就直接在此目錄下創(chuàng)建json配置文件, 如: web1.json, web2.json等.

然后再通過consul agent指定配置文件的方式啟動服務(wù), 可以直接在配置文件中指定要注冊的服務(wù), 也可以在啟動后使用consul join命令來主動注冊服務(wù), 這樣再次登錄到web管理界面就可以發(fā)現(xiàn)我們新建的服務(wù)了.

Q: 什么是bootstrap模式?

A: 使用該模式啟動的server端會自動把自己選擇為leader, 在搭建集群時為了方便會預(yù)先設(shè)置一臺服務(wù)器為bootstrap啟動

如何使用Go語言是操作Docker

Docker 提供了一個與 Docker 守護進程交互的 API (稱為Docker Engine API),我們可以使用官方提供的 Go 語言的 SDK 進行構(gòu)建和擴展 Docker 應(yīng)用程序和解決方案。

轉(zhuǎn)自:

整理:地鼠文檔

通過下面的命令就可以安裝 SDK 了:

該部分會介紹如何使用 Golang + Docker API 進行管理本地的 Docker。

第一個例子將展示如何運行容器,相當于 docker run docker.io/library/alpine echo "hello world" :

還可以在后臺運行容器,相當于 docker run -d bfirsh/reticulate-splines :

列出正在運行的容器,就像使用 docker ps 一樣:

如果是 docker ps -a ,我們可以通過修改 types.ContainerListOptions 中的 All 屬性達到這個目的:

通過上面的例子,我們可以獲取容器的列表,所以在這個案例中,我們可以去停止所有正在運行的容器。

通過指定容器的 ID,我們可以獲取對應(yīng) ID 的容器的日志:

獲取本地所有的鏡像,相當于 docker image ls 或 docker images :

拉取指定鏡像,相當于 docker pull alpine :

除了公開的鏡像,我們平時還會用到一些私有鏡像,可以是 DockerHub 上私有鏡像,也可以是自托管的鏡像倉庫,比如 harbor 。這個時候,我們需要提供對應(yīng)的憑證才可以拉取鏡像。

值得注意的是:在使用 Docker API 的 Go SDK 時,憑證是以明文的方式進行傳輸?shù)模匀绻亲越ǖ溺R像倉庫,請務(wù)必使用 HTTPS !

我們可以將一個已有的容器通過 commit 保存成一個鏡像:

當然,除了可以管理本地的 Docker , 我們同樣也可以通過使用 Golang + Docker API 管理遠程的 Docker 。

默認 Docker 是通過非網(wǎng)絡(luò)的 Unix 套接字運行的,只能夠進行本地通信( /var/run/docker.sock ),是不能夠直接遠程連接 Docker 的。

我們需要編輯配置文件 /etc/docker/daemon.json ,并修改以下內(nèi)容(把 192.168.59.3 改成你自己的 IP 地址),然后重啟 Docker :

創(chuàng)建 client 的時候需要指定遠程 Docker 的地址,這樣就可以像管理本地 Docker 一樣管理遠程的 Docker 了:

現(xiàn)在已經(jīng)有很多可以管理 Docker 的產(chǎn)品,它們便是這樣進行實現(xiàn)的,比如: portainer 。

go語言--Goroutines

1、goroutine:在go語言中,每一個并發(fā)的執(zhí)行單元叫做goroutine,如果一個程序中包含多個goroutine,對兩個函數(shù)的調(diào)用則可能發(fā)生在同一時刻

2、main goroutine:當一個程序啟動時,其主函數(shù)即在一個單獨的goroutine中運行,我們叫他為main gorountine

3、go goroutine:新的goroutine會用go語句來創(chuàng)建,go+函數(shù)名,go語句會使其語句中的函數(shù)在一新創(chuàng)建的goroutine中運行,而go語句本身會迅速地完成

4、goroutine的退出:主函數(shù)返回時,所有的goroutine都會被直接打斷,程序退出,除了從主函數(shù)退出或者終止程序之外,沒有其他方法能夠讓一個goroutine來打斷另一個的執(zhí)行,但是可以通過另一種方式來實現(xiàn)這個目的,通過goroutine之間的通信來讓一個goroutine請求其他的goroutine,并讓請求的goroutine自行結(jié)束執(zhí)行

分享標題:go語言守護進程運行 golang守護進程
標題URL:http://muchs.cn/article40/dooojho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、微信小程序、面包屑導航、商城網(wǎng)站、移動網(wǎng)站建設(shè)、網(wǎng)站建設(shè)

廣告

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

網(wǎng)站建設(shè)網(wǎng)站維護公司