我做了一些关于微服务的阅读,我有点兴趣。看起来像是有趣的概念。但我想知道,使用微服务而不是单片架构有什么优缺点,反之亦然。
当微服务更合适时,更好地采用单片架构。
答案 0 :(得分:138)
这是一个非常重要的问题,因为有些人被微服务的所有嗡嗡声所吸引,需要考虑权衡。那么,微服务的好处和挑战是什么(与单片模型相比)?
一旦我们理解了these tradeoffs,我们还需要知道一件事来回答另一个问题:哪个更好,微服务还是整体? 我们需要了解应用程序的非功能性需求(质量属性要求)。一旦您了解了性能与可扩展性的重要性,您就可以权衡权衡并做出有根据的设计决策。
答案 1 :(得分:68)
虽然我对微服务世界相对较新,但我会尽量回答你的问题。
当您使用微服务架构时,您将增加解耦和关注点分离。因为你完全分开你的应用程序。
这导致代码库更易于管理(每个应用程序独立于其他应用程序以保持运行)。因此,如果您这样做,将来将更容易向您的应用添加新功能。如果使用单一体系结构,如果您的应用程序很大(并且您可以在某个时间点假设它),那么它可能会变得非常困难。
同样部署应用程序更容易,因为您要单独构建独立的微服务并将它们部署在不同的服务器上。这意味着您可以随时构建和部署服务,而无需重建应用程序的其余部分。
由于不同的服务很小并且单独部署,因此它们显然更容易扩展,因为您可以扩展应用程序的特定服务(使用单一服务扩展您的应用程序)完成"事情",即使它只是应用程序中的特定部分,也会产生过多的负载。)
但是,对于不打算在将来管理太大的应用程序。最好将它保持在单片架构上。由于微服务架构存在一些严重的困难。我说部署微服务更容易,但这与大型单块相比只是如此。使用微服务会增加将服务分发到不同位置的不同服务器的复杂性,您需要找到一种方法来管理所有这些服务。如果您的应用程序变大,构建微服务将在长期帮助您,但对于较小的应用程序,它更容易保持整体。
答案 2 :(得分:10)
@Luxo是现货。我只是想提供一个微小的变化,并带来它的组织视角。微服务不仅允许应用程序解耦,而且还可以在组织层面上提供帮助。例如,该组织可以分成多个团队,每个团队可以在团队可能提供的一组微服务上进行开发。
例如,在像亚马逊这样的大型商店中,您可能拥有个性化团队,电子商务团队,基础架构服务团队等。如果您想进入微服务,亚马逊就是一个非常好的例子。 Jeff Bezos要求团队在需要访问共享功能时与其他团队的服务进行通信。有关简要说明,请参阅here。
此外,来自Etsy and Netflix的工程师在微服务和Twitter上的monolith当天也进行了一场小辩论。辩论的技术性稍差,但也可以提供一些见解。