- pkg 基础组件
- bootstrap: 初始化配置信息。
使用Consul作为服务注册发现的组件,秒杀微服务的各个核心业务组件会注册到Consul并查询要通信的服务实例信息。
- pkg\common\service_instance.go:定义服务实例相关属性。
- pkg\discover\discovery_client.go:定义服务注册与发现客户端,并声明注册、注销、发现方法。
- pkg\discover\kit_consul_client.go: 定义注册、注销、发现方法。
抵抗较大的并发流量,结合服务注册与发现,可以对服务实例的数量动态的增加和减少,来应对不同的并发流量。 使用service_instance来构建负载均衡体系。本项目使用带权重的平滑轮询策略实现负载均衡,每个实例具有一个默认的权重值以及当前动态权重,具体实现在:
- pkg\loadbalance\loadbalance.go
微服务架构中,各个服务之间需要通过RPC相互交互,在之前的1和2小节已经实现了各个服务注册以及发现、负载均衡方法,在开始实现各个服务实例前,需要定义他们之间相互通信的RPC客户端,用于统一封装业务服务提供的RPC接口客户端。
- pkg\client\oauth.go:鉴权服务RPC接口(CheckToken)
- pkg\client\decorator.go:RPC接口的装饰器方法,作用是对RPC接口中传入的RPC路径进行RPC请求,并进行熔断保护、链路追踪、服务发现、负载均衡。真正实现RPC调用的是在这个方法中,而CheckToken效果就相当于本地方法。
ZooKeeper 是一个分布式数据一致性解决方案,主要用于解决分布式系统中的数据管理问题,如统一配置管理、命名服务、分布式同步、组服务等。本项目的秒杀活动和秒杀商品信息会存储在ZooKeeper中,使用watcher机制实时更新信息。
秒杀逻辑使用go-kit搭建每个服务的相关逻辑以及流程,包括管理、核心、业务系统。
- sk-admin:秒杀管理系统。
- sk-core: 秒杀核心系统。
- sk-app: 秒杀业务系统。
- app主要为前端提供查询和进行秒杀的HTTP接口,处理黑白名单、流量限制、通过redis将合法的请求发送给core,将结果返回给前端。
- core主要处理app发送的合法秒杀请求。
- admin主要将秒杀活动以及商品信息存储到MySQL以及同步到ZooKeeper,供core以及app调用。
核心功能由go-kit搭建:由内而外包括service层、endpoint层、transport层,以及相关模块如下:
- service