//为完成青训营活动之作
RPC 框架
远程函数调用 (Remote Procedure Calls) 需要解决的问题:
- 函数映射
- 数据转换成字节流
- 网络传输
Kitex 生成代码
使用 kitex -module example -service example echo. thrift 命令生成代码 build. sh 构建脚本 kitex_gen: IDL 内容相关的生成代码,主要是基础的 Server/Client 代码 main. go 程序入口 handler. go 用户在该文件里实现 IDL service 定义的方法
相关概念
IDL
(interface description language)文件 通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信
生成代码
通过编译器工具可以把 IDL 文件转换成语言对应的静态库
优点
- 单一职责,有利于分工协作和运维开发
- 可拓展性强,资源使用率更优
- 故障隔离,服务的整体可靠性更高
BinaryProtocol
二进制编码 (TLV)
- Tag: 标签可以理解为类型
- Length:长度
- Value:值,value 也可以是一个 TLV 结构
分层
协议层
- 特殊结束符
- 变长协议
- 定长+不定长
- 定长部分需要描述不定长长度
网络通信层
- sockets API
保障策略
- 熔断:保护调用方,防止被调用的服务出现问题而影响到整个链路
- 限流:保护被调用方,防止大流量把服务压垮
- 超时控制:避免浪费资源在不可用节点上
合并部署
微服务过微,传输和序列化开销越来越大,将亲和性强的服务实例尽可能调度到同一个物理机,远程 RPC 调用优化为本地 IPC 调用
HTTP 框架
Hertz 使用
Hertz 提供了参数路由和通配路由,路由优先级:静态路由>命令路由>通配路由
参数绑定
Bind,Validate、BindAndValidate 进行参数绑定和校验。
性能
ORM 框架
Hook
在创建、查询、更新、删除等操作之前、之后自动调用的函数。
性能提高
对于写操作(创建、更新、删除)可以使用 SkipDefaultTransaction 关闭默认事务