# 服务注册原理
在微服务架构下,主要有三种角色:服务提供者(RPC Server)、服务消费者(RPC Client)和服务注册中心(Registry),三者的交互关系请看下面这张图。
- RPC Server 提供服务,在启动时,根据服务的编译和配置信息,向 Registry 注册服务,并向 Registry 定期发送心跳汇报存活状态。
- RPC Client 调用服务,在启动时,根据配置文件的信息,向 Registry 订阅服务,把 Registry 返回的服务节点列表缓存在本地内存中,并与 RPC Sever 建立连接。
- 当 RPC Server 节点发生变更时,Registry 会同步变更,RPC Client 感知后会刷新本地内存中缓存的服务节点列表。
- RPC Client 从本地缓存的服务节点列表中,基于负载均衡算法选择一台 RPC Sever 发起调用。

# 服务注册数据
| 名称 | 英文 | 示例 | 类型 |
|---|---|---|---|
| 环境 | env | dev | 环境变量 |
| 地区 | region | beijing | 环境变量 |
| 可用区 | zone | zone1 | 环境变量 |
| 地址 | ip | 192.168.1.1 | 环境变量 |
| 端口 | port | 8080 | 环境变量 |
| 协议 | scheme | gRPC | 配置变量 |
| 权重 | weight | 100 | 配置变量 |
| 部署组 | deployment | red | 配置变量 |
| 框架版本号 | frameVersion | 2.0 | 编译变量 |
| 应用版本号 | appVersion | ahkfasgasdf | 编译变量 |
| 编译时间 | buildTime | 2020-10-14 10:00:00 | 编译变量 |
| 启动时间 | startTime | 2020-10-14 11:00:00 | 编译变量 |
通过这些信息,我们能够很方便的获得Provider的基本情况,并对他进行改变。例如可以调节流量比例、调度流量区域、灰度版本、排查应用的版本、编译时间、启动时间。
# 启动一个服务例子
example: