将实用程序提取到 python 微服务应用程序的库中

Extracting utilities into libraries for python microservice applications

TL;DR:有关将代码提取到可重用、结构良好且可维护的库的任何建议或资源?

我正在研究 python 微服务架构中的应用程序,我们将在其中开发和部署一堆小型应用程序,每个应用程序解决一个特定问题,可能(或可能不)通过与其他 applications/external 服务交互。

我们刚刚开始转向微服务架构,所以我们已经在一个整体项目中拥有相当多的代码。当我们添加新的微服务时,很明显我们需要将公共代码(例如实用程序、基础 类、...)提取到库中,以避免重新实现或复制粘贴代码,这些代码随后必须单独维护.当我尝试这样做(我以前从未真正做过)时,我意识到这不是微不足道的,而且很快就会变得复杂,我也可以花一些时间来思考它。

所以我正在寻找与这种情况相关的最佳实践的建议或资源指针,即编写结构良好的 python 库、打包和分发库、在微服务架构中共享代码以及避免犯可能使我陷入困境的错误,.

混凝土problems/challenges我面对的是:
* 如何最好地 group/separate 在版本控制中编码。比如,每个包一个存储库?存储库的数量可能会迅速爆炸...

对于共享库,您可以将其发布到 git 单独的存储库中,并将它们设置为使用 Python 包管理器将它们安装到您的项目中。

至于应用程序部署、服务依赖等。我建议您查看 Docker 容器化,docker-compose 本地服务依赖,Artifactory 或 ECR Docker 图像注册表和容器编排平台,如 Kubernetes。

容器类似于虚拟机,但在更细粒度的级别,即进程级别。这将有效地允许您 运行 本地服务一起进行测试和部署。每个服务都在不同的存储库中将不再重要。

如果您没有太多的微服务,您绝对可以使用单一存储库,但如果您的工程组织很大,则下载所有服务的所有更新的成本非常高。作为替代方案,您可以让在各自的限界上下文中划分的服务都存在于单个存储库中,以消除这种威慑力。长话短说,这真的取决于你会发现什么有益。归根结底,最大的问题从来都不是您拥有多少 Git 个存储库,而是您如何定义服务的范围、服务到服务的通信以及用于部署服务的基础设施。