
你有没有思考过这样一个问题,为什么会有这么多的注册中心(etcd/ZooKeeper/Consul),选用那个最适合自己,是不是在选用的时候会眼花缭乱?
我在开始做的时候,自己也有很多困惑,将近3年的时候里我都在不停的学习,但是还是有很多不同的框架和产品,后来我明白了其中的原因,他们就像生活中的可乐、果汁、和牛奶一样,你在使用的时候选取你的编程语言(Java、Go、PHP),程序易接入的就好了。
产生注册中心五花八门的原因是因为语言很多,都想打造最适合自己的体系生态,我选择Consul为大家讲解,因为它安装和接入都比较方便。
不用被这些假象所困扰,多学习网络和系统的底层原理,万变不离其宗,技术人应该是给出解决方案。
| Feature | Consul | ZooKeeper | etcd |
|---|---|---|---|
| 服务健康检查 | 服务状态、内存、硬盘 | 长链接、Keepalive | 链接心跳 |
| 多数据中心 | 支持 | — | — |
| K/V存储服务 | 支持 | 支持 | 支持 |
| 一致性 | Raft | Paxos | Raft |
| CAP定理 | CP | CP | CP |
| 使用接口(多语言能力) | Http/Dns | 客户端 | Http/Grpc |
| 安全 | acl/https | acl | Https支持 |
使用PHP、和Go编写,使用Consul作为注册中心和配置中心比较方便,所以我选用的是Consul。
Consul 内部端口说明:
Consul 集群的特点:
Consul 集群的角色:
算法的详情可以点击官网视频查看
1.注册服务是Consul最基础的服务,点击查看官网Api
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
PUT 192.168.88.144:8500/v1/agent/service/register { "Name":"audio", "Id":"audio", "Tags":[ "v2", "primary" ], "Address":"192.168.88.144", "Port":8500, "Check":{ "HTTP":"http://192.168.88.144:8500", "Interval":"10s" } } |
|
1 2 3 4 5 6 7 8 9 10 11 |
{ "id": "web", "name": "web", "port": 80, "check": { "name": "ping check", "args": ["ping", "-c1", "test.stark.com"], "interval": "30s", "status": "passing" } } |
2.发现服务
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
GET http://192.168.88.144:8500/v1/health/service/audio [ { "Node": { "ID": "38779dca-bffd-e399-6597-266aff68132c", "Node": "server01-virtual-machine", "Address": "127.0.0.1", "Datacenter": "dc1", "TaggedAddresses": { "lan": "127.0.0.1", "lan_ipv4": "127.0.0.1", "wan": "127.0.0.1", "wan_ipv4": "127.0.0.1" }, "Meta": { "consul-network-segment": "" }, "CreateIndex": 13, "ModifyIndex": 17 }, "Service": { "ID": "audio", "Service": "audio", "Tags": [ "v2", "primary" ], "Address": "192.168.88.144", "TaggedAddresses": { "lan_ipv4": { "Address": "192.168.88.144", "Port": 8500 }, "wan_ipv4": { "Address": "192.168.88.144", "Port": 8500 } }, "Meta": null, "Port": 8500, // ... } ] |
Service API Service 相关的 API 都在 /v1/agent/service 下:
关于更多Consul的使用,查询官方文档吧。