此刻,看着我旁边的书架,有一个区域特别吸引我的目光,一个热门的关于面向服务的架构的书籍的书架。我觉得用这些书几乎就可以无所不能。
这不光是书籍。五年来,我都在教SOA,每次咨询都会推荐基于SOA的库存系统、服务总线和EDI对账(reconciliation)应用。
现在,看着这些书,它们让我很厌烦,也让我觉得生气。我回头审视基于服务的架构,想到它原本要做什么,为了做到这些花了多少钱,基本上看不到有什么投资回报(ROI)。
基于服务的架构本来似乎该给我提供以前没有的所有东西。各种服务应该提供的奇迹是如此之多,很难用一段话就说完:松散耦合(最小的组件间依赖性);封装逻辑(时序化和最小化);可复用性(见相同的服务插接到很多应用中!);无状态性(无状态管理开销);自治性(服务自行管理自己,与应用程序独立); 元数据(所有服务将同样的语言),等等。
如果你是个开发者,这比大爆炸理论还有趣——但它实际上给我们带来了什么东西呢?
我曾经在一个年代里的多数时间都使用基于服务的架构,但只能诚实地说出以下的情况:
- 我从来就没看到我所编写或设计,使其可复用的任何服务有“契约”特性;
- 我从来就没看到某个相同中的服务被重新接入另一个系统;
- 我从来没看到封装逻辑用于多个应用;
- 此时,我觉得我应该可以认为自己被蒙骗了。
所以,经过短时的不快,我很快就考虑要将SOA作为一个设计错误而丢弃。这并不是十分困难,因为当今的设计实现方式都可以极其模块化和松耦合,但其本身并不是非得是面向SOA的。
回顾这些SOA工作,可喜的效益层并不如SOA信徒所宣称的那么明显。此效益层是如此丰富和巨大,值得人们仔细审视和完全接受。
设计了多个SOA系统之后,我真正的结果是这样的:
更高级别的编码器
需要多优秀的开发者才能实施基于SOA的系统呢?得非常好,SOA要求有非常好的经济性和强健性,很少有其他设计规则要求这些。在某种程度上,要达到SOA设计所要求优良水准的服务,就要求有发散思维的人,也就是同时可看到多个方面的开发者。
不再有单一的构件
还记得有6000行代码的COBOL程序吗?或许您没那么老。好吧,回想下包括30、40,甚至60个引用的早期.NET程序。还记得维护它们,或者,就先说测试它们,是如何困难吧?是否还记得这些程序是如何容易出错,需要消耗多少个晚上和周末来修复它们?在SOA领域,这些情况不会发生。
现在XML是首选的传输中介
好吧,不管你对“契约”或“松耦合”的设计概念怎么看—看看XML有多棒?难道它没有使我们的生活变得容易得多?您能立刻就想到好几种使用它的方法,难道它不是总是非常简单和有效吗?
XML是上天的礼物。尽管很多架构师和开发者(包括我自己)有时也对它有些抱怨之词,期望它能顺应我们的意愿,但对于未知数据的传输,它远胜于我们可用的其他方法。这种不可知性是SOA的核心要求,也是迄今为止驱动XML不断推广和IP世界可移植性的巨大推动力。我就是它的信徒之一。
开发者默认编写可复用的代码!
编写可复用的编码是个艺术。编码必须抽象,必须在功能上尽可能自含,而且其编写方式必须让改变对输出的结果可定量确定。我记得就在不久的从前,开发者要修改代码,然后祈祷不会有事。这种情况出现的频度远远赶不上在SOA工作间中的情况。
15年前,让所有人痴迷的被过度宣传的技术是ERP — 有数百家公司购买它,年复一年地付费,最后只是得到琐碎和不完全的结果。SOA很容易被归为它的继承者,但ERP留给我们的除了库房里一堆未使用过的昂贵手册外就没别的。SOA可能也被过度宣传了,但还是有些比ERP好得多的东西:它使我们从爬行类进化到哺乳类,使我们对于未来的世界有更好的适应性。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
翻译
相关推荐
-
事件驱动框架和SOA在空军的应用
空军正在利用SOA来改善数据共享,并实时跟踪战机,美国空军机动司令部的Michael Marek解释了企业可从中学习的经验。
-
揭秘New Relic APM技术细节
New Relic应性能管理(APM)套件主要用于Web软件开发。它允许用户在面向服务的架构(SOA)上跟踪关键事务性能,并且支持代码级别的可见性来评估特定代码段和SQL语句对性能的影响
-
仅凭SOA和云无法解决业务数据管理风险问题
SOA和云可以是某些恼人问题高效的解决方案;这一点我们已经知道了。但是也要记住它们并不是所有事情的直接答案,特别是当你的问题是业务数据管理风险,而不是技术问题时。
-
如何避免云计算与SOA冲突