﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-zhuyongjp-随笔分类-SOA</title><link>http://www.blogjava.net/zhuyongjp/category/37742.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 06 Mar 2009 04:10:56 GMT</lastBuildDate><pubDate>Fri, 06 Mar 2009 04:10:56 GMT</pubDate><ttl>60</ttl><item><title>SOA的基本概念与企业应用集成</title><link>http://www.blogjava.net/zhuyongjp/archive/2009/03/06/258144.html</link><dc:creator>zhuyongjp</dc:creator><author>zhuyongjp</author><pubDate>Fri, 06 Mar 2009 03:00:00 GMT</pubDate><guid>http://www.blogjava.net/zhuyongjp/archive/2009/03/06/258144.html</guid><wfw:comment>http://www.blogjava.net/zhuyongjp/comments/258144.html</wfw:comment><comments>http://www.blogjava.net/zhuyongjp/archive/2009/03/06/258144.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhuyongjp/comments/commentRss/258144.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhuyongjp/services/trackbacks/258144.html</trackback:ping><description><![CDATA[最近两年都在做与企业应用集成和SOA相关的一些工作，并且有一些心得和总结，但总觉得在一个小的范围内难以获得思维的碰撞，总是希望更多的人参与进来一起讨论，一起提高。 <br />所以准备把我个人以前的一些总结和PPT拿出来，与大家一起谈谈SOA这个不算新但却十分活跃的话题。 <br /><br /><img height="297" src="http://www.javaeye.com/upload/attachment/45427/f6bc6093-be22-3a15-bc03-3959bef3db21.png" width="506" /><br />该贴描述的是我自己两年前对SOA的理解，现在可能已经有所不同了，但是为了追寻思维的轨迹，并引起大家的话题，还是从基础的说起。 <br />首先说说SOA的基本概念，然后重点讨论它的主要应用方向——企业级应用和集成应用问题，并把落脚点放到中小型的制造企业，尤其是典型的企业应用（可能有些朋友不了解，不过没关系，很容易理解）。 <br /><br /><img height="284" src="http://www.javaeye.com/upload/attachment/45429/610f76a1-ae9a-30de-8a78-c101f448b839.png" width="504" /><br />给别人或者师弟师妹们谈到“面向服务的架构”，我总会给他们解释什么是“架构”。我会回答：<span style="COLOR: red">架构是一种风格</span>。就像“架构”的英文单词来源于建筑一样，构建软件与建筑很类似。那么架构就是某种建筑所体现的风格，比如一说到“亭台楼阁”大家就联想到苏州园林，说到“教堂”可能想到哥特风格的建筑，这两者很容易区分，为什么呢？那就是因为他们具有迥异的“建筑风格”。所以SOA刚开始流行的时候，很多人就在强调，<strong>SOA与实现无关</strong>，它是一种新的软件思维方式，这就好比不同风格的建筑都可以用钢筋水泥做成一样。 <br /><br /><img style="WIDTH: 508px; HEIGHT: 318px" height="379" src="http://www.javaeye.com/upload/attachment/45431/70ec5d19-11ba-35d6-82c8-e7d951c1d7f8.png" width="428" /><br />框架应该是我们谈论最多的，什么Spring，Strust2，Seam或者.Net，那么这些框架与架构之间怎么区别呢？ <br />我的理解是架构是一种软件的应用模式，而框架是一个实实在在的软件系统，并且<strong>框架是与实现和语言密切相关的</strong>。 <br />我们可以用某种框架去实现某种架构风格，而架构思想又指导框架的实现方式。典型就是SOA的思想催生了SCA、SDO等规范和实现。 <br /><br /><img style="WIDTH: 527px; HEIGHT: 298px" height="295" src="http://www.javaeye.com/upload/attachment/45433/6320d0f5-3056-35cf-b4de-0cbedfb85449.png" width="576" /><br />理解架构之后，那么SOA的核心理念应该就是服务了。 <br /><br /><img style="WIDTH: 523px; HEIGHT: 297px" height="271" src="http://www.javaeye.com/upload/attachment/45435/b6dc3251-a1aa-3bb2-8f4b-44e3a87dd943.png" width="513" /><br />这个是当初被Copy烂了的图，应该是SOA的雏形，但更加确切的说，它描述的是Web services应用的一种模式，因为目前SOA典型的实现方式仍然是Web services <br /><br /><img height="449" src="http://www.javaeye.com/upload/attachment/45437/008e1757-5f47-3f28-a47c-cd7378a9ba56.png" width="529" /><br />Thomas Erl的那本经典的SOA著作中描述了服务的许多特性和之间的关系，而在我看来，对于中小型的企业应用，首要的问题应该是“服务的松散耦合性”，这是我个人最为看重的。和许多小公司开发人员一样，有过系统逻辑耦合紧密，用户需求的不断变化（我们戏称为变态需求）导致系统配置项不断增多用以应付不同的客户和不同的需求，最后结果确是改好一个BUG，引出十个BUG。所以我认为SOA让我们看到了松散耦合的希望（有希望总是好的） <br /><br /><img height="497" src="http://www.javaeye.com/upload/attachment/45444/79ad6164-11b3-3f55-b50a-ffb6c0d1e891.png" width="541" /><br />除了单个的应用系统，已有系统和新系统的集成问题对于中小企业也日渐显现。比如一般企业都会有财务软件，后续为了办公规范上了OA，之后规模扩大，生产管理问题突出，引入了行业ERP，但这些系统如何融合，如何实现数据、流程等多方面的集成，就变得很困难。传统的有一些EAI产品，但是价格昂贵且负责，不适合小企业，SOA的出现也为应用集成开辟了新的方向。有人会说SOA也很复杂啊（像SAP的NetWeave），但正像SOA承诺的那样，<strong>渐进式的</strong>慢慢来，如果有一个简单易用的SOA集成平台满足特定行业的需求，将典型应用作为服务挂接上去，不是挺好吗？（本帖目的就和大家探讨如何构建自己的SOA平台，希望有经验的朋友发表看法） <br /><br /><img style="WIDTH: 558px; HEIGHT: 418px" height="418" src="http://www.javaeye.com/upload/attachment/45439/61586cec-200e-3f06-91b3-6b022ef50802.png" width="636" /><br />比如一个典型的模具制造企业，规模不大，但是慢慢随着发展，管理系统和IT应用也会不少，也有需求将各个系统串起来，这就引导我们去思考简单、易用、廉价的集成平台的问题。 <br /><br /><img height="456" src="http://www.javaeye.com/upload/attachment/45441/30d9a1ff-e41c-3d61-916c-c2a0217305d0.png" width="561" /><br />那么如何根据我们实际的需求去设计一个集成平台框架呢？架构思想这时就起到了关键的作用。相信很多朋友看到开源文档——Roy Thomas Fielding(REST架构创始人)的那篇经典的论文，它为我们思考架构提供了很好的思路。 <br />这又使我联想到了“建筑”，可能第一种方法比较适合于设计创造性的建筑，比如鸟巢，第二种可能适合于实用性建筑，比如杭州湾跨海大桥。那么我们做软件的目的当然是为了满足客户需求，而不是炫耀自己的架构多么的优秀，自然会选择第二种方式去设计我们的架构。 <br /><br /><img height="258" src="http://www.javaeye.com/upload/attachment/45442/39821256-a45a-3cd3-b847-b32cf77c703c.png" width="559" /><br />从用户需求推导出系统约束，由约束来添加满足约束的架构方式或组件，最后由导出的架构风格指导我们选择一些已有的东西去搭建我们的架构实例。 <br /><br /><strong>以下就是一般制造型企业架构的推导过程（可能略显粗糙，主要只是表达这个过程）</strong><br /><br /><img src="http://www.javaeye.com/upload/attachment/45443/f30219bc-498b-38e6-87a0-e6b577c4df74.png" /><br /><img height="386" src="http://www.javaeye.com/upload/attachment/45449/b90b3ac2-ba44-3db0-97b2-36bcd4fa99d2.png" width="536" /><br /><br /><br /><img height="398" src="http://www.javaeye.com/upload/attachment/45451/a649becd-8d04-33c4-8cc5-c0bb644ea35f.png" width="537" /><br /><br /><img height="432" src="http://www.javaeye.com/upload/attachment/45453/5298d3b4-cda6-3b94-927f-2cfbe2a40358.png" width="539" /><br /><br /><img height="418" src="http://www.javaeye.com/upload/attachment/45455/35cf223f-ad05-37d5-908b-c4414dd20abd.png" width="544" /><br /><br /><img height="453" src="http://www.javaeye.com/upload/attachment/45457/3e3b2863-5091-329a-80a9-0255414eebac.png" width="548" /><br />好了！现在架构风格已经基本成形了。它与SOA风格不谋而合，应用系统的功能暴露为服务，服务无状态，因此和相互组合成新的流程（BPEL）和应用，状态管理由服务端拿到了客户端（广义的客户端），中间通过统一的数据格式来交换数据（XML） <br /><br /><img height="425" src="http://www.javaeye.com/upload/attachment/45459/2959a509-7eb9-30d6-9938-a325fc58114d.png" width="554" /><br />咦！既然这样，是不是也可以利用一些开源的组件构建我们自己的SOA集成平台呢？上图就是一个简单的框架说明 <br /><br /><img height="458" src="http://www.javaeye.com/upload/attachment/45463/0652a58d-9180-3f7f-8de5-c7b1e5a9b4a7.png" width="561" /><br />那么各个核心组件之间的调用关系如何呢？上图描述了大致的过程。用Portal作为统一的用户界面，调用由ESB处理的各种数据消息（不管这些数据从何而来，去向何方），UDDI中存放着已有的服务，BPEL将需要的服务组合起来，形成流程，并发布为新的服务，注册到UDDI，ESB只需要根据配置找到对应的服务和业务规则，对XML文件进行传递、映射等等，这样数据不就集成了嘛，通过Portal也可以看到集成的效果了吗？虽然不够理想，但应该就是这样，呵呵 <br /><br /><img height="329" src="http://www.javaeye.com/upload/attachment/45461/057648a3-84e9-3413-b056-378f50a1ca47.png" width="569" /><br />好了，有了大致框架，应该分析一下某些应用了。我们很清醒，小团队是做不出通用的产品的（要不SAP就倒闭了，呵呵），通用的产品中小企业也是买不起的，那么我们就应该重点放在SOA能解决什么具体问题。 <br />比如CAD、CAE的集成问题，这些常用的软件通常需要与管理系统管理，但绝大部分企业就是Excel导出、导入来实现数据交互，我们就可以尝试用Web services通过SOA平台来实现无缝的集成。 <br /><br /><br />好了，今天就写一些关于SOA和集成有关的感触，后续有时间将一点一点展开，希望大家来拍砖：） <br /><img src ="http://www.blogjava.net/zhuyongjp/aggbug/258144.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhuyongjp/" target="_blank">zhuyongjp</a> 2009-03-06 11:00 <a href="http://www.blogjava.net/zhuyongjp/archive/2009/03/06/258144.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>