@lsmn
2015-06-09T20:55:49.000000Z
字数 1932
阅读 2457
架构
微服务
设计模式
Microservice
微服务是近年兴起的一个概念,是指将应用程序设计成一套可以单独部署的服务。Martin Fowler是ThoughtWorks的首席科学家。他与ThoughtWorks首席顾问James Lewis合作发表的《微服务》,可谓是了解微服务架构风格的入门必读。近日,Fowler又提出了MonolithFirst策略。
微服务是近年兴起的一个概念,是指将应用程序设计成一套可以单独部署的服务。Martin Fowler是ThoughtWorks的首席科学家。他与ThoughtWorks首席顾问James Lewis合作发表的《微服务》,可谓是了解微服务架构风格的入门必读。近日,Fowler又提出了MonolithFirst策略。
在许多使用微服务架构的案例中,Fowler注意到了如下两种常见的模式:
Fowler认为,虽然微服务是一种有用的架构,但由于会产生“微服务佣金(MicrservicePremium)”,所以它只适用于复杂的系统。服务管理成本会减缓项目进度,因此,简单的应用更适合采用单体架构。在此基础上,他提出了MonolithFirst策略,其基本思想是:即使应用后续可能受益于微服务架构,但开始时仍然将新应用构建为单体应用。这主要是出于以下两个方面的考虑:
Fowler列举了如下几种MonolithFirst策略执行方法:
对于第一种方法,Fowler指出,并不是任何一个系统都可以分解成微服务。有许多系统,由于模块之间相互依赖度太高而难以分开。而且,目前为止,他还没有看到多少采用这种方法的成功案例。第二种方法会在微服务架构的内部保留一部分单体架构,新开发功能采用微服务架构模式。对于第三种方法,Fowler提醒说,“不要害怕构建一个将来会被丢弃的单体应用,尤其是当它能使软件快速推向市场时。”第四种方式可以让团队获得服务开发及管理经验,而粗粒度的服务还能减少服务间的重构,这有利于后续向微服务迁移。
Fowler承认,他现在还不知道如何确定一个项目是否要使用MonolithFirst策略。但同时,他认为,除非团队有适当的微服务系统构建经验,否则,不要从微服务开始构建一个新系统。Sam Newman是Fowler的同事,他分享了一个团队考虑在新项目中使用微服务的案例,感兴趣的读者可以进一步阅读。
Fowler的文章在Hacker News上引发了激烈的讨论,许多网友都提出了不同的看法,krisdol就是其中之一。他认为,Fowler的观点与他所处的环境有很大的关系。ThoughtWorks是一家帮助其他公司解决问题的顾问公司,也就是说,他们会在某个公司的单体应用出现问题时提供帮助,将其重构为微服务架构。因此,Fowler才能得出MonolithFirst的结论。而实际上,现在已经有许多微服务优先的案例,只是身在顾问公司的Fowler接触到的可能比较少。所以他的观点是,微服务优先,尤其对小团队而言,比每个人都共享同一个代码库更有助于项目的快速进展。
而有两年微服务开发经验的网友room271则表达了相反的观点,他认为,在小公司/团队中,采用微服务可能不太明智,因为它对技能的要求比较高,会导致得不偿失。但同时,他觉得,MonolithFirst是顾问公司的立场,因为当单体应用出现问题时,他们可能已经完成项目离开了。
当然,也有许多网友表示支持,认为微服务设计很难上手也很难重构,而且对技能要求太高。网友btilly就指出,即使不采用MonolithFirst策略,构建一个原型单体系统也是很有价值的。