1、學(xué)習(xí)曲線
創(chuàng)新互聯(lián)公司專注于網(wǎng)站建設(shè)|網(wǎng)頁維護(hù)|優(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)置和工程工具。這一點(diǎn)非常重要,因為Go語言容易學(xué)習(xí),所以一個普通的大學(xué)生花一個星期就能寫出來可以上手的、高性能的應(yīng)用。在國內(nèi)大家都追求快,這也是為什么國內(nèi)Go流行的原因之一。
2、效率
Go擁有接近C的運(yùn)行效率和接近PHP的開發(fā)效率,這就很有利的支撐了上面大家追求快速的需求。
3、出身名門、血統(tǒng)純正
之所以說Go語言出身名門,是因為我們知道Go語言出自Google公司,這個公司在業(yè)界的知名度和實力自然不用多說。Google公司聚集了一批牛人,在各種編程語言稱雄爭霸的局面下推出新的編程語言,自然有它的戰(zhàn)略考慮。而且從Go語言的發(fā)展態(tài)勢來看,Google對它這個新的寵兒還是很看重的,Go自然有一個良好的發(fā)展前途。我們看看Go語言的主要創(chuàng)造者,血統(tǒng)純正這點(diǎn)就可見端倪了。
4、組合的思想、無侵入式的接口
Go語言可以說是開發(fā)效率和運(yùn)行效率二者的完美融合,天生的并發(fā)編程支持。Go語言支持當(dāng)前所有的編程范式,包括過程式編程、面向?qū)ο缶幊桃约昂瘮?shù)式編程。
5、強(qiáng)大的標(biāo)準(zhǔn)庫
這包括互聯(lián)網(wǎng)應(yīng)用、系統(tǒng)編程和網(wǎng)絡(luò)編程。Go里面的標(biāo)準(zhǔn)庫基本上已經(jīng)是非常穩(wěn)定,特別是我這里提到的三個,網(wǎng)絡(luò)層、系統(tǒng)層的庫非常實用。
6、部署方便
我相信這一點(diǎn)是很多人選擇Go的最大理由,因為部署太方便,所以現(xiàn)在也有很多人用Go開發(fā)運(yùn)維程序。
7、簡單的并發(fā)
它包含降低心智的并發(fā)和簡易的數(shù)據(jù)同步,我覺得這是Go最大的特色。之所以寫正確的并發(fā)、容錯和可擴(kuò)展的程序如此之難,是因為我們用了錯誤的工具和錯誤的抽象,Go可以說這一塊做的相當(dāng)簡單。
8、穩(wěn)定性
Go擁有強(qiáng)大的編譯檢查、嚴(yán)格的編碼規(guī)范和完整的軟件生命周期工具,具有很強(qiáng)的穩(wěn)定性,穩(wěn)定壓倒一切。那么為什么Go相比于其他程序會更穩(wěn)定呢?這是因為Go提供了軟件生命周期的各個環(huán)節(jié)的工具,如go
tool、gofmt、go test。
您好,很高興為您解答。
安裝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守護(hù)進(jìn)程
需要打包golang程序為可執(zhí)行文件(go build),并通過daemonize來執(zhí)行它來實現(xiàn)守護(hù)進(jìn)程,如:
daemonize?-p?/var/run/myapp.pid?-l?/var/lock/subsys/myapp?-u?nobody?/path/to/myapp
如若滿意,請點(diǎn)擊右側(cè)【采納答案】,如若還有問題,請點(diǎn)擊【追問】
希望我的回答對您有所幫助,望采納!
~?O(∩_∩)O~
Consul是由HashiCorp基于Go語言開發(fā)的支持多數(shù)據(jù)中心的分布式高可用服務(wù)發(fā)布和注冊軟件, 采用Raft算法保持服務(wù)的一致性, 且支持健康檢查.
和Eureka的侵入式服務(wù)中心不同的是, Consul是以獨(dú)立的軟件形式運(yùn)行, 對項目侵入性小, 更方便部署.
上圖為多機(jī)房數(shù)據(jù)中心部署, 每個數(shù)據(jù)中心至少三臺Consul, 一臺LEADER, 另外的兩臺是FOLLOWER.
代理是Consul集群上每個成員的守護(hù)進(jìn)程, 它是由consul agent命令開始運(yùn)行. 代理能夠以客戶端或服務(wù)器模式運(yùn)行. 由于所有節(jié)點(diǎn)都必須運(yùn)行代理, 所以將節(jié)點(diǎn)引用為客戶端或服務(wù)器更為簡單, 但還有其他實例的代理. 所有代理可以運(yùn)行DNS或HTTP接口, 并負(fù)責(zé)運(yùn)行檢查和保持服務(wù)同步.
客戶端可以將所有RPC請求轉(zhuǎn)發(fā)到服務(wù)器的代理. 客戶端是相對無狀態(tài)的. 客戶端執(zhí)行的唯一后臺活動是LANgossip池. 它消耗最小的資源開銷和少量的網(wǎng)絡(luò)帶寬.
服務(wù)器端是具有擴(kuò)展的功能的代理, 它主要參與維護(hù)集群狀態(tài), 響應(yīng)RPC查詢, 與其他數(shù)據(jù)中心交換WAN gossip, 以及向leader節(jié)點(diǎn)或遠(yuǎn)程數(shù)據(jù)中心轉(zhuǎn)發(fā)查詢.
雖然數(shù)據(jù)中心的定義似乎很明顯, 但仍有一些細(xì)微的細(xì)節(jié)必須考慮. 比如說, 在EC2中, 多個可用中心 (EC2和AZ是AWS里的概念, 不了解的話可以去看看AWS文檔) 是否應(yīng)該被認(rèn)為是一個單個的數(shù)據(jù)中心呢? 我們將一個數(shù)據(jù)中心定義為一個私有, 低延遲和高帶寬的網(wǎng)絡(luò)環(huán)境, 這不包括通過公共互聯(lián)網(wǎng)的通信. 但是為了我們的目的, 單個EC2區(qū)域內(nèi)的多個可用區(qū)域?qū)⒈灰暈閱蝹€數(shù)據(jù)中心的一部分.
在我們的文檔中, "一致性"的意思是對于被選舉出的leader以及事物的順序的認(rèn)同. 因為這些事件被應(yīng)用到有限狀態(tài)機(jī)上, 我們對一致性的定義又暗含了復(fù)制備份的狀態(tài)機(jī)的一致性.
consul是建立在Serf之上的, 它提供了一個完整的gossip協(xié)議, 用在很多地方. Serf提供了成員管理, 故障檢測和事件廣播的功能. Gossip的節(jié)點(diǎn)到節(jié)點(diǎn)之間的通信使用了UDP協(xié)議.
指在同一局域網(wǎng)或數(shù)據(jù)中心的節(jié)點(diǎn)上的LAN Gossip池. Client到Server會通過Lan Gossip, 所有的節(jié)點(diǎn)都在Gossip pool中
指包含服務(wù)器的WAN Gossip池, 這些服務(wù)器在不同的數(shù)據(jù)中心, 通過網(wǎng)絡(luò)進(jìn)行通信.
以開發(fā)模式啟動: consul agent -dev, 如果需要Web界面的話加-ui即可, 集群的LAN服務(wù)默認(rèn)啟動在8301端口上, WAN服務(wù)默認(rèn)啟動在8302端口上, Web服務(wù)默認(rèn)端口是8500, DNS服務(wù)默認(rèn)端口是8600, gRPC服務(wù)默認(rèn)端口是8502
默認(rèn)是以server角色啟動的, 啟動后用consul members可以查看服務(wù)下的節(jié)點(diǎn)信息, 或者通過HTTP接口請求 也可以看到節(jié)點(diǎn)信息數(shù)據(jù)以json形式返回.
使用dig命令可以查看consul中DNS服務(wù)的一些信息, 命令如: dig @127.0.0.1 -p 8600 nodeName
一般情況下consul會在啟動時通過參數(shù)的形式進(jìn)行配置, 但這樣子比較麻煩, 我們通過在/etc/consul.d目錄下來新建配置文件的形式, 在每次啟動時加載配置文件來進(jìn)行啟動.
consul的配置信息可以在 查看, 其中部分選項如下:
按照慣例, 我們將配置文件放在/etc/consul.d/目錄下, 分別在幾個機(jī)器上創(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運(yùn)行在bootstrap狀態(tài)下. 可以在不與server2以及server3商議的情況下直接執(zhí)行決議, 此時我們終結(jié)server1上運(yùn)行的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ù)器上需要配置一樣, 如果因為哪里配置錯誤導(dǎo)致啟動失敗, 修改后還報失敗的話, 可以嘗試刪除$data_dir/serf/local.keyring后重新啟動 **
在需要部署服務(wù)的機(jī)器上同樣創(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啟動
Docker 提供了一個與 Docker 守護(hù)進(jìn)程交互的 API (稱為Docker Engine API),我們可以使用官方提供的 Go 語言的 SDK 進(jìn)行構(gòu)建和擴(kuò)展 Docker 應(yīng)用程序和解決方案。
轉(zhuǎn)自:
整理:地鼠文檔
通過下面的命令就可以安裝 SDK 了:
該部分會介紹如何使用 Golang + Docker API 進(jìn)行管理本地的 Docker。
第一個例子將展示如何運(yùn)行容器,相當(dāng)于 docker run docker.io/library/alpine echo "hello world" :
還可以在后臺運(yùn)行容器,相當(dāng)于 docker run -d bfirsh/reticulate-splines :
列出正在運(yùn)行的容器,就像使用 docker ps 一樣:
如果是 docker ps -a ,我們可以通過修改 types.ContainerListOptions 中的 All 屬性達(dá)到這個目的:
通過上面的例子,我們可以獲取容器的列表,所以在這個案例中,我們可以去停止所有正在運(yùn)行的容器。
通過指定容器的 ID,我們可以獲取對應(yīng) ID 的容器的日志:
獲取本地所有的鏡像,相當(dāng)于 docker image ls 或 docker images :
拉取指定鏡像,相當(dāng)于 docker pull alpine :
除了公開的鏡像,我們平時還會用到一些私有鏡像,可以是 DockerHub 上私有鏡像,也可以是自托管的鏡像倉庫,比如 harbor 。這個時候,我們需要提供對應(yīng)的憑證才可以拉取鏡像。
值得注意的是:在使用 Docker API 的 Go SDK 時,憑證是以明文的方式進(jìn)行傳輸?shù)模匀绻亲越ǖ溺R像倉庫,請務(wù)必使用 HTTPS !
我們可以將一個已有的容器通過 commit 保存成一個鏡像:
當(dāng)然,除了可以管理本地的 Docker , 我們同樣也可以通過使用 Golang + Docker API 管理遠(yuǎn)程的 Docker 。
默認(rèn) Docker 是通過非網(wǎng)絡(luò)的 Unix 套接字運(yùn)行的,只能夠進(jìn)行本地通信( /var/run/docker.sock ),是不能夠直接遠(yuǎn)程連接 Docker 的。
我們需要編輯配置文件 /etc/docker/daemon.json ,并修改以下內(nèi)容(把 192.168.59.3 改成你自己的 IP 地址),然后重啟 Docker :
創(chuàng)建 client 的時候需要指定遠(yuǎn)程 Docker 的地址,這樣就可以像管理本地 Docker 一樣管理遠(yuǎn)程的 Docker 了:
現(xiàn)在已經(jīng)有很多可以管理 Docker 的產(chǎn)品,它們便是這樣進(jìn)行實現(xiàn)的,比如: portainer 。
1、goroutine:在go語言中,每一個并發(fā)的執(zhí)行單元叫做goroutine,如果一個程序中包含多個goroutine,對兩個函數(shù)的調(diào)用則可能發(fā)生在同一時刻
2、main goroutine:當(dāng)一個程序啟動時,其主函數(shù)即在一個單獨(dú)的goroutine中運(yùn)行,我們叫他為main gorountine
3、go goroutine:新的goroutine會用go語句來創(chuàng)建,go+函數(shù)名,go語句會使其語句中的函數(shù)在一新創(chuàng)建的goroutine中運(yùn)行,而go語句本身會迅速地完成
4、goroutine的退出:主函數(shù)返回時,所有的goroutine都會被直接打斷,程序退出,除了從主函數(shù)退出或者終止程序之外,沒有其他方法能夠讓一個goroutine來打斷另一個的執(zhí)行,但是可以通過另一種方式來實現(xiàn)這個目的,通過goroutine之間的通信來讓一個goroutine請求其他的goroutine,并讓請求的goroutine自行結(jié)束執(zhí)行
分享標(biāo)題:go語言守護(hù)進(jìn)程運(yùn)行 golang守護(hù)進(jìn)程
標(biāo)題URL:http://aaarwkj.com/article40/dooojho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、微信小程序、面包屑導(dǎo)航、商城網(wǎng)站、移動網(wǎng)站建設(shè)、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)