dduo518 / hexo-blog

hexo静态blog点击 https://github.com/chong0808/hexo-blog/issues
3 stars 0 forks source link

Golang 栈基础技术架构总结 #70

Open dduo518 opened 1 year ago

dduo518 commented 1 year ago

系统技术架构

系统架构致力于为服务提供技术解决方案、以便更加健壮、可维护、可扩展、可测试、提供高性能、高可用的技术方案。

1681437555140

服务治理

服务注册、服务发现、限流、熔断、超时控制、健康检查、负载均衡、动态扩容

网络通信协议

HTTP、GRPC、TCP、FIX

中间件

消息队列、数据中间件、缓存中间件、HTTP Router解析、Params Parse、Auth等

订阅广播系统

消息发布\订阅 、 事件广播系统

内存存储系统

内存保存、获取、TTL

配置管理

业务、系统配置动态更新

日志收集

业务日志、运行日志收集

性能指标

系统性能指标、业务指标上报

异常监控

运行时异常捕获监控、收集、报警

开发流程

统一开发环境、开发、编码规范等

Golang 栈微服务架构规划图

1681402160662

流程规范

编码规范

编码风格原则

工具

Goland 配置

Setting---> tools---> Action As Save 1681289390271

代码规范

目录规范

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

1681369253806

分支流程运用

1681369430071

jira项目流程规范

单元测试标准

单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类、超类、抽象类等中的方法。单元测试就是软件开发中对最小单位进行正确性检验的测试工作。

不同地方对单元测试有的定义可能会有所不同,但有一些基本共识:

意义

理论原则

类型

Go的测试可以分为白盒测试和黑盒测试。

规范

推荐框架
用途 常用框架
测试框架 testing、testify, goconvery
mock框架 gomock、gomonkey
代码结构示例
├── 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 流水线

错误代码

日志规范

组件规范

Golang依赖包管理

三种包管理机制

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、快速进行首次服务启动需要的基础数据进行迁移

开发

构建

部署

运行