让我们谈谈微服务方法的正面和负面。
第一底片。创建微服务时,您在代码中增加了固有的复杂性。您正在增加开销。您将很难复制环境(例如,对于开发人员)。您使调试间歇性问题变得更加困难。
让我说明一个真正的弊端。假设考虑以下情况:在生成页面时调用了100个微服务,每个微服务在99.9%的时间内执行正确的操作。但是0.05%的时间它们会产生错误的结果。0.05%的时间有一个慢速的连接请求,例如,需要TCP / IP超时进行连接,这需要5秒钟。大约90.5%的时间您的请求可以正常工作。但是大约有5%的时间您有错误的结果,大约有5%的时间您的页面很慢。每个不可重复的故障都有不同的原因。
除非您为监视,再现等工具投入了很多心思,否则这将变成一团糟。特别是当一个微服务调用另一个时,又调用了另外几层。一旦遇到问题,随着时间的推移,情况只会变得越来越糟。
好的,这听起来像一场噩梦(不止一家公司通过这条道路为自己制造了巨大的问题)。成功只有在您清楚意识到潜在弊端并不断努力解决时才有可能。
那么那种整体方法呢?
事实证明,单片应用程序与微服务一样容易模块化。实际上,函数调用比RPC调用便宜且可靠。因此,您可以开发相同的东西,除了它更可靠,运行速度更快并且所涉及的代码更少。
好的,那么公司为什么要采用微服务方法?
答案是因为在扩展时,单片应用程序的功能受到限制。在经过如此多的用户,如此之多的请求等等之后,您到达了数据库无法扩展,Web服务器无法将代码保存在内存中的地步,依此类推。此外,微服务方法允许对应用程序进行独立和增量升级。因此,微服务架构是扩展应用程序的解决方案。
我个人的经验法则是,从脚本语言(例如Python)的代码到经过优化的C ++,通常可以将性能和内存使用量提高1-2个数量级。换一种方式到分布式体系结构会增加资源需求,但可以无限扩展。您可以使分布式体系结构正常工作,但是这样做比较困难。
因此,我要说的是,如果您要开始一个个人项目,请大胆尝试。了解如何做好。不要分发,因为(Google | eBay | Amazon | etc)是。如果您在一家大型公司中工作,请密切注意他们的运作方式,不要搞砸了。而且,如果您最终不得不执行过渡,请非常非常小心,因为您正在做的事情很容易变得非常非常错误。
披露,我在各种规模的公司中都有将近20年的经验。是的,我已经看到单一的和分布式的架构都是紧密而个性化的。基于这种经验,我告诉您,分布式微服务架构确实是您要做的事情,因为您需要这样做,而不是因为它在某种程度上越来越干净。