Skip to content

Commit

Permalink
feat(proxima): init
Browse files Browse the repository at this point in the history
  • Loading branch information
oldme-git committed Dec 2, 2024
1 parent c7508df commit 418e2b1
Show file tree
Hide file tree
Showing 5 changed files with 189 additions and 0 deletions.
30 changes: 30 additions & 0 deletions docs/course/proxima-book/proxima-book.md
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`文档,使用搜索引擎都是不错的解决问题的方式。如果实在无法解决,可以联系我,我会尽力帮助你解决问题。
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")
}

...
```
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`也不需要多介绍,一个服务一个目录,没什么好说的。
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.

0 comments on commit 418e2b1

Please sign in to comment.