Monolith Vs microServices:这是您的最佳选择?

杰克伦塔 经过 杰克伦塔  |  可能。 10,2018

首先,让我们定义“Monolith”和“MicroService”的意思。单片架构是一个大型系统,通常是一个代码库。一巨石通常会立即部署,两个和结束代码一起,无论发生变化如何。然而,微服务架构是应用程序作为一个小型服务套件构建的应用程序,每个都有自己的代码库。这些服务围绕特定功能构建,通常可独立地部署。

传统的智慧讲道以整料开始。在紧缩截止日期开始时,这种诱惑特别强劲。但是传统智慧总是对吗?我的好朋友Darby Frey最近在假设他作为SR的新角色后开始了一个Greenfield项目。平台工程领导 赌场。尽管在他以前的公司中出发了泰国单位 腹部他发现(在正确的情况下)从一块巨石开始并不总是最好的方法。

在肚皮,达比和他的团队将他们的山单身摧毁成一个相当大的微服务架构。他们设法将它达到一个好地方,但只有经过几个月的试验和追溯到微服务。随着这一体验新鲜的,他在别的别墅上接近他的新项目一点是微野营者:

“我坚定地是一名团队纪念碑。 [我想]让我们建立一个单一的应用程序,如果我们开始感到痛苦,以后就把事情拉开了,“他说。虽然这是一个绿地项目,但达比的球队很小,他的时间里有激进的时间表,所以在表面上,一只雄黄似乎是明显的选择。 “[但与这个新的项目],我急于重复过去的错误。”

与此同时,他发现自己面临着我们所有人都斗争的决定,我们应该从一整形单片或微服务开始以及我们如何决定?

 

了解选择

要在两者之间做出决定,我们应该首先钉住我们究竟是由“单线”和“微闲”的究竟意味着什么。

扎克里克罗克特,首席技术官在 粒子 告诉我,“系统架构躺在频谱上......讨论微服务时,人们倾向于专注于该频谱的一端:许多微小的应用程序彼此传递太多消息。在频谱的另一端,你有一个巨大的巨石做太多的东西。对于任何真实的系统,那些两个极端之间存在许多可能的服务面向服务的架构。“

定义单片

单片应用程序是单个统一的单位构建的。通常,单块子由三个部分组成:数据库,客户端用户界面(由在浏览器中运行的HTML页面和/或/或JavaScript组成),以及服务器端应用程序。服务器端应用程序将处理HTTP请求,执行特定于域的逻辑,从数据库中检索和更新数据,并填充要发送到浏览器的HTML视图。

在一条巨石中,服务器端应用程序逻辑,前端客户端逻辑,后台作业等都在相同的大规模代码库中定义。结果:如果开发人员想要进行任何更改或更新,则需要立即构建和部署整个堆栈。

与您可能的想法相反,一位巨石不是我们过去需要离开的日期建筑。在某些情况下,整料是理想的。史蒂文Czerwinski,工程负责人 Scaylr. 而前谷歌员工解释说,由于他的团队在Scaylr很小,并且在比较中统一的应用程序更加易于管理,使所有东西分成微服务:“在苏拉尔的早期的时期],即使我们在使用微型经验谷歌,我们走了[对于一巨石]路线,因为有一个单片服务器意味着对我们的两个工程师的工作较少。“

在考虑单一架构时,您的团队应考虑以下内容:

整体职业选手

  • 较少的十字切割问题: 单片架构的主要优点是大多数应用程序通常具有大量的跨领域问题,例如日志记录,速率限制和安全性具有此类审计跟踪和DOS保护。当一切都通过相同的应用程序运行时,它很容易将组件连接到那些交叉的问题。
  • 不太操作开销: 具有[大]应用程序意味着只有一个应用程序需要设置日志记录,监视,测试。部署通常也是不那么复杂的。
  • 表现: 还可以存在性能优势,因为共享存储器访问比流程间通信(IPC)更快。

诺克利斯缺点

  • 紧密耦合: 整体应用服务往往会在应用程序发展时倾向于紧密耦合并纠缠在一起,使得难以隔离服务的目的,例如独立的缩放或代码可维护性。
  • 更难理解: 单片架构也更难理解,因为当您正在查看特定服务或控制器时,可能存在依赖性,副作用和魔法,这是不明显的。

定义微服务

关于本身的微野生品,没有任何内在的“微量”。虽然它们往往小于平均整体,但它们不必是微小的。有些是,但大小是相对的,并且在组织中没有衡量单位的标准。

微服务架构风格是一种开发单个应用程序作为小型服务套件的方法,每个应用程序都在自己的过程中运行并与轻量级机制进行通信,通常是HTTP资源API。这些服务围绕业务功能构建,并通过全自动部署机械独立部署。这些服务的集中管理有最小的集中管理。

在考虑微服务时,您的团队应记住:

