Golang Go语言微服务工程最佳实践问题

发布于 1周前 作者 nodeper 来自 Go语言

Golang Go语言微服务工程最佳实践问题

各位老司机在使用 golang 开发微服务的时候,假设一个微服务一个 gomod,那么在使用 git 管理源代码的时候,是一个 git 仓库下一个微服务,还是多个微服务放在同一个仓库下?

20 回复

一个微服务一个仓库,微服务之间是互相独立的

更多关于Golang Go语言微服务工程最佳实践问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


多对多,仓库是多个,每个仓库下也可以有多个(互相关联的)微服务

都可以。。。看服务间相关性吧,我们的代码太老导致重构完大量服务都是在一个仓库。但实际上还是建议能拉新仓库就拉新仓库,因为很有可能出现不同服务需要引用同一个三方库不同版本的问题

一个服务一个仓库

看维护的人力。我们小公司都在一个仓库里,然后不同目录。CI 、CD 不同 pipeline

单体仓库的话建议只有一个 go mod

最好同在一个项目下,分目录就行了,要是分仓库,那公共代码的管理能累死。

我觉得吧,如果连代码都拆不清楚,那还是别跟风整微服务了,所以我支持多仓库。

支持多仓库。清晰可控。


可以专弄个 repo 管理公共代码库

大公司都是 monorepo,比如 google,就是一个 repo
小公司,不复杂的话可以多个

还是感觉用 gitlab 一个项目组里分不同的子工程这样编写维护更方便:)

综合考虑吧, 楼上也说了很多优缺点. 我们公司就是准备从多个仓库迁移到一个仓库.

我是放一起,有些公用的可以提取出来。一个服务一个仓库感觉不是很方便。
https://github.com/zarte/minirpc

说多个的你们服务是不是只有个位数~

就是这个方案的缺陷。

支持多仓库。
单仓库的话,一个微服务发布,其他业务是不是也得同步更新?

如果有权限要求,建议多仓库,比如不是该模块的开发人员,不允许修改提交。

git 跟 svn 的区别在于,git 原生没有 svn 那样可以针对目录级别的权限控制,当然理论上服务端可以写 git hook 做到,但是麻烦得多

关于Golang(Go语言)微服务工程的最佳实践,以下是一些关键点:

  1. 模块化设计:将微服务分解成独立的模块,每个模块负责特定功能,提高可维护性和可扩展性。使用Go语言的模块管理工具(如go mod)来管理这些模块。
  2. 代码生成:利用代码生成工具(如protoc-gen-go)减少样板代码,确保代码一致性,并简化RPC服务的开发。
  3. 日志与监控:实施有效的日志记录和监控,提供问题洞察力。使用Go的log包和trace库,或第三方库(如logrusopentracing-go)增强功能。
  4. 错误处理:健壮的错误处理是微服务可靠性的关键。使用errors包创建和传播错误,提供上下文信息。
  5. 框架选择:根据需求选择合适的框架。Gin和Echo是轻量级且高性能的Web框架,适合构建微服务。同时,也可以考虑使用go-micro、go-kratos等微服务框架。
  6. 性能优化:使用性能分析工具识别瓶颈,优化代码性能,考虑使用并发模式(如Goroutine)来提高性能。

综上所述,遵循这些最佳实践有助于构建高性能、可扩展且可维护的Golang微服务工程。

回到顶部