简单的微服务框架(二)- 基础组件技术选型

服务框架

grpc

通信编码

protobuf

服务描述

服务描述指的是服务接口的描述,这里我们统一通过 Swagger 对所有微服务接口进行管理和维护。

服务网关

(这部分自己实现)要是文章没写的我之后会补上

消息系统

kafka

数据库存储

我们将选用 MySQL 作为数据库存储系统,同时通过 gorm 实现 Go 语言与数据库之间的交互,为了简化系统,这里我们不会做分布式数据库部署,而是将不同微服务对应的数据库存放到一个数据库服务器上,关于分布式数据库的话题将留到后续分布式系列教程中去介绍。

服务发现

拆分出多个微服务后,客户端调用远程服务时会涉及到服务路由与发现的问题,我们在本次重构中选择 Etcd 作为服务发现的注册中心。

负载均衡

负载均衡是为了提高系统的可用性,可以进一步细分为服务端负载均衡和客户端负载均衡,这里服务端负载均衡我们使用 Go-Micro 内置 Selector 组件的负载均衡机制(Random + Cache),客户端负载均衡指的是将这个负载均衡策略下放到客户端去实现,显然服务端负载均衡更简单一些,不需要我们做额外开发。

服务监控

服务监控我们选择引入第三方组件进行可视化管理,这里选择的方案是结合 Prometheus 和 Grafana 实现,前者用于存储监控样本数据源,后者提供对监控数据的可视化展示。

服务治理

服务治理指的是通过一系列手段来保证在各种意外情况下,微服务调用仍然能够正常进行,这些手段包括熔断、隔离、限流、降级、负载均衡等,这里我们选择引入开源的 hystrix-go 和 go-resiliency 来实现,前者是 Netflix 开源库 hystrix 的 Go 语言版本,集流量控制、熔断、容错等功能于一身,被誉为“雪崩利器”,后者可提供重试功能,是弹性模式的 Go 语言实现。

服务追踪

服务追踪用于对每个请求调用的分布式完整服务链路进行记录,从而方便问题定位和故障分析,这里我们选择引入开源的分布式追踪系统 ZipKin实现服务追踪。

自动化测试

在本次重构中,我们使用 GoConvey 编写行为测试代码,并集成 CircleCI 进行自动化测试。

自动化部署

最后,我们将通过 Docker + Kubernetes 对微服务进行容器化编排和自动化部署。

你可能感兴趣的:(简单的微服务框架(二)- 基础组件技术选型)