etcd
服务注册和发现,分布式kv存储
包含面向用户的api(grpc)
服务发现
分布式集群中的进程或服务如何找到对方建立连接
本质上来说,就是想要了解集群中是否有进程在监听 udp 或 tcp 端口,并且通过名字就可以查找和连接。
配置中心
将一些配置信息放到 etcd 上进行集中管理。
应用在启动的时候主动从 etcd 获取一次配置信息,同时,在 etcd 节点上注册一个 Watcher 并等待,以后每次配置有更新的时候,etcd 都会实时通知订阅者,以此达到获取最新配置信息的目的。
分布式锁
etcd使用raft强一致性,很容易实现分布式锁
保持独占(一个)和控制时序(多个然后一个)
etcd
天生为集群设置
Raft算法决策时多数节点投票,
常用编程函数方法 Get Watch 2个会话模拟锁竞争
gorm
可加标签gorm:
蛇形列名
gin框架
gin.Context,封装了request和response
Context的Param方法来获取API参数
路由可以拆分注册,就是handler与 get/set等相结合
微服务
通信层 rpc
数据层 etcd
服务注册与发现
客户端,需要实现一套注册中心,记录服务地址,知道具体访问哪个,加权轮询
服务端启动,自动注册即可
RPC相关内容
数据传输:JSON Protobuf
异常容错:健康检测 熔断 限流
服务监控 :日志收集 打点采样
rpc框架
Grpc 跨语言 只支持protobuf
golang写RPC
结构体字段首字母要大写,可以别人调用
函数名必须首字母大写
函数第一参数是接收参数,第二个参数是返回给客户端的参数,必须是指针类型
函数还必须有一个返回值error
protobuf
定义可以嵌套
正常结构
服务端go文件
.proto proto描述文件
.pb.go proto编译后文件