提供RESTful API或者其他的API的服务。为了完成一次请求,服务调用方需要知道服务实例的ip和端口。平台中的应用一般有多个实例,实例故障重启和负载均衡都与服务发现有关。
通过服务发现机制,可以透明的对多个实例进行访问,并实现负载均衡。且应用的某个实例随时可能故障,这时就需要动态配置服务调用方的路由信息,服务发现可以解决这个动态配置问题。
服务注册
自注册:服务实例自己负责在服务注册表中注册和注销。服务实例向注册中心发心跳包来保证注册信息不超时。(服务实例和服务注册中心耦合,需要在服务实例中实现注册代码)
第三方注册:服务实例不直接和注册中心进行交互,服务注册器负责向注册中心注册和注销此服务,并对服务进行健康检查。服务实例通过一个专有服务以中心化方式进行管理,服务注册中心
代理agent运行在集群的每一个节点上,每个agent拥有分布式的健康检查机制。
服务发现
有两种主要的服务发现模式,客户端发现模式和服务端发现模式。
- 客户端发现模式:客户端负责确定可用服务实例的网络位置和负载均衡请求。客户端查询服务注册,一个可用的数据服务实例。客户端使用一个负载均衡逻辑去选择一个可用的服务实例然后做请求。
服务实例的网络配置应该在启动时被注册,当这个实例终止时从服务注册中移除。通常在注册中心使用心跳机制周期性的刷新服务实例。这种模式相对简单,除了服务注册,没有其他的移动组件。但是必须
为每个编程语言和框架实时客户端发现逻辑。 - 服务端发现模式:
引用:https://www.nginx.com/blog/service-discovery-in-a-microservices-architecture/
安装
在github的安装release版本,
curl -L https://github.com/coreos/etcd/releases/download/v3.2.6/etcd-v3.2.6-darwin-amd64.zip -o /tmp/etcd-v3.2.6-darwin-amd64.zip
cd /tmp/etcd-v3.2.6-darwin-amd64.zip
unzip etcd-v3.2.6-darwin-amd64.zip
也可以mv到其他的目录。目录下./etcd启动etcd服务端。服务器监听2379和4001端口。
测试
./etcdctl set name wyc
后./etcdctl get name
返回设置的值。
也可以通过curl -L http://localhost:2379/v2/keys/name
查看:
{
"action": "get",
"node": {
"key": "/name",
"value": "wyc",
"modifiedIndex": 4,
"createdIndex": 4
}
}