微服务职场

  • 更好的组织: MicroService体系结构通常更好地组织,因为每个微服务具有非常特定的作业,并且不关心其他组件的作业。
  • 去耦: 解耦服务也更易于重新调整和重新配置以满足不同应用的目的(例如,为Web客户端和Public API提供服务)。它们还允许快速,独立地交付更大的集成系统内的各个部件。
  • 表现: 在适当的情况下,微服务也可以具有性能优势,具体取决于它们的组织方式,因为可以隔离热门服务并独立于应用程序的其余部分来缩放它们。
  • 错误的错误少: 微服务通过在系统的不同部分之间建立艰难的边界来实现并行开发。通过这样做,您将难以努力或至少执行错误的事情:即连接不应该连接的部件,并耦合太紧,需要连接。

微服务缺点

  • 每项服务的跨领域关注: 在您构建一个新的微服务架构时,您可能会发现您在设计时未预料的跨领域问题。对于每个横切问题(即测试),您要么需要产生单独模块的开销,或者封装所有流量通过路由的另一个服务层中的交叉切割问题。最终,即使单片架构倾向于通过外部服务层途径的交通,以进行交叉切割问题,但通过单片架构,可以延迟该工作的成本,直到项目更成熟。
  • 更高的操作开销: MicroServices经常部署在自己的虚拟机或容器上,导致VM争吵工作的激增。这些任务经常使用集装箱舰队管理工具自动化。

 

为您的组织做出正确的决定

优点和缺点可以提供一般框架,用于讨论您与团队一起坐下的潜在福利和一个架构的潜在利益和缺点。为了有效地应用这些一般原则,我采访了几十名CTO,为您决定最适合您的组织时,为您创建一个考虑因素的标题。

你在熟悉的领土吗?

达比和他的球队在赌场中能够直接进入微服务,因为他有与电子商务平台的经验,他的公司拥有丰富的知识,了解客户的需求和需求。另一方面,如果他正在沿着未知的路径沿着未知的路径,巨石可能具有更安全的选择。

你的团队是否准备好了?

您的团队是否有MicroServices的经验?如果您在明年内将您的团队大小四倍,那么微服务是这种情况的理想选择吗?评估您团队的这些维度对您的项目成功至关重要。

如果您的团队准备好,以微服务开头就是明智的,因为它允许您从一开始就习惯于在微服务环境中开发的节奏。

你的基础架构怎么样?

实际上,您将需要基于云的基础架构,为您的项目制作微服务。

“[以前],您希望从一单片开始,因为您想要部署一个数据库服务器。必须为每个单个微服务设置数据库服务器的想法,然后缩放为庞大的任务。只有一个巨大的,技术精明的组织可以做到这一点,“大卫施特劳斯,首席技术官 万神殿 向我解释。 “今天今天与谷歌云和亚马逊AWS等服务,您有许多选项用于部署微小的东西,而无需为每个人拥有持久层。”

评估业务风险

您可以认为微服务是“正确的”方式,以高野心的技术娴熟的启动。但是微服务构成了业务风险。大卫施特劳斯解释说:

“许多团队最初过度造成了他们的项目;每个人都想认为他们的初创公司将是下一个Unicorn,因此,他们应该用微服务或其他一些超可扩展的基础设施构建所有内容。但这通常是错误的,几乎一直都是错误的。“

他继续说,在这些情况下,你认为你需要规模的领域可能不是第一个需要缩放的部分,并且即使对于需要规模的系统,也导致错位努力。

上下文重要事项

我谈过的CTO与巨石和微服务都有广泛的经验。有些人自信地开始使用微野跑,而其他人则在开始时粘在一起,并最终在他们的初创公司增长时转变为微服务。考虑自己的上下文以及以下方案,以帮助确定哪个体系结构适合您的情况。

 

何时开始用巨石

以下是一些方案,表明您应该使用单片架构启动下一个项目:

  • 您的团队在创始阶段: 您的团队在2-5名成员之间,因此无法解决更广泛和高度高架的微服务架构。
  • 您正在构建未经证实的产品或概念证明: 您是在市场上建立未经证实的产品吗?如果这是一个新的想法,那么随着时间的推移,它可能会枢转并发展,所以整料是允许快速产品迭代的理想选择。同样适用于概念证明,你的目标只是尽可能快地学习,即使你最终扔掉了。
  • 您没有MicroServices体验: 如果您的团队没有先前的微服务经验,否则您可以在此早期阶段冒险“在飞行”的风险上,否则您可能会粘在一块巨大才能开始的迹象。

 

何时以微服务开始

以下是一些方案,表明您应该使用微服务器启动下一个项目:

  • 您需要快速,独立的服务交付: 微服务允许快速,独立于更大的集成系统内的各个部件。请注意,根据您的团队规模,可能需要时间查看服务交付增益与蒙罗士斯开始。
  • 您的平台需要非常有效: 如果您的业务正在进行密集的日志音量处理,则可能希望以非常有效的语言(即C ++)构建该服务,而您的用户仪表板可以在Ruby上构建Ruby。
  • 您计划成长为您的团队: 从微服务开始,您的团队曾经从一开始就在单独的小型服务中开发,并且使用服务边界分隔的团队使您在不需要引入指数复杂性时更容易扩大您的团队。

巨石不是死亡,微野跑不适合每个上下文。仅仅因为他们的增长爆炸而避免了潜入微服务的诱惑。相反,使用前面来的CTO的智慧来仔细考虑建筑对您最有意义的。