Open dduo518 opened 1 year ago
系统架构致力于为服务提供技术解决方案、以便更加健壮、可维护、可扩展、可测试、提供高性能、高可用的技术方案。
服务注册、服务发现、限流、熔断、超时控制、健康检查、负载均衡、动态扩容
HTTP、GRPC、TCP、FIX
消息队列、数据中间件、缓存中间件、HTTP Router解析、Params Parse、Auth等
消息发布\订阅 、 事件广播系统
内存保存、获取、TTL
业务、系统配置动态更新
业务日志、运行日志收集
系统性能指标、业务指标上报
运行时异常捕获监控、收集、报警
统一开发环境、开发、编码规范等
Goland 配置
Setting---> tools---> Action As Save
本文为编写 .proto 文件提供了一份规范指引。通过遵守这些规范约定,可以使 message 定义以及相关的类保持一致性,项目更具维护性,同时也将更易于阅读。为了更好的统一,避免产生兼容问题,统一使用proto3 版本。
Protobuf 文件管理通常有俩种模式:
文件的作用域是指:主要规范指导合适应该使用一个新的.proto文件。
.proto文件编写风格规范依据官方指南为标准。
其中如下几点必须按照以下规范执行
Package
Options
Service
Message
标识符
在消息定义中,每个字段都有唯一的一个数字标识符。这些标识符是用来在消息的二进制格式中识别各个字段的,一旦开始使用就不能够再改变。注:[1,15]之内的标识号在编码的时候会占用一个字节。[16,2047]之内的标识号则占用2个字节。所以应该为那些频繁出现的消息元素保留 [1,15]之内的标识号。切记:要为将来有可能添加的、频繁出现的标识号预留一些标识号。
ref:https://protobuf.dev/programming-guides/style/
延续公司现行规范
三个基准分支: master、release、dev
单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类、超类、抽象类等中的方法。单元测试就是软件开发中对最小单位进行正确性检验的测试工作。
不同地方对单元测试有的定义可能会有所不同,但有一些基本共识:
Go的测试可以分为白盒测试和黑盒测试。
func TestName(t *testing.T)
*testing.T
├── go.mod ├── go.sum ├── logic │ ├── login_pwd.go │ ├── login_pwd_test.go │ ├── handler │ │ ├── heartbeat_handler.go │ │ └── heartbeat_handler_test.go │ └── init.go ├── main.go ├── readme.md
静态代码检测实现的工具主要是:golangci-lint。
静态代码检测实现的方式有以下几种:
1、本地开发环境,其中包括本地命令行、编辑器插件、pre-commit等
2、gitlab runner 流水线
1、go path:不推荐
2、go vendor:不推荐
3、go module: Golang 官方默认包管理机制
调试依赖包,可以在go.mod 文件使用replace来修改依赖包,如下:
replace ( github.com/google/uuid v1.1.1 => ../uuid )
1、公有包
2、私有包
私有包建立的作用是封装或者开发的可重用于公司级别或者跨项目级别的模块组件,一般的解决方案是通过gitlab 私有仓库进行管理
ref:https://go.dev/ref/mod#go-mod-file-retract
开发人员在日常开发中可以不依赖测试环境的基础组件,可一键启动本地独立开发环境,搭建一套独立的微服务环境,比如存储组件、消息队列组件、其他服务化组件、网关组件等。
1、开发人员快速配置、搭建本地环境
2、开发运行环境标准化
3、集成所有服务项目,开发环境不存在服务间依赖的影响
4、快速进行首次服务启动需要的基础数据进行迁移
系统技术架构
系统架构致力于为服务提供技术解决方案、以便更加健壮、可维护、可扩展、可测试、提供高性能、高可用的技术方案。
服务治理
服务注册、服务发现、限流、熔断、超时控制、健康检查、负载均衡、动态扩容
网络通信协议
HTTP、GRPC、TCP、FIX
中间件
消息队列、数据中间件、缓存中间件、HTTP Router解析、Params Parse、Auth等
订阅广播系统
消息发布\订阅 、 事件广播系统
内存存储系统
内存保存、获取、TTL
配置管理
业务、系统配置动态更新
日志收集
业务日志、运行日志收集
性能指标
系统性能指标、业务指标上报
异常监控
运行时异常捕获监控、收集、报警
开发流程
统一开发环境、开发、编码规范等
Golang 栈微服务架构规划图
流程规范
编码规范
编码风格原则
工具
Goland 配置
Setting---> tools---> Action As Save
代码规范
目录规范
Protobuf规范
本文为编写 .proto 文件提供了一份规范指引。通过遵守这些规范约定,可以使 message 定义以及相关的类保持一致性,项目更具维护性,同时也将更易于阅读。为了更好的统一,避免产生兼容问题,统一使用proto3 版本。
文件管理
Protobuf 文件管理通常有俩种模式:
文件结构
文件作用域
文件的作用域是指:主要规范指导合适应该使用一个新的.proto文件。
文件编码风格
.proto文件编写风格规范依据官方指南为标准。
其中如下几点必须按照以下规范执行
Package
Options
Service
Message
标识符
在消息定义中,每个字段都有唯一的一个数字标识符。这些标识符是用来在消息的二进制格式中识别各个字段的,一旦开始使用就不能够再改变。注:[1,15]之内的标识号在编码的时候会占用一个字节。[16,2047]之内的标识号则占用2个字节。所以应该为那些频繁出现的消息元素保留 [1,15]之内的标识号。切记:要为将来有可能添加的、频繁出现的标识号预留一些标识号。
ref:https://protobuf.dev/programming-guides/style/
git 规范
延续公司现行规范
分支管理
三个基准分支: master、release、dev
分支流程运用
jira项目流程规范
单元测试标准
单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类、超类、抽象类等中的方法。单元测试就是软件开发中对最小单位进行正确性检验的测试工作。
不同地方对单元测试有的定义可能会有所不同,但有一些基本共识:
意义
理论原则
类型
Go的测试可以分为白盒测试和黑盒测试。
规范
func TestName(t *testing.T)
,入参必须是*testing.T
推荐框架
代码结构示例
静态代码检测
工具
静态代码检测实现的工具主要是:golangci-lint。
实现
静态代码检测实现的方式有以下几种:
1、本地开发环境,其中包括本地命令行、编辑器插件、pre-commit等
2、gitlab runner 流水线
错误代码
日志规范
组件规范
Golang依赖包管理
三种包管理机制
1、go path:不推荐2、go vendor:不推荐3、go module: Golang 官方默认包管理机制
依赖包调试
调试依赖包,可以在go.mod 文件使用replace来修改依赖包,如下:
类型
1、公有包
2、私有包
私有包建立的作用是封装或者开发的可重用于公司级别或者跨项目级别的模块组件,一般的解决方案是通过gitlab 私有仓库进行管理
ref:https://go.dev/ref/mod#go-mod-file-retract
开发环境建设
开发人员在日常开发中可以不依赖测试环境的基础组件,可一键启动本地独立开发环境,搭建一套独立的微服务环境,比如存储组件、消息队列组件、其他服务化组件、网关组件等。
解决的问题
1、开发人员快速配置、搭建本地环境
2、开发运行环境标准化
3、集成所有服务项目,开发环境不存在服务间依赖的影响
4、快速进行首次服务启动需要的基础数据进行迁移
开发
构建
部署
运行