-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
189 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
## 本书简介 | ||
--- | ||
**比邻英语本**是 GoFrame 中级实战教程。与初级教程[星辰英语本](https://goframe.org/course/starbook)不同,**微服务**开发是本书的主旋律。 | ||
|
||
网上的教程总是哐当一下,甩出各类技术名词,成吨的架构分层等等,看的人眼花缭乱。花了很久的时间,看了一大堆文章,也没能写出一行代码。 | ||
|
||
本书旨在抽丝剥茧,将复杂的微服务体系理明白,说清楚。从`GoFrame`框架出发,带领朋友们实际开发一个微服务项目,看看微服务究竟是怎么回事。 | ||
|
||
以实际项目为导向,分享更多专业、实用的编程技巧和经验,让您学有所成是作者的期望! | ||
|
||
## 目标读者 | ||
--- | ||
已经对`GoFrame`小有所成,希望进一步掌握微服务开发的朋友。 | ||
|
||
## 阅读建议 | ||
--- | ||
本书是一本操作向的书籍,唯一的建议就是跟着书籍一步一步的操作。耳闻之不如目见之,目见之不如足践之。 | ||
|
||
在跟着本书操作过程中,最好结合[官方开发手册](https://goframe.org/docs/design),尝试举一反三,才能更好的理解和掌握。 | ||
|
||
## 联系作者 | ||
--- | ||
在编写本书的过程中,不可避免的会有一些错误或者不足之处,如果你有任何问题或者建议,可以在下方留言,也可以联系我,我会尽快回复你! | ||
- 邮箱: `[email protected]` `[email protected]` | ||
- 网站: [https://oldme.net](https://oldme.net) | ||
- 微信: `NobodyIsRight` 来者请备注来意哦! | ||
|
||
## 遇到问题 | ||
--- | ||
在开发中,遇到各种问题都是正常的。如何解决问题才是关键,在遇到问题时,请先尝试自行解决。查阅`GoFrame`文档,使用搜索引擎都是不错的解决问题的方式。如果实在无法解决,可以联系我,我会尽力帮助你解决问题。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
## 命令行 | ||
--- | ||
本书会在一些地方使用命令行,我将使用 `$` 符号作为提示符,你不需要输入这个符号。比如,如果我写了 `$ echo "Hello, GoFrame!" `,你只需要输入 `echo "Hello, GoFrame!" ` 即可。 | ||
|
||
```bash | ||
$ echo "Hello, GoFrame!" | ||
Hello, GoFrame! | ||
``` | ||
|
||
`echo` 是一个输出命令,它会将 `Hello, GoFrame!` 输出到终端。 | ||
|
||
## 代码省略 | ||
--- | ||
为了保证篇幅的整洁,在不必要的竖版代码中,我会使用`...`来省略代码。 | ||
|
||
```go | ||
package main | ||
|
||
import "fmt" | ||
|
||
... | ||
|
||
func main() { | ||
fmt.Println("Hello GoFrame") | ||
} | ||
|
||
... | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
## 基础功能 | ||
--- | ||
**比邻英语本**的目的是帮助读者学习微服务,所以在项目功能上尽量简化,减少复杂度,以此来展现微服务的特性: | ||
- 用户注册; | ||
- 用户登陆; | ||
- 用户信息查询; | ||
- 单词的增删改查; | ||
|
||
## 架构介绍 | ||
--- | ||
我们将构建两个微服务和一个业务网关服务,来分别提供不同的业务功能。 | ||
|
||
### 用户微服务 | ||
该微服务用作用户注册,登陆,信息查询等功能。 | ||
|
||
### 单词微服务 | ||
单词微服务对外提供单词的基础的 `CRUD` | ||
|
||
### 网关服务 | ||
网关服务是一个重点,但是也不必担心,它其实就是一个普通的`HTTP`而已,区别在于,网关没有具体的业务功能,而交由微服务处理。 | ||
|
||
**将`HTTP`协议转换成`gRPC`协议**是我们需要着重的点。其他网关功能和`HTTP`一样,路由管理,参数校检,权限校检,定时任务等等,其实就是我们熟知的`HTTP`,不是吗? | ||
|
||
## 技术栈清单 | ||
--- | ||
- GoFrame | ||
- Protocol | ||
- gRPC | ||
- Etcd | ||
- MySQL | ||
|
||
## 代码仓库 | ||
--- | ||
微服务将传统的服务拆分开来,代码自然也分离开了。微服务代码仓库,有如下两种管理方式: | ||
- **Polyrepo:** 多仓库模式,每个微服务都有独立的仓库。优点是每个仓库相对较小,易于管理。缺点是需要额外的工具,流程协调各个服务之间的依赖和版本。 | ||
- **Monorepo:** 单一仓库模式,所有微服务的代码都存放在一个仓库中。优点是可以统一管理版本和依赖,缺点是仓库可能会变得庞大,管理复杂度增加。 | ||
|
||
我们使用`Monorepo`,原因是我们框架都是`GoFrame`,很统一。另外,`Polyrepo`也不需要多介绍,一个服务一个目录,没什么好说的。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
## 测试工具 | ||
--- | ||
`gRPC`接口开发完成后,需要使用一些测试工具来测试是否正常运行。比较流行的测试工具有`Postman`、`Apifox`、`Apipost`等,它们大同小异,你可以根据自己的喜好选择一个。 | ||
|
||
本书以文本行展示测试结果,例如: | ||
```text | ||
{ | ||
"Username": "oldme_1", | ||
"Password": "12345678" | ||
} | ||
``` | ||
|
||
## GoFrame | ||
--- | ||
`Golang`和`GoFrame`的安装方式不再赘述。这里使用的版本信息如下: | ||
- `go version go1.22.2 windows/amd64` | ||
- `goframe v2.8.1` | ||
|
||
> 如果你的版本和我不一致,也无需担心,`Go`和`GoFrame`都有着强大的向下兼容性。 | ||
## Protocol | ||
--- | ||
`Protocol` 是 Google 设计的数据序列化格式,用于结构化数据的序列化和反序列化。使用 `.proto` 文件定义消息结构,然后通过编译器生成相应语言的代码。 | ||
|
||
根据不同的操作系统,在 [Protocal Release](https://github.com/protocolbuffers/protobuf/releases) 下载对应的文件安装。如果是 `MacOS` 环境,可以使用 `brew` 工具安装依赖: | ||
|
||
```bash | ||
$ brew install grpc protoc-gen-go protoc-gen-go-grpc | ||
``` | ||
|
||
检测是否安装成功。 | ||
```bash | ||
$protoc --version | ||
libprotoc 26.1 | ||
``` | ||
版本只要不是相差太大,都无须担心。 | ||
|
||
## gRPC | ||
--- | ||
`gRPC`是一个由 Google 开发的远程过程调用(RPC)框架,基于HTTP/2。它使用 `Protocol` 作为默认的序列化格式。可以理解为 `HTTP` 和 `JSON` 的关系。 | ||
|
||
`Go`语言通过`gRPC-go`插件提供`gRPC`功能。执行命令安装插件: | ||
```bash | ||
$ go install google.golang.org/protobuf/cmd/protoc-gen-go@latest | ||
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest | ||
``` | ||
|
||
## etcd | ||
--- | ||
etcd 是一个分布式键值存储系统,常用于分布式系统中的服务发现。安装它有多种方式,这里贴出 | ||
`docker-compose.yaml`文件用作参考。 | ||
|
||
```yaml | ||
version: "3.7" | ||
|
||
services: | ||
etcd: | ||
image: "bitnami/etcd:3.5" | ||
container_name: "etcd" | ||
# 总是重启 | ||
restart: "always" | ||
ports: | ||
- 2379:2379 | ||
environment: | ||
# 时区设置 | ||
- TZ=Asia/Shanghai | ||
# 允许无认证访问 | ||
- ALLOW_NONE_AUTHENTICATION=yes | ||
# etcd 客户端访问URL | ||
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd:2379 | ||
volumes: | ||
# 将数据映射到宿主机 | ||
- etcd_data:/bitnami/etcd | ||
|
||
volumes: | ||
etcd_data: | ||
driver: local | ||
driver_opts: | ||
type: "none" | ||
o: "bind" | ||
device: "/home/docker/etcd/data" | ||
``` | ||
如果安装成功,在浏览器访问 [http://IP:2379/version](http://IP:2379/version),会出现以下信息: | ||
```json | ||
{"etcdserver": "3.5.17","etcdcluster": "3.5.0"} | ||
``` | ||
|
||
如果你更酷一些,安装个`etcd`集群或者学习一下`etcd`的基础使用,可以参考[此文](https://oldme.net/article/32)。 | ||
|
||
## 数据库 | ||
--- | ||
`MySQL`的安装不必多说,使用其他数据库亦可。 |
Empty file.