成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

基于容器的后端服務(wù)架構(gòu)

nifhlheimr / 2540人閱讀

摘要:結(jié)構(gòu)大致為安裝如果檢測(cè)到多個(gè)會(huì)報(bào)錯(cuò),可以用指定一個(gè)指定啟動(dòng)因?yàn)樾枰{(diào)用,所以需要把映射到容器內(nèi)部,如果你使用了,那么需要設(shè)置對(duì)應(yīng)的。我這里是啟動(dòng)服務(wù),這里需要注意的是這些環(huán)境變量,作用是的默認(rèn)值,見(jiàn)名知意,在文檔中有詳細(xì)介紹。

基于容器的后端服務(wù)架構(gòu)

在探索kubernetes的應(yīng)用時(shí),調(diào)研了幾個(gè)gateway,發(fā)現(xiàn)fabio支持發(fā)現(xiàn)服務(wù),自動(dòng)生成路由,結(jié)合consul,registrator, 可以很容易的部署一套服務(wù),比較輕量,很容易玩起來(lái)。

結(jié)構(gòu)大致為:

Start Consul

安裝 consul, 如果檢測(cè)到多個(gè) private ip, 會(huì)報(bào)錯(cuò),可以用 -advertise 指定一個(gè)ip.

// config.json , 指定 DNS port
{
    "recursors" : [ "8.8.8.8" ],
    "ports" : {
        "dns" : 53
    }
}

sudo docker run -d --name=consul --net=host -v $PWD/config.json:/config/config.json gliderlabs/consul-server -bootstrap -advertise=172.28.128.3 

curl 172.28.128.3:8500/v1/catalog/services
Start Registrator

啟動(dòng) registrator, 因?yàn)樾枰{(diào)用docker api, 所以需要把docker.sock 映射到容器內(nèi)部,如果你使用了tcp, 那么需要設(shè)置對(duì)應(yīng)的url。

如果你希望上報(bào)容器內(nèi)部ip:port, 那么需要在啟動(dòng)參數(shù)中加入 -internal=true, 這樣注冊(cè)的 Service, 都是容器內(nèi)部的ip, 而port對(duì)于同一個(gè)service而言,一般是固定的,例如 一個(gè)hello服務(wù)的兩個(gè)實(shí)例分別為 10.10.1.12:9090, 10.10.1.13:9090. 這樣的話,就需要配置一個(gè)容器跨host的網(wǎng)絡(luò)方案,例如 flannel, 等。 可以參考上一篇 Flannel with Docker

為了簡(jiǎn)便測(cè)試,這里就不配置flannel了。-ip是指定注冊(cè)service時(shí)候使用的ip,建議要指定,選取當(dāng)前機(jī)器的內(nèi)網(wǎng) private ip即可。我這里是 172.28.128.3.

sudo docker run -d --name=registrator --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:latest -ip=172.28.128.3 consul://172.28.128.3:8500 
Start service

啟動(dòng)服務(wù),這里需要注意的是這些環(huán)境變量,作用是 override Registrator的默認(rèn)值,見(jiàn)名知意,在 registrator 文檔中有詳細(xì)介紹。例如 SERVICE_9090_NAME 就是指 端口為 9090 的service 的 name。

需要注意的是 tags 這個(gè)字段,urlprefix-/foo,hello, 這里 urlprefix- 是 gateway 的一種配置,意思為 把訪問(wèn) /foo 為前綴的請(qǐng)求轉(zhuǎn)發(fā)到當(dāng)前應(yīng)用來(lái)。他能夠匹配到例如 /foo/bar, footest, 等。如果你想加上域名的限制,可以這樣 urlprefix-mysite.com/foo。 后面還有一個(gè) hello, 作用是給這個(gè)service打一個(gè)標(biāo)記,可以用作查詢用。

sudo docker run -d -P -e SERVICE_9090_CHECK_HTTP=/foo/healthcheck -e SERVICE_9090_NAME=hello -e SERVICE_CHECK_INTERVAL=10s -e SERVICE_CHECK_TIMEOUT=5s -e SERVICE_TAGS=urlprefix-/foo,hello silentred/alpine-hello:v2

curl 172.28.128.3:8500/v1/catalog/services
//現(xiàn)在應(yīng)該能看到剛啟動(dòng)的hello服務(wù)了
{"consul":[],"hello":["urlprefix-mysite.com/foo","hello","urlprefix-/foo"]}

測(cè)試 DNS

sudo yum install bind-utils
dig @172.28.128.3 hello.service.consul SRV

可以設(shè)置 /etc/resolv.conf

nameserver 172.28.128.3
search service.consul

這樣無(wú)論在容器內(nèi)部,還是外部都可以直接解析 sevice 名, 例如:

[vagrant@localhost ~]$ ping hello
PING hello.service.consul (172.28.128.3) 56(84) bytes of data.
64 bytes from localhost.localdomain.node.dc1.consul (172.28.128.3): icmp_seq=1 ttl=64 time=0.016 ms

[vagrant@localhost ~]$ sudo docker exec -it fdde1b8247b8 bash
bash-4.4# ping hello
PING hello (172.28.128.6): 56 data bytes
64 bytes from 172.28.128.6: seq=0 ttl=63 time=0.361 ms
Start Gateway

前端Gateway 根據(jù) consul中注冊(cè)的 service,生成對(duì)應(yīng)的路由規(guī)則,把流量分發(fā)到各個(gè)節(jié)點(diǎn)。 這個(gè)項(xiàng)目還有一個(gè) ui 管理 route信息,端口為 9998。

創(chuàng)建一個(gè)配置文件 fabio.properties

registry.consul.addr = 172.28.128.3:8500

在當(dāng)前目錄運(yùn)行

docker run -d -p 9999:9999 -p 9998:9998 -v $PWD/fabio.properties:/etc/fabio/fabio.properties magiconair/fabio

測(cè)試gateway:

curl 172.28.128.3:9999/foo/bar
curl 172.28.128.3:9999/foo/bar -H "Host: mysite.com"

Health Check
sudo ifdown eth1

curl http://localhost:8500/v1/health/state/critical

[
    {
        "Node":"localhost.localdomain",
        "CheckID":"service:afa2769cd049:loving_shannon:9090",
        "Name":"Service "hello" check",
        "Status":"critical",
        "Notes":"",
        "Output":"Get http://172.28.128.6:32768/foo/healthcheck: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)",
        "ServiceID":"afa2769cd049:loving_shannon:9090",
        "ServiceName":"hello",
        "CreateIndex":379,
        "ModifyIndex":457
    }
]

sudo ifup eth1

在啟動(dòng) consul的時(shí)候,我們使用了-ui 參數(shù),我們可以在 172.28.128.3:8500/ui 訪問(wèn)到consul的web ui管理界面,看到各個(gè)服務(wù)的狀態(tài).

對(duì)比

注冊(cè)容器外IP:
每個(gè)注冊(cè)的service的port都是變化的,并且因?yàn)橛成鋬?nèi)部port到了host,外部可以隨意訪問(wèn),私密性較弱。

