这是我参与「第五届青训营」伴学笔记创作活动的第2天
一、本堂课重点内容:
- Hertz
- Kitex
- GORM
- 项目实战
二、详细知识点介绍:
Hertz
Hertz 是一个 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthttp、gin、echo 的优势, 并结合字节跳动内部的需求,使其具有高易用性、高性能、高扩展性等特点,目前在字节跳动内部已广泛使用。 如今越来越多的微服务选择使用 Golang,如果对微服务性能有要求,又希望框架能够充分满足内部的可定制化需求,Hertz 会是一个不错的选择。
Kitex
Kitex是字节跳动内部的 Golang 微服务 RPC 框架,具有高性能、强可扩展的特点,在字节内部已广泛使用。如果对微服务性能有要求,又希望定制扩展融入自己的治理体系,Kitex 会是一个不错的选择
GORM
对开发人员友好的出色Golang ORM 库。
Easy Note项目
介绍
一个 实现简单笔记服务的kitexdemo,分为以下三块:
| 服务名 | 作用 | 技术框架 | 协议 | 路径 | IDL |
|---|---|---|---|---|---|
| demoapi | http interface | kitex/hertz | http | bizdemo/easy_note/cmd/api | |
| demouser | user data management | kitex/gorm | protobuf | bizdemo/easy_note/cmd/user | bizdemo/easy_note/idl/user.proto |
| demonote | note data management | kitex/gorm | thrift | bizdemo/easy_note/cmd/note | bizdemo/easy_note/idl/note.thrift |
调用关系
http
┌────────────────────────┐
┌─────────────────────────┤ ├───────────────────────────────┐
│ │ demoapi │ │
│ ┌──────────────────► │◄──────────────────────┐ │
│ │ └───────────▲────────────┘ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ resolve │ │
│ │ │ │ │
req resp │ resp req
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ ┌──────────▼─────────┐ │ │
│ │ │ │ │ │
│ │ ┌───────────► Etcd ◄─────────────────┐ │ │
│ │ │ │ │ │ │ │
│ │ │ └────────────────────┘ │ │ │
│ │ │ │ │ │
│ │ register register │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
┌▼──────┴───────┴───┐ ┌──┴────────┴───────▼─┐
│ │───────────────── req ────────────────────►│ │
│ demonote │ │ demouser │
│ │◄──────────────── resp ────────────────────│ │
└───────────────────┘ └─────────────────────┘
thrift protobuf
使用基本功能
-
中间件、速率限制、请求重试、超时控制、连接复用
-
Tracing
- 使用 jaeger
-
自定义边界处理程序
- 实现CPU利用率的自定义限制处理程序
-
服务发现和注册
- 使用registry-etcd来发现和注册服务
项目目录
| 目录 | 介绍 |
|---|---|
| pkg/constants | constant |
| pkg/bound | customized bound handler |
| pkg/errno | customized error number |
| pkg/middleware | RPC middleware |
| pkg/tracer | init jaeger |
| dal | db operation |
| pack | data pack |
| service | business logic |
项目运行
运行依赖基础
docker-compose up
运行demonote服务
cd cmd/note
sh build.sh
sh output/bootstrap. sh
运行demouser服务
cd cmd/user
sh build.sh
sh output/bootstrap.sh
运行demoapi服务
cd cmd/api
chmod +x run. sh
. /run. sh