"我们的目标是将复杂的需求转化为易于维护的软件"。

Matthias Strauch & Michael Kluz /微服务


在一次跨学科对话中,开发人员Matthias Strauch和敏捷主管兼产品负责人Michael Kluz解释了从单一的软件组件到独立、灵活的微服务是如何实现的。

你在做什么项目?

Michael:我们负责一家汽车制造商的客户门户。通过该门户,我可以注册为车主,并实现对在线服务的管理和配置。

你在该项目中的作用是什么?

Matthias:我是我们团队中的一名软件开发人员,主要负责后端及其系统架构和应用程序架构。如果需要新的功能或组件,我的工作就是评估我们已经拥有哪些基础设施,并确定需要与哪些系统进行通信以及开发所需的组件。

Michael:我是产品负责人兼敏捷主管。作为敏捷主管,我负责建立团队人员对敏捷方法,尤其是对敏捷框架和大规模敏捷开发框架的理解。此外,我还负责组织每日例会和工作回顾会议,并负责将参与该项目的两个内部团队联系起来。我的另一部分工作是协调客户的各利益相关方和他们的要求,并由此创造一个连贯的理念。

如何将多个同时工作的团队联系起来?

Michael:我们为此使用了所谓的 “Scrum of Scrums”,即来自不同公司的各个团队的所有敏捷主管定期开会协商。这里的难点在于,我们团队的一部分在阿根廷。在这样的背景下,我们会让每个在阿根廷入职的新同事到德国进行三个月的培训。这样,他们就可以完全融入我们这里的流程,并通过结对编程,实现知识的良好传递。

从软件开发者的角度来看:这个项目的特别之处是什么?

Matthias:这个项目实际上已经运行了6年。当时,此门户由一个单一的软件包组成。我们与客户一起决定对其进行相应调整,以便未来能够更迅速地实施新的变更和其他功能。因此,我们有了重新切割软件并将其运用在单个微服务中的想法。

在这里“微服务”是指什么?

Matthias:微服务指的是一种现代架构范式。它封装了服务,并由于其低依赖性的特点,可以单独运行操作。我们的目标是将复杂的需求转化为易于维护的软件。

你们是怎么实现的?

Matthias: Matthias:每个微服务都由一个Spring Boot应用程序组成。这个应用程序只包含业务逻辑的代码以及与环境有关的配置。共享组件,例如与各种后端系统的连接,被整合为我们所开发框架中的资源库。这种方法的优点在于,我们团队内部之间不仅可以相互分享通过种方式创立的组件,还可以将其分享给客户的团队。只是困难之处在于,该软件现有两个不同的版本。

为什么会是这样?

Matthias:旧的门户正在逐渐被一个可以与基于REST的服务进行通信的现代单页应用程序所取代。但是这两个版本目前仍在同时运行。因此我们需确保新的服务能够在不影响可用性的情况下取代现有的实现。通过框架的方式使我们能够快速实现变更。最主要的是,这会极大地减少了整合花费。

如何访问框架的所需组件?

Matthias:各个资源库之间的依赖关系通过构建系统Maven进行管理。完成的应用程序在构建过程中被打包成一个Docker镜像。然后,完成的镜像被部署为Kubernetes集群中的容器。我们软件的源代码储存在Git资源库中。Jenkins构建服务器可以监控这一点,并在发生变更时,自动设置生成流水线。这实现了对代码的编译、运行自动测试、以及在漏洞处进行静态代码分析。当质量满足标准时,生成的Docker镜像就会被发布到测试和集成环境中。该方法的优点在于,在几分钟内就能看到代码的变更及其带来的影响。
Michael:我喜欢这个项目,因为你总是需要跳出框架思考问题。因为客户门户与我们的许多其他产品(如中央平台和一些服务)都有关联,所以只了解与自己项目有关的内容是不够的。因此有必要与客户、其他服务供应商以及我们其他项目的同事进行积极的交流。在这里,总有学不完的知识。

工作

其他主题