微服务架构系统对于大型软件系统来说已经足够了,尽管公司倾向于从单体应用程序开始。这对于任何拥有小团队的系统都是有意义的。随着系统的探索和调整,它会随着时间的推移而增长。
但是当单体系统增长到一定规模时,它们变得难以处理和开发。由于历史原因,内部结构相互交织,并且随着复杂性的增加,系统的可靠性可能会受到影响。在灵活性和冗余之间找到平衡可能很困难。
Remember that microservices are useful when the development team is big. For small teams, a monolith is easier to develop and maintain. It's only when many developers work on the same system that dividing the work and accepting the overheads of a microservice architecture makes sense.
扩展开发团队可能会变得很困难,因为那里会有太多的旧代码,并且学习如何浏览它很困难并且需要很多时间。开发人员(已经存在很长时间的开发人员)知道警告可以提供哪些帮助,但它们会成为瓶颈。增加团队的规模并没有帮助,因为做出任何改变都会变得复杂。因此,每个新开发人员都需要大量培训,然后才能跟上进度并成功处理错误修复和新功能。
团队也有自然的规模限制。超出该限制可能意味着必须将它们分成更小的部分。
The size of a team is highly variable, but normally, the 7
±2 components
are considered as a rule of thumb for the ideal number of people who should be in a team.
Bigger groups tend to generate smaller groups on their own, but this means there will be too many to manage and some may not have a clear focus. It's difficult to know what the rest of the team is doing.
Smaller teams tend to create overhead in terms of management and inter-team communication. They'll develop faster with more members.
在一个庞大的单体系统中,多个独立的团队往往会在没有清晰的长远眼光的情况下乱搞。这可以通过设计一个强大的内部结构来缓解,但这需要大量的前期规划和强有力的监管以确保其得到遵守。
微服务架构是一种解决这些问题的设计,因为它在系统的各个部分之间建立了非常严格的界限。但是,这样做需要开发团队具有一定的规模,以便他们可以作为几个主要独立工作的小团队工作。这是微服务架构系统的主要特点。构成它的每一个微服务都是一个独立的服务,可以独立开发和发布。
这种工作方式允许团队并行工作,不受任何干扰。他们的行动领域是明确的,任何依赖都是明确设置的。因此,微服务之间的边界很牢固。
仅仅因为一个微服务是独立发布的,并不意味着一个版本就足以发布一个完整的功能。正如我们已经看到的,有时,微服务中的功能需要在部署之前处理另一个微服务。在这种情况下,需要处理几个微服务。
在计划如何划分团队时要牢记的最重要的想法是团队的结构如何反映在软件中。这由康威定律描述。