考虑把大型项目拆解成微服务吗?

【编者的话】本文理性的讨论了拆解大型项目到微服务的过程,讨论了拆解过程当中会遇到的问题和编程语言的选择,并给出了做者本身的建议。

微服务是处理臃肿、凌乱系统的一剂良药。然而,拆解一个大型项目为一系列的微服务所付出的代价是值得的吗?如今存在一些优势和缺点,那么微服务的哪些特色吸引了众多公司和开发人员呢?

最多见的应用场景是将一个大型系统切换到基于微服务的基础设施。我倾向将这个过程称为“分解”应用程序,由于咱们把紧耦合的代码分解成多个小的服务。这包括了从仅添加一两个微服务到彻底重构主要应用程序到微服务架构。

简而言之,我相信分解一个大型系统为微服务组合是值得的。然而,这是一个长期投资,可能须要一段时间才能获得回报。每一个项目或公司在这一过程当中都会有不一样的经验和教训。这里有一些共同的主题,它们也是我最近在分解大型项目到微服务过程当中遇到的。
 html

放慢节奏

在开发软件的过程当中,咱们一般切分大型的任务为小的部分,便于一步一步实施。采用微服务时,与这个过程很是类似。咱们须要分解大的项目为一系列的微服务。不少方面,咱们像堆砌木桩同样处理它们:咱们须要随时间的推移而添加组成部分,将项目分解成丰富且有用的多个组成部分。

当你首次介绍微服务思想给开发团队时,可能他们会很容易接受。微服务是开发社区中的发展趋势,因而人们都渴望试一下。更夸张的趋势甚至会变成“可以改变app中一个功能而不影响其余200项功能,这不是很棒么?”

然而,实现松耦合和独立应用的过程远不止两周。可能须要花费数个月甚至数年来解耦合你的应用程序到不一样的功能服务。

将项目分解做为一项长期的任务是很是重要的。客户和投资者并不在乎你是否将已有的功能拆分为微服务。他们只是关心是否你在如期地产出。当已经感觉到微服务架构的威力,你和你的团队须要推进其发展。一样,这也是一种技术债务。

这也就是为何须要花费时间去解体大型项目。把拆解项目做为一个长期项目的时候,可能须要花费多年时间才能获得相应的收益。每一部分代码的拆分都应该做为一个重要决定。在你拆解速度过快时,可能会产生严重的问题。
 docker

自由一般不是免费的

微服务架构能够采用不一样的开发语言和框架实现。微服务限制一组有限的编程语言来共享应用程序,容许开发人员使用,而且只能用这些。

对于开发者来讲,这能够引出不少很是激动人心的决定。可是,你可能但愿在选择一门新编程语言或者框架来实现微服务时有所收敛。

学习新的编程语言或者框架对于我的经验来说是很是有帮助的。同时开发者也颇有兴趣去学习。尽管我可能知足于采用某些语言和框架来创做本身的私有项目,可是,在生产环境这个场景下,多是彻底不一样的状况。

你和你的同事可能以为用Rust语言写个服务是个好主意。从纸面上来说,这个主意看上去很好。你能够用一个很是棒的语言去实现,同时让你的业务达到一个更好的境地。

值得注意的是,在你的团队和同事在实现它的时候,没有什么是一成不变的。团队生产是一件取决于你是否要去选择的事情。目前,你的公司可能具有资源和技能去采用Rust来创造一个高效的微服务。可是,你的团队是否会在Rust服务上进行持续投入?这依赖于在微服务上的投入,你可能发现本身已经彻底归属在微服务上了。

当你选择一门编程语言,你实际上是在抉择将来是否继续投入。抛开你当前团队的规模和状态的状况下,最差的状况是你可能朝着一个使人沮丧的方向而且浪费了大量的开发资源。
 编程

DevOps的负担

当你决定去拆分一个项目时,我强烈推荐增长在DevOps上的投入。微服务的显著特色是他们在持续部署上的稳定。这里面还有不少其余的说法。当服务准备完毕时,微服务使你能够快速的部署。这对于部署过程是很是好的,由于你不须要从新部署一整套应用。

这只是理论上的状况。

事实上,建立和维护的服务越多,部署环节天然会越多。你须要可以在有限时间内有效的部署多个服务。若是只有有限个开发人员培训过部署方式,事情可能会失控。

这就是为何要教会开发者具有从开发到部署代码的能力。理想状况是,他们能够便捷的部署代码并监控。他们还应该具有突发状况下部署和掌控服务的能力。此外,开发者应该熟悉微服务及对常规生产环境故障的感知力。我经历过许多的部署错误,若是开发人员熟悉这些故障,解决起来会更快。这多是几秒钟宕机到几分钟宕机的差异。

此外,这个事情的复杂度可能会由于稳定性和语言多样性而加剧。再次重申一下,并非全部的新语言和框架在部署上像其在开发上那么方便。明智的选择是在承担较小风险的同时,采用较先进的语言和框架,毕竟它们可能不是为生产环境而准备的。
 架构

结束语

分解一整个项目会带来不少可变化的部分。解决这件事情的关键是让团队提升效率,并计划好本身的时间。他们须要时间来实现新特性和修复,同时采起有效措施拆解应用程序。

采用微服务,你能够自由选择编程语言或者框架。这种自由度是很是使人兴奋的,可是不要陷入到追求最前沿的陷阱里,毕竟生产环境须要的是稳定。

一样,在分解项目过程当中,DevOps带来了另外一种复杂性。收获的优点没有在每次的从新部署中发挥出来。然而,这须要更多的支持和对部署过程当中新增服务的全部权。

我很是确信分解一个大型项目到微服务的过程是值得的。然而,这是一个长期的投资,可能须要一段时间才能收到回报。app

 

来源:http://www.youruncloud.com/docker/1_88.html框架

相关文章
相关标签/搜索