BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

不要在微服务之间共享代码

| 作者 Jan Stenberg 关注 33 他的粉丝 ,译者 丛一 关注 2 他的粉丝 发布于 2015年1月29日. 估计阅读时间: 2 分钟 | 都知道硅谷人工智能做的好,你知道 硅谷的运维技术 也值得参考吗?QCon上海带你探索其中的奥义

通常来说,构建微服务是为了能够将隔离作为一种应对变化的方法。在服务之间共享代码会增加服务之间的相互耦合,跨越隔离界线,导致隔离有效性和变化应对能力减弱,David Dawson发表了一系列博文对不要重复劳动(DRY)原则提出质疑

Simplicity的CEO David认为构建微服务一些常见的原因如下;

  • 独立可扩展
  • 服务隔离
  • 单独的服务生命周期

David声称这些原因都是关于应对环境或代码库中的变化的,同时他也相信变化通常也是切分服务的主要原则。

David发现在开发人员当中跨越微服务共享代码的理由基本上很少,主要包括:

  • 利用现有的技术功能,例如通过共享的库。
  • 共享数据模式,如通过使用相同的类。
  • 共享数据源,如不同的服务使用相同的数据存储。

David强调所有的代码共享都会让你的服务通过共享的代码附着在一起。创建一个单一可信来源,在一个服务内部坚持DRY原则会在具有单一责任的服务内部产生内在耦合但不会出现问题。相反,如果跨越这个界限,即使有些东西表面看来是相同的,它们是也处于不同的上下文之中而且一定是有区别的,由不同的代码实现并且使用不同的数据存储。David极力劝阻无论这些代码看起来有多么相似,我们也要抵住诱惑,不能将这些代码附在一起,因为那意味着耦合跨越了边界和不同的上下文,这将直接导致大泥球出现。

David认为DRY原则已经成为了可与设计模式比肩的软件开发的基石之一,但是它也被曲解成不要重复任何事(Don’t Repeat Anything拷贝粘贴是不好的(Copy and Paste is bad。追溯其来源,在《The Pragmatic Programmer》一书中,DRY的描述如下:

每条知识在一个系统里一定都有一个单一的无歧义的权威表示。

David的批注认为这里的关键术语是知识的概念,而不是拷贝和粘贴。尽管这个原则在某些特定的领域非常实用,他认为这一术语已经超出了其上下文,被应用的过于广泛。当应用于微服务体系架构之上更高的层级时,如共享模式,我们只会剩下维护体系架构的成本而不会有任何收益,他们已经被DRY所毁。

查看英文原文:Don’t Share Code Between Microservices

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

再想想 by 贾 珣

再想想

不明真相 by feng kazaff

感觉指的是业务级别,而不是底层框架代码吧

不明真相 by feng kazaff

感觉指的是业务级别,而不是底层框架代码吧

说的太对了。 by wang xinkai

是的,这里说的是业务代码,而不是底层可重用工具库(或第三方工具库)。其实实际工作中,很少人会蠢到试图重用业务逻辑(但是也有)。更多的学院派常犯的迷糊是是否需要重用response modle class. 因为对很多人来说,同一个class,在服务器端序列化,在client端反序列化,听起来很合理呀。其实,做久了你就知道了。很多时候,大智若愚,大巧若拙。如果真那么做了,当有人偷懒想在客户端的代码里加入几个新field 只内部使用不参与序列化时,当有人想玩花的在服务器端把所有的值都变成getter这样他好加一层过滤时,当业务逻辑变化,有人想让序列化出来的东西虽版本号有变化,返序列化这边不只道该如何应对时,。。。 你就等着看你的“完美”的代码怎么演化出大泥球吧。

这个问题的核心是去耦合 by wang xinkai

这个问题的核心是去耦合。应该让服务之间的耦合仅仅限于约定好的JSON格式。而不是strong type 的代码。只有这样了,才能真正做到不同的服务/模块分头改进,分头演化,甚至用另一种语言重写某个模块。根去耦合比起来,很多东西都要让点路的。比如DRY,再比如performance,不能只看着一样,做设计要有大局观.

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

5 讨论

深度内容

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT