From 418e2b1d1bebcb10e2212bea75ab9bfaaf3ca04c Mon Sep 17 00:00:00 2001 From: oldme Date: Mon, 2 Dec 2024 16:57:19 +0800 Subject: [PATCH] feat(proxima): init --- docs/course/proxima-book/proxima-book.md | 30 ++++++ ...31\344\275\234\347\272\246\345\256\232.md" | 28 ++++++ ...71\347\233\256\344\273\213\347\273\215.md" | 38 ++++++++ ...57\345\242\203\345\207\206\345\244\207.md" | 93 +++++++++++++++++++ ...56\345\210\235\345\247\213\345\214\226.md" | 0 5 files changed, 189 insertions(+) create mode 100644 docs/course/proxima-book/proxima-book.md create mode 100644 "docs/course/proxima-book/\347\254\254\344\270\200\347\253\240-\345\237\272\347\241\200\344\277\241\346\201\257/1.1.\345\206\231\344\275\234\347\272\246\345\256\232.md" create mode 100644 "docs/course/proxima-book/\347\254\254\344\270\200\347\253\240-\345\237\272\347\241\200\344\277\241\346\201\257/1.2.\351\241\271\347\233\256\344\273\213\347\273\215.md" create mode 100644 "docs/course/proxima-book/\347\254\254\344\270\200\347\253\240-\345\237\272\347\241\200\344\277\241\346\201\257/1.3.\347\216\257\345\242\203\345\207\206\345\244\207.md" create mode 100644 "docs/course/proxima-book/\347\254\254\344\270\200\347\253\240-\345\237\272\347\241\200\344\277\241\346\201\257/1.4.\351\241\271\347\233\256\345\210\235\345\247\213\345\214\226.md" diff --git a/docs/course/proxima-book/proxima-book.md b/docs/course/proxima-book/proxima-book.md new file mode 100644 index 00000000000..58b3effdfd6 --- /dev/null +++ b/docs/course/proxima-book/proxima-book.md @@ -0,0 +1,30 @@ +## 本书简介 +--- +**比邻英语本**是 GoFrame 中级实战教程。与初级教程[星辰英语本](https://goframe.org/course/starbook)不同,**微服务**开发是本书的主旋律。 + +网上的教程总是哐当一下,甩出各类技术名词,成吨的架构分层等等,看的人眼花缭乱。花了很久的时间,看了一大堆文章,也没能写出一行代码。 + +本书旨在抽丝剥茧,将复杂的微服务体系理明白,说清楚。从`GoFrame`框架出发,带领朋友们实际开发一个微服务项目,看看微服务究竟是怎么回事。 + +以实际项目为导向,分享更多专业、实用的编程技巧和经验,让您学有所成是作者的期望! + +## 目标读者 +--- +已经对`GoFrame`小有所成,希望进一步掌握微服务开发的朋友。 + +## 阅读建议 +--- +本书是一本操作向的书籍,唯一的建议就是跟着书籍一步一步的操作。耳闻之不如目见之,目见之不如足践之。 + +在跟着本书操作过程中,最好结合[官方开发手册](https://goframe.org/docs/design),尝试举一反三,才能更好的理解和掌握。 + +## 联系作者 +--- +在编写本书的过程中,不可避免的会有一些错误或者不足之处,如果你有任何问题或者建议,可以在下方留言,也可以联系我,我会尽快回复你! +- 邮箱: `tyyn1022@gmail.com` `tyyn1022@163.com` +- 网站: [https://oldme.net](https://oldme.net) +- 微信: `NobodyIsRight` 来者请备注来意哦! + +## 遇到问题 +--- +在开发中,遇到各种问题都是正常的。如何解决问题才是关键,在遇到问题时,请先尝试自行解决。查阅`GoFrame`文档,使用搜索引擎都是不错的解决问题的方式。如果实在无法解决,可以联系我,我会尽力帮助你解决问题。 diff --git "a/docs/course/proxima-book/\347\254\254\344\270\200\347\253\240-\345\237\272\347\241\200\344\277\241\346\201\257/1.1.\345\206\231\344\275\234\347\272\246\345\256\232.md" "b/docs/course/proxima-book/\347\254\254\344\270\200\347\253\240-\345\237\272\347\241\200\344\277\241\346\201\257/1.1.\345\206\231\344\275\234\347\272\246\345\256\232.md" new file mode 100644 index 00000000000..b218660ee7a --- /dev/null +++ "b/docs/course/proxima-book/\347\254\254\344\270\200\347\253\240-\345\237\272\347\241\200\344\277\241\346\201\257/1.1.\345\206\231\344\275\234\347\272\246\345\256\232.md" @@ -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") +} + +... +``` diff --git "a/docs/course/proxima-book/\347\254\254\344\270\200\347\253\240-\345\237\272\347\241\200\344\277\241\346\201\257/1.2.\351\241\271\347\233\256\344\273\213\347\273\215.md" "b/docs/course/proxima-book/\347\254\254\344\270\200\347\253\240-\345\237\272\347\241\200\344\277\241\346\201\257/1.2.\351\241\271\347\233\256\344\273\213\347\273\215.md" new file mode 100644 index 00000000000..efa7dbe4356 --- /dev/null +++ "b/docs/course/proxima-book/\347\254\254\344\270\200\347\253\240-\345\237\272\347\241\200\344\277\241\346\201\257/1.2.\351\241\271\347\233\256\344\273\213\347\273\215.md" @@ -0,0 +1,38 @@ +## 基础功能 +--- +**比邻英语本**的目的是帮助读者学习微服务,所以在项目功能上尽量简化,减少复杂度,以此来展现微服务的特性: +- 用户注册; +- 用户登陆; +- 用户信息查询; +- 单词的增删改查; + +## 架构介绍 +--- +我们将构建两个微服务和一个业务网关服务,来分别提供不同的业务功能。 + +### 用户微服务 +该微服务用作用户注册,登陆,信息查询等功能。 + +### 单词微服务 +单词微服务对外提供单词的基础的 `CRUD` + +### 网关服务 +网关服务是一个重点,但是也不必担心,它其实就是一个普通的`HTTP`而已,区别在于,网关没有具体的业务功能,而交由微服务处理。 + +**将`HTTP`协议转换成`gRPC`协议**是我们需要着重的点。其他网关功能和`HTTP`一样,路由管理,参数校检,权限校检,定时任务等等,其实就是我们熟知的`HTTP`,不是吗? + +## 技术栈清单 +--- +- GoFrame +- Protocol +- gRPC +- Etcd +- MySQL + +## 代码仓库 +--- +微服务将传统的服务拆分开来,代码自然也分离开了。微服务代码仓库,有如下两种管理方式: +- **Polyrepo:** 多仓库模式,每个微服务都有独立的仓库。优点是每个仓库相对较小,易于管理。缺点是需要额外的工具,流程协调各个服务之间的依赖和版本。 +- **Monorepo:** 单一仓库模式,所有微服务的代码都存放在一个仓库中。优点是可以统一管理版本和依赖,缺点是仓库可能会变得庞大,管理复杂度增加。 + +我们使用`Monorepo`,原因是我们框架都是`GoFrame`,很统一。另外,`Polyrepo`也不需要多介绍,一个服务一个目录,没什么好说的。 \ No newline at end of file diff --git "a/docs/course/proxima-book/\347\254\254\344\270\200\347\253\240-\345\237\272\347\241\200\344\277\241\346\201\257/1.3.\347\216\257\345\242\203\345\207\206\345\244\207.md" "b/docs/course/proxima-book/\347\254\254\344\270\200\347\253\240-\345\237\272\347\241\200\344\277\241\346\201\257/1.3.\347\216\257\345\242\203\345\207\206\345\244\207.md" new file mode 100644 index 00000000000..60165a117bb --- /dev/null +++ "b/docs/course/proxima-book/\347\254\254\344\270\200\347\253\240-\345\237\272\347\241\200\344\277\241\346\201\257/1.3.\347\216\257\345\242\203\345\207\206\345\244\207.md" @@ -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`的安装不必多说,使用其他数据库亦可。 \ No newline at end of file diff --git "a/docs/course/proxima-book/\347\254\254\344\270\200\347\253\240-\345\237\272\347\241\200\344\277\241\346\201\257/1.4.\351\241\271\347\233\256\345\210\235\345\247\213\345\214\226.md" "b/docs/course/proxima-book/\347\254\254\344\270\200\347\253\240-\345\237\272\347\241\200\344\277\241\346\201\257/1.4.\351\241\271\347\233\256\345\210\235\345\247\213\345\214\226.md" new file mode 100644 index 00000000000..e69de29bb2d