kratos开源和工程化实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. ❭❭❭ Kratos开源与工程化最佳实践 By longxia
2. ❭❭❭ • Kratos开源最佳实践 • 配置实践 • Error实践 • Project Layout • Protobuf管理 • 以前的Makefile & third_party • 为何使用Buf • Buf的定义和使用 • 事物管理 • 事物脚本 • 贫血模型 • 新的模式 • 底层实现
3. ❭❭❭ Kratos开源实践 - 配置规范的思考 开源实践 在 Kratos 项目中,配置源可以指定多个,并且 config 会进行合并成 key/value 。 然后用户通过 Scan 或者 Value 获取对应键值内容; 主要功能特性: • 默认实现了本地文件数据源。 • 用户可以自定义数据源实现。 • 支持配置热更新,通过 Atomic 方式变更已有 Value。 • 支持自定义数据源解码实现。 配置填充: • 增加对 flags、环境变量 占位符替换。 • 通过铺平的 key/value,进行二次赋值替换。 • 例如,a.b.c = {{ xx.xxx }} proto管理 事物模式
4. ❭❭❭ Kratos开源实践 - 配置规范的思考 在 Kratos 项目中,我们默认通过 proto 进行定义配置文件。 主要的以下几点好处: • 可以定义统一的模板配置 • 添加对应的配置校验 • 更好地管理配置 • 跨语言、跨平台支持 开源实践 proto管理 事物模式
5. ❭❭❭ Kratos开源实践 - Error Handling 错误传播 如果您的 API 服务依赖于其他服务,则不应盲目 地将这些服务的错误传播到您的客户端。在翻译 错误时,我们建议执行以下操作: • 隐藏实现详细信息和敏感信息 • 调整负责该错误的一方 例如,从另一个服务接收 INVALID_ARGUMENT 错误 的服务器应该将 INTERNAL 传播给它自己的调用者。 开源实践 proto管理 事物模式
6. ❭❭❭ Kratos开源实践 - IDL&Project Layout 开源实践 proto管理 在统一仓库中管理 Proto ,以仓库目录作为统一包名: 目录结构和 package 对齐; • /<业务域>.<业务>.<应用服务>.<版本> • /account.passport.login.v1/<resource> • bapis • -account // DCDN 转发到数据中心 https://github.com/googleapis/googleapis • --passport // ELB 转发到 APIGW • ---login • ----v1 // 服务发现筛选instance的版本 // APIGW 转发到 Service 事物模式
7. ❭❭❭ Protobuf管理 - Makefile&third_party 开源实践 proto管理 • windows平台支持不友好,语法不统一 • protoc\protoc-gen-xxx二进制版本不统一 • proto文件依赖难以管理 事物模式
8. ❭❭❭ Protobuf管理 - Why Buf 1. 可配置的lint和break change检查 - 40 lint checkers and 54 breaking checkers 2. proto依赖管理 - 中心化的Buf Schema Registry提供了 protobuf的存储和版本记录,类似cargo、go mod 3. 编译速度 - 内置的protobuf编译器速度更快,大约是protoc的 4倍 4. Plugin中心化管理 - 统一了protoc-gen-xxx的版本 5. 跨平台 - 支持Linux、Mac、Windows 开源实践 proto管理 事物模式
9. ❭❭❭ Protobuf管理 - Buf目录文件结构 开源实践 proto管理 buf.yaml: 定义在存放proto api文件的根目录下,管理api的proto依赖、lint、breakchange等规则 buf.lock: buf build后根据buf.yam自动生成的文件,用来记录和锁定依赖的版本 buf.work.yaml: 构建工作目录下,定义了当前工作目录下需要编译的proto api文件目录 buf.gen.yaml: 构建工作目录下,定义了编译proto文件时的具体规则和插件信息 事物模式
10. ❭❭❭ Protobuf管理 - 工作空间&编译规则 开源实践 proto管理 https://github.com/go-kratos/examples/tree/main/blog • 可以使用远程plugin来统一编译环境 • 自定义插件输入和输出参数 事物模式
11. ❭❭❭ Protobuf管理 - 完整CI流程 开源实践 buf lint buf break buf build buf generate proto管理 事物模式
12. ❭❭❭ 事务管理 - 事务脚本 开源实践 proto管理 事物管理 和事物相关的业务逻辑都放在了dao层 里面,有点类似于旧时代的存储过程 • 事物方法中不可避免的将上层业务逻辑携带到了dao层 • dao层抽象程度低,粒度太粗无法复用 • 无法跨业务域
13. ❭❭❭ 事务管理 - 贫血模型 开源实践 proto管理 Service层直接开启Tx对象,并将Tx对 象传递给Dao层操作,尤其有了ORM 框架后,这种方式推上了高峰。 • 业务层会涉及到复杂的事物控制逻辑(commit、rollback 等),容易出错 • 会导致dao层两个方法,带Tx和不带Tx的,代码比较冗余 事物管理
14. ❭❭❭ 事务管理 - 设计目标 开源实践 proto管理 目标: 1. 将业务逻辑与事务代码分开。 在编写业务用例时,开发者应该只需考虑业务逻辑,不需要同 时考虑怎样给业务逻辑加事务管理。如果以后需要添加事务支持,你可以在现有业务逻辑的 基础上进行简单封装,而无需更改任何其他代码。事务实现细节应该对业务逻辑透明。 2. 事务逻辑应该作用于用例层(业务逻辑),而不在持久层上。 3. 数据服务(数据持久性)层应对事务逻辑透明。 这意味着持久性代码应该是相同的,无论它 是否支持事务。 4. 你可以选择延迟支持事物。 你可以先编写没有事务的用例,稍后可以在不修改现有代码的情 况下给该用例加上事务。你只需添加新代码。 事物管理
15. ❭❭❭ 事务管理 - 新的模式 开源实践 proto管理 事物管理 • 业务逻辑用例层通过wire由data(持久化层)注入进 来Transation接口,用例层对事物的实现细节无感知 • 业务逻辑用例层通过Transation接口开启的事物 tx实 体通过ctx进行传递,需要在同个Scope作用域下面执 行,data层无需实现多个带Tx的版本
16. ❭❭❭ 事务管理 - data层实现 开源实践 https://github.com/go-kratos/examples/tree/main/transaction gorm ent proto管理 事物管理
17. ❭❭❭ 感谢 感谢! 欢迎大家关注go-kratos

Accueil - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-16 20:42
浙ICP备14020137号-1 $Carte des visiteurs$