本节对 gRPC 的使用浅尝辄止,更多可参考:gRPC 中 Client 与 Server 数据交互的 4 种模式
前言
系列概览
《Golang 微服务教程》分为 10 篇,总结微服务开发、测试到部署的完整过程。
本节先介绍微服务的基础概念、术语,再创建我们的第一个微服务 consignment-service 的简洁版。在接下来的第 2~10 节文章中,我们会陆续创建以下微服务:
- consignment-service(货运服务)
- inventory-service(仓库服务)
- user-service(用户服务)
- authentication-service(认证服务)
- role-service (角色服务)
- vessel-service(货船服务)
用到的完整技术栈如下:
Golang, gRPC, go-micro // 开发语言及其 RPC 框架
Google Cloud, MongoDB // 云平台与数据存储
Docker, Kubernetes, Terrafrom // 容器化与集群架构
NATS, CircleCI // 消息系统与持续集成
代码仓库
作者代码:EwanValentine/shippy,译者的中文注释代码: wuYin/shippy
每个章节对应仓库的一个分支,比如本文part1 的代码在 feature/part1
开发环境
笔者的开发环境为 macOS,本文中使用了 make 工具来高效编译,Windows 用户需 手动安装
$ go env
GOARCH="amd64" # macOS 环境
GOOS="darwin" # 在第二节使用 Docker 构建 alpine 镜像时需修改为 linux
GOPATH="/Users/wuyin/Go"
GOROOT="/usr/local/go"
准备
掌握 Golang 的基础语法:推荐阅读谢大的《Go Web 编程》
go get -u google.golang.org/grpc # 安装 gRPC 框架
go get -u github.com/golang/protobuf/protoc-gen-go # 安装 Go 版本的 protobuf 编译器
微服务
我们要写什么项目?
我们要搭建一个港口的货物管理平台。本项目以微服务的架构开发,整体简单且概念通用。闲话不多说让我们开始微服务之旅吧。
微服务是什么?
在传统的软件开发中,整个应用的代码都组织在一个单一的代码库,一般会有以下拆分代码的形式:
- 按照特征做拆分:如 MVC 模式
- 按照功能做拆分:在更大的项目中可能会将代码封装在处理不同业务的包中,包内部可能会再做拆分
不管怎么拆分,最终二者的代码都会集中在一个库中进行开发和管理,可参考:谷歌的单一代码库管理
微服务是上述第二种拆分方式的拓展,按功能将代码拆分成几个包,都是可独立运行的单一代码库。区别如下:

微服务有哪些优势?
降低复杂性
将整个应用的代码按功能对应拆分为小且独立的微服务代码库,这不禁让人联想到 Unix 哲学:Do One Thing and Do It Well,在传统单一代码库的应用中,模块之间是紧耦合且边界模糊的,随着产品不断迭代,代码的开发和维护将变得更为复杂,潜在的 bug 和漏洞也会越来越多。
提高扩展性
在项目开发中,可能有一部分代码会在多个模块中频繁的被用到,这种复用性很高的模块常常会抽离出来作为公共代码库使用,比如验证模块,当它要扩展功能(添加短信验证码登录等)时,单一代码库的规模只增不减, 整个应用还需重新部署。在微服务架构中,验证模块可作为单个服务独立出来,能独立运行、测试和部署。
遵循微服务拆分代码的理念,能大大降低模块间的耦合性,横向扩展也会容易许多,正适合当下云计算的高性能、高可用和分布式的开发环境。
Nginx 有一系列文章来探讨微服务的许多概念,可 点此阅读
使用 Golang 的好处?
微服务是一种架构理念而不是具体的框架项目,许多编程语言都可以实现,但有的语言对微服务开发具备天生的优势,Golang 便是其中之一
Golang 本身十分轻量级,运行效率极高,同时对并发编程有着原生的支持,从而能更好的利用多核处理器。内置 net 标准库对网络开发的支持也十分完善。可参考谢大的短文:Go 语言的优势
此外,Golang 社区有一个很棒的开源微服务框架

最低0.47元/天 解锁文章

1300

被折叠的 条评论
为什么被折叠?



