纳米模块
显然有一种新的分布式体系结构称为微服务,所以上周我继续阅读了马丁·福勒(Martin Fowler)和詹姆斯·刘易斯(James Lewis)关于该主题的大量文章 。 我对此的React基本上是:
我想使用新名称(Microservices)比说SOA实际含义要容易得多-re http://t.co/gvhxDfDWLG
— Arnon Rotem-Gal-Oz(@arnonrgo) 2014年3月16日
在马丁对他的文章发表推文之后,也表达了类似的论点(这里没有新内容),例如克莱门斯·韦斯特斯的评论:
@martinfowler @boicy,但是在供应商将中间集线器(即ESB)推入中间之前,这就是SOA的基本原则
— Clemens Vasters(@clemensv) 2014年3月16日
或史蒂夫·琼斯(Steve Jones)的帖子“ 对于那些知道SOA是什么的人来说,微服务就是SOA 。”
本文讨论的自治性,智能端点,事件等都是SOA概念–如果您碰巧读了我的书,并且读了这篇文章,则可能已将其识别为诸如通信反转 , 服务主机 , 服务实例 , 服务看门狗和其他人。
因此,在Martin's和James的文章中出现的微服务几乎是面向服务的,没有像WS *,ESB等必不可少的错误误解与SOA昵称相关联-也许这是一个足够好的新名字,但我个人对此表示怀疑。
然而,故事还没有结束,关于微服务是什么还有其他各种看法,例如克里斯·福特的观点 ,他说
“我个人的观点是,可以通过单个抽象架构约束来理解微服务架构,该约束可以沿许多不同的自由度进行解释。
X可以独立于系统的其余部分而变化。”
某些东西是独立的并且可以与系统的其余部分独立地进行更改的想法是好的,但是我很难说这是对任何事物的定义,或者至少是对任何新事物的定义。 作为DOD-STD-2167A (于1988年发布)的一部分,我首先听说过CSCI(计算机软件配置项),基本上意味着CSCI是可以独立于系统其余部分而变化的组件。 在2167A眼中,这还意味着一个非常详细的瀑布式文档加载过程,这不是任何人认为服务或微服务应包含的内容,但它确实表明“独立变化”没有多大意义。
我敢肯定,有些读者会说“但是,等等,我们在这里谈论微服务-所以它们也应该很小” –确实有像詹姆斯·休斯(James Hughes)在微服务上这样的帖子,带有这样的报价:
“首先,什么是微服务? 好吧,实际上并没有一个硬性和快速的定义,但是通过与各种人的交谈,似乎已经达成共识,即微服务是一种简单的应用程序,位于10-100 LOC左右。
(实话实说,詹姆士在接下来的一句话中说,LOC是比较实现的一种残酷方式,但由于使用了“似乎已达成共识”,我认为值得重复一遍。)
那么,您将如何获得100个LOC服务? 如果您依靠框架(例如Finagle或Sinatra James提及)生成序列化/反序列化代码(protobuff,thrift,avro等),则可以到达那里-这实际上是建立在智能服务主机上的 。 另一个例子是在Erlang中使用其主管层次结构进行开发,这也使我们采用另一种减少冗长程度的语言(例如上述的Erlang,python或scala与Java之类的语言)来降低LOC的方法。
我会说。但是,如果您发现有10行代码服务,则很有可能将功能实现为服务,而没有真正的服务微型程序,例如,我可以。不会看到您具有上述马丁和刘易斯文章中提到的去中心化存储(和自治),或者拥有休斯提到的监视和工具。
您还应该记住,虽然更好和更便宜的网络使我们能够突破极限,但是分布式计算的弊端仍然存在,您还需要管理许多小型服务以及序列化和反序列化,安全性等的性能问题。可能非常意味着您已经从有效的小型“微型”服务转移到令人头痛的领域,我称之为“ 纳米服务 ”
“ Nanoservice是一种反模式,其中的服务过于精细。 纳米服务是一项开销(通信,维护等)超过其效用的服务。”
因此,我们有了它,在大多数情况下,微服务只是SOA原理的另一个名称,在SOA的大肆宣传中,花药名称可能是适当的,但是我认为这些天大部分的蒸气已经消失了,人们更好地理解了什么需要。 此外,如果我们确实想用一个新名称来命名适当的SOA,我认为微服务是一个糟糕的名词,因为它会导致向纳米服务和10行代码的过渡,这只是您花哨的别致方法执行的旧网络服务方法主机使用热序列化格式。
不管微微与否,服务应该比它们所引起的偷听更有用。
翻译自: https://www.javacodegeeks.com/2014/04/services-microservices-nanoservices-oh-my.html
纳米模块