初识微服务
微服务架构是用来替换传统的单体架构的。它使用细颗粒度的服务及其组合来完成一个业务系统的工作。服务间是以一种约定来进行通信。微服务架构会带来如下的好处:
- 开发团队可以并行进行开发工作;
- 新加入的工作人员更容易上手;
- 可以在组成系统的组件级别上进行持续集成和持续交付;
- 它是一个松散的架构,不同的组件更容易替换;
- 微服务架构不依赖与特定的语言和技术;
当谈论微服务时,服务的编排和发现是非常重要的。例如Kubernetes就用于编排docker容器。通常来说一个微服务对应一个容器是一个比较好的实践。
服务发现是一个自动化发现一个微服务实例的IP地址的过程。服务发现避免了硬编码IP地址的问题。
Go Micro
Netflix’s Eureka和Spring Boot是非常有名的用于创建微服务的框架。 Go Micro提供了同样的能力。它是一个使用Golang创建微服务的工具集。它非常轻量化,这意味在开始使用时它比较容易上手,而且体积会比较小,但随着服务数量增加和业务的复杂化,它也可以变得很大。
它创建微服务的方式对于Golang开发者来说非常友好。Go Micro可以使用插件进行特性的扩充,Go Micro支持以下特性:
- 服务发现
- 负载均衡
- 消息编码
- 异步消息
- 可插拔的插件体系架构
开发微服务
下面我们就进行具体的微服务开发工作,在这里我们的客户端和服务端通过gRPC进行通信
安装必要的插件
go get -u github.com/golang/protobuf/protoc-gen-go
go get github.com/micro/protoc-gen-micro
开发服务端
定义微服务
首先我们需要使用protocol buffers对我们的服务进行定义:
syntax = "proto3";
option go_package = "protofiles";
service Encrypter {
rpc Encrypt(Request) returns (Response) {
}
rpc Decrypt(Request) returns (Response) {
}
}
message Request {
string message = 1;
string key = 2;
}
message Response {
string result = 1;
}
编译
在我们定义完服务后,就可以在项目根目录下使用如下命令进行编译:
protoc -I=. --micro_out=. --go_out=. protofiles/encryption.proto
参数说明