注冊(cè)容器內(nèi)IP:
每個(gè)注冊(cè)的service的port都是固定的,只能從容器內(nèi)部訪問(wèn)。如果用 flannel,可能有一些性能損失。

DNS服務(wù)發(fā)現(xiàn)

查了一下如何利用DNS SRV類(lèi)型來(lái)發(fā)現(xiàn)服務(wù)。本來(lái)以為可以用類(lèi)似 Dial("hello", SRV) 的魔法 (我們都是膜法師,+1s), 查了一些資料貌似沒(méi)有這么方便??戳讼耮olang的net包,發(fā)現(xiàn)了兩個(gè)方法 LookupSRV, LookupHost, 于是測(cè)試了一下,看下結(jié)果,大家知道該怎么用了吧,嘿嘿。

cname, addrs, err := net.LookupSRV("", "", "hello.service.consul")
fmt.Printf("%s, %#v, %s 
", cname, addrs, err)
for _, srv := range addrs {
    fmt.Printf("%#v 
", *srv)
}

newAddrs, err := net.LookupHost("hello.service.consul")
fmt.Printf("%#v, %s 
", newAddrs, err)
//output
[vagrant@bogon dns]$ go run mx.go
hello.service.consul., []*net.SRV{(*net.SRV)(0xc420010980), (*net.SRV)(0xc4200109a0)}, %!s()
net.SRV{Target:"bogon.node.dc1.consul.", Port:0x8003, Priority:0x1, Weight:0x1}
net.SRV{Target:"bogon.node.dc1.consul.", Port:0x8000, Priority:0x1, Weight:0x1}
[]string{"172.28.128.3", "172.28.128.4"}, %!s()

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/26764.html

相關(guān)文章

  • Java 類(lèi)文章 - 收藏集 - 掘金

    摘要:而調(diào)用后端服務(wù)就應(yīng)用了的高級(jí)特分布式配置管理平臺(tái)后端掘金輕量的分布式配置管理平臺(tái)。關(guān)于網(wǎng)絡(luò)深度解讀后端掘金什么是網(wǎng)絡(luò)呢總的來(lái)說(shuō),網(wǎng)絡(luò)中的容器們可以相互通信,網(wǎng)絡(luò)外的又訪問(wèn)不了這些容器。 在 Java 路上,我看過(guò)的一些書(shū)、源碼和框架(持續(xù)更新) - 后端 - 掘金簡(jiǎn)書(shū) 占小狼轉(zhuǎn)載請(qǐng)注明原創(chuàng)出處,謝謝!如果讀完覺(jué)得有收獲的話,歡迎點(diǎn)贊加關(guān)注 物有本末,事有終始,知所先后,則近道矣 ......

    RayKr 評(píng)論0 收藏0
  • 容器容器編排

    摘要:從容器到容器編排平臺(tái)以及周邊生態(tài)系統(tǒng)包含很多工具來(lái)管理容器的生命周期。終止運(yùn)行中的容器。發(fā)現(xiàn)在由運(yùn)行于多個(gè)主機(jī)上的容器組成的分布式部署容器發(fā)現(xiàn)至關(guān)重要。類(lèi)似的,當(dāng)容器崩潰時(shí),編排工具可以啟動(dòng)替換。 從容器到容器編排 Docker平臺(tái)以及周邊生態(tài)系統(tǒng)包含很多工具來(lái)管理容器的生命周期。例如,Docker Command Line Interface(CLI)支持下面的容器活動(dòng): 從注冊(cè)表...

    Hydrogen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<