实现XML和Web服务时要避免的三种常见错误
创始人
2024-03-23 12:21:14
0

IBM的Kyle Brown在其评论文章开始描述了一种常见的情景:“许多人因以不恰当的方式使用Web服务和XML而给他们自己挖了一个坑”。在他的评论中,Kyle介绍了三个常见的痛点,解释了它们为何会发生并提供了一些替代方法。

我的消息吃了我的服务器!Kyle指出,通常,Web服务开发者开始经历“内存溢出”的错误或者奇怪的“性能问题”时,总是会发现服务器拥有极高的处理负载,CPU使用率接近100%,以及较低的吞吐量和高网络延迟。导致这些症状的典型原因是非常大的(有时会达到50 MB或者更大)消息。而且,这些大消息往往包含了非常大的、作为XML消息主体的、采用base-64编码的二进制编码信息。导致其发生的原因通常是:

……开发者不理解技术的局限性:XML处理对解决许多问题都有用,
但是你必须认识到消息是要被解析的——并且在大多数……产品中,
这就意味着许多或者所有的消息都会驻留在内存中。

Kyle建议采用如下方法来改善这种情况:

不要发送冗余信息。在许多情况下,发送二进制数据时,你可能会
发现消息高度重复。如果是这样,你可能就要考虑在HTTP层面使用
压缩技术来改善你的网络延迟。虽然这不会帮助你处理负载,但可
能有助于减轻其中一个问题。
在XML消息体中,根本不要嵌入二进制信息。这是较好的解决方法,
还有几种不同的途径可以实现这一效果。比如,你可以使用带有附件
的SOAP或者消息传输优化机制(MTOM)绕过解析开销,尽管这无助于
网络延迟问题。
……还有一个更好的办法,使用SOAP根本不发送大的二进制blob。
替代方法,通过受控的文件传输系统,使用一个“带外数据
”传输……或者“声明标签(claim Check,参见《EIP模式》或这里)”
模式,避免在SOAP和HTTP上发送大的二进制文件。

不好意思,你的数据正在显示。根据Kyle所说,另一个典型的Web服务的“性能问题” 是,使用Web服务的层面非常、非常低——通常Web服务跟一个SQL语句相关,这是因为:

误解了SOA架构原则。一个优秀SOA架构的关键原则是你的服务
应该具有高复用性。

根据Kyle所说,这些情况通常发生在:

……如果设计是根据现有代码“自上而下”衍生出服务,这类服务
就会出现;通常,开发者会看着他们现有的架构图并且决定将
架构中的每一层(包括表现层)转变成服务集。
相反,在SOA架构的正确位置使用粗粒度的Web服务会更好。再次
强调,检查一个架构的标准分层模型,通常在架构中会有一个
明确定义的地方已经封装了系统业务逻辑。可以使用“远程门面
模式(Remote Facade Pattern)”来包装这些服务,以便用合适
的方式来暴露基于模型的服务。

模式(Schema)?我们不需要任何发臭的模式! Kyle指出,通常开发者试图重用现有代码来生成和解析作为Web服务实现基础的XML。这些实现通常使用XML解析器来编组/解组消息,同时使用Java HTTP类来发送和接收XML文档。使用Web服务时,通用的方法是,创建使用模式元素的WSDL文档,使XML不受阻地通过,然后在现有代码中对它们进行解析。

这个问题的症状是组织没有看到SOA承诺的好处,而且维护他们的
解决方案似乎比以前使用Web服务的时候更难(而不是更容易)

简单的解决方案是,每当写Web服务时,不管使用WS-*标准还是使用REST方法,都要确保你创建了代表你文档结构的完整准确的XML模式。

如果你正在构建WS-* Web服务,那么这个XML应该被包含
在描述你的Web服务的WSDL之中。即使你在使用REST方法,
拥有易于访问的XML模式将鼓励你的服务被重用。

避免Kyle描述的陷阱似乎是个常识。不幸的是,我们的业界证明了,除非很好的理解和治理SOA实现,否则我们会继续一次又一次地重复犯同样错误。

【编辑推荐】

  1. DB2 Version 9.5 pureXML的增强和新特性
  2. 详解.NET中的XmlReader与XmlWriter
  3. 应用CSS属性 实现WEB页面强制分页打印

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
P2P的自白|我不生产内容,我... 现在一提起P2P,人们就会联想到正在被有关部门“围剿”的互联网理财服务。×租宝事件使得劳...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...