1.微服务
单一的模块无法再支撑大量的用户请求,如果一个功能挂了很可能导致整个项目奔溃,所以要将一个项目按照不同的功能分成多个模块进行部署,每个模块之间低耦合,每个模块通过RPC进行内部通讯。
微服务的好处:将复杂的项目模块化、有利于程序员开发、有利于提高项目健壮性、也有利于测试和维护
微服务的坏处:拆分项目需要一定的工足量、要部署多个模块、每个模块沟通需要成本、项目整体架构复杂了、还需要保证模块数据的一致性
2.微服务go-zero
1).啥是go-zero
go-zero 能自动生成微服务,是一个简单好用的微服务框架。
go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。
go-zero 包含极简的 API 定义和生成工具 goctl,可以根据定义的 api 文件一键生成 Go, iOS, Android, Kotlin, Dart, TypeScript, JavaScript 代码,并可直接运行。
使用go-zero的好处:
● 轻松获得支撑千万日活服务的稳定性
● 内建级联超时控制、限流、自适应熔断、自适应降载等微服务治理能力,无需配置和额外代码
● 微服务治理中间件可无缝集成到其它现有框架使用
● 极简的API描述,一键生成各端代码
● 自动校验客户端请求参数合法性
● 大量微服务治理和并发工具包
2).安装goctl
(1).兴建个目录,在项目根目录下安装goctl
go get -u github.com/tal-tech/go-zero/tools/goctl
(2).安装go-zero
go get -u github.com/tal-tech/go-zero
(3).快速生成api项目
goctl api new user
cd到user项目根目录,构建go项目
go mod init user
go mod tidy
(6).修改user.api
下载包
go run user.go -f etc/user-api.yaml
service user-api {
@handler UserHandler
get /from/:name(Request) returns (Response);
}
type Request {
Username string `json:"username"`
Passwd string `json:"passwd"`
Age int `json:"age"`
Sex string `json:"sex"`
}
type Response {
Username string `json:"username"`
Passwd string `json:"passwd"`
Age int `json:"age"`
Sex string `json:"sex"`
}
service user-api {
@doc(
summary: 公开的api函数
desc: >
getUser: 获取用户,
login: 用户登录
)
@server(
handler: registerHandler
folder: open
)
post /open/getUser(Request) returns(Response)
@server(
handler: authorizationHandler
folder: open
)
post /open/login(Request) returns(Response)
}
在user目录下执行以下命令重新生成api
goctl api go -api user.api -dir .
(7).在user文件夹下开始运行项目
go run user.go -f etc/user-api.yaml
默认端口在8888
直接post请求http://127.0.0.1:8888/open/getUser即可