TL; DR:关于将代码提取到可重用,结构合理且可维护的库中的任何建议或资源?
我正在以微服务风格的体系结构开发python应用程序,在那里我们将开发和部署一堆小型应用程序,每个应用程序解决一个特定的问题,也许(或可能不)通过与其他应用程序/外部交互来解决。服务。
我们刚刚开始转向那种微服务架构,因此在一个整体项目中已经有很多代码。当我们添加新的微服务时,很明显,我们需要将常用代码(例如实用程序,基类等)提取到库中,以避免重新实现或复制粘贴代码,而这些代码随后必须单独维护。当我尝试执行此操作时(这是我以前从未真正完成过的操作),我意识到它并不琐碎,并且很快就会变得复杂,而且我也可能会花一些时间对此进行仔细思考。
因此,我正在寻找建议或指向与这种情况相关的最佳实践资源的指针,例如,编写结构良好的python库,打包和分发库,在微服务架构中共享代码并避免犯可能导致错误的错误我在有问题的情况下,。
我面临的具体问题/挑战:
*如何最好地在版本控制中对代码进行分组/分离。例如,每个软件包一个存储库?存储库的数量可以快速爆炸...
答案 0 :(得分:1)
对于共享库,您可以将其发布到各个存储库中的git中,并将其设置为使用Python包管理器将其安装在项目中。
关于应用程序部署,服务依赖项等。我建议您看一下Docker的容器化,docker-compose的本地服务依赖项,Artifactory或ECR的Docker映像注册表以及容器编排平台(如Kubernetes)
容器类似于虚拟机,但在更细粒度的级别上,即进程级别。这有效地使您可以在本地一起运行服务以进行测试和部署。每个服务都位于不同的存储库中不再重要。
如果您没有太多的微服务,则可以使用单存储库,但是如果您的工程组织规模很大,那么下载所有服务的所有更新的成本将非常高。或者,您可以将在各自有限上下文中划分的服务全部置于单个回购协议中,以消除这种威慑作用。长话短说,这确实取决于您会发现什么。归根结底,最大的问题永远不会是您拥有多少个Git存储库,如何定义服务范围,服务到服务之间的通信以及用于部署服务的基础结构。