MyException - 我的异常网
当前位置:我的异常网» 软件架构设计 » Java分布式应用学习札记01分布式Java应用和SOA

Java分布式应用学习札记01分布式Java应用和SOA

www.MyException.Cn  网友分享于:2013-07-02  浏览:6次
Java分布式应用学习笔记01分布式Java应用和SOA

1.  前言

当我们所做的系统到一定的程度后,随着涉及的领域越来越宽泛,客户群也越来越多,我们的系统不得不需要第三方系统协作,或者将原有大系统分解成各个协作的小系统才能更好地完成任务。就好像KFC,收银员就负责客户端点餐、收银、找零钱、开发票是一个接待人员完成。而真正为您做餐的又分为比较复杂的分工,比如负责炸薯条的人、做汉堡的人、还有做盖饭的(KFC的盖饭,唉~~不说了)。而为这些做餐人员提供物料供给的又是另一些人。还有就是KFC外卖送,店员管理经理,是这些人撑起了一个KFC店面。每个人负责的分工都不一样,每个部门人员的分工都和别的部门人员的分工有交互才能完成客户整个的“吃饭”需求。当然了,KFC还提供了洗手间,里面有专门的保洁人员。

从实例看我们IT界吵了这么多年的SOA吧,说通俗了,他就是想让大型的软件系统像KFC这种提供服务类似,内部是各个小系统(相对于整个大系统来说的,有可能这里面每个小系统的规模都是十分大的),有可能内部员工来自于不同的国家,他们之间都使用统一的标准语言——英语进行交流。

Java的分布式系统一般都会遇到异构系统之间的交互,而且这些异构系统99.9%都是在不同物理位置的,需要网络进行通讯,互协作。也就是说当系统一大了,就要面临将群雄割据的系统逐一驯化,使之Java分布之系统为我辈所用。

2.  问题来了

SOA让不同的系统之间使用标准的规范进行通讯,而每个系统暴露出来的功能,SOA称之为“服务”(Service),为客户服务得到位不到位,全看整个大系统运作流不流畅。系统之间没有SOA规范之前可能也进行过整合,协作,但是那个时候没有一个标准的规范限制住通讯的协议,那么造成一个现象就是:系统A与系统B进行因为不同语言,要进行协作使用的是WebService,而系统B与系统C因为大多数功能都是用Java实现的,他们之间可能出于同语言的原因,使用JMS进行通讯协作就够了。而过些时间又出来一个系统D,需要系统A与系统C同时与之协作才能完成一个复杂的业务逻辑了,怎么办?有可能同语言,采用更为古老的RMI,有可能直接写个socket通讯就OK

基于以上的各种现象不同系统之间是采用不同的通讯技术或者说通讯规范的,那么就要求开发这个大系统的每个人都得需要了解其他很多种通讯规范,针对不同的协作系统的更改,进行相应的修改。这样就好比KFC的员工都说自己国家的语言,想和我交流吗,OK,先学学我们国家的语言咱们再交流。难道客户在柜台那边等着你们将员工内部所有的国语都学了个遍,交流顺畅了再要吃的??客户说算了,还是“更多快乐,更多欢笑尽在麦当劳吧。要不早饿死了……”

所以说不同系统,尤其是异构的系统之间采用一个标准的协议进行规范,大家都按照这个标准规范来,以上各自为政的现象就能够得以解决。

3.  SOA规范的要求

SOA的规范要达到的要求主要有以下几点:

1):统一的交互方式:这个目标就是解决上面异构系统之间的通讯问题

2):服务品质:也叫做QoS,包括了通讯的安全,可靠的访问。每个服务能支撑的访问量是有限的,流量控制,机器资源负载分配等等措施都是保证服务质量的。

3):依赖管理:大系统内部往往是小系统之间的耦合工作来完成,那么系统和系统间少不了就要产生耦合,或者说是依赖。那么SOA就需要有解系统间耦合的规定,不能让不同系统强制耦合在一起。

4):高性能,高可用:协作的系统,当然要性能过关,客户用着用着说,怎么报出Exception了,或者说“系统正在维护,请耐心等待”?就好像客户在KFC吃汉堡包吃出了……(不说了),那么这客户下次肯定不来KFC了,而且还向他的朋友说KFC怎么怎么样……

与其说SOA提出这些规范,不如说SOA提出了这些目标。实现了这些目标,那么至少说您的大系统、大软件是符合SOA规范的。

实现SOA规范的,可参考的标准有SCAESB

4.  SOA实现

首先大家不要误会,SCAESB不是2个对立的东东,他们不是麦当劳和肯德基,他们的关系类似于JPA规范和Hibernate实现之间的关系。ESB更像是个抽象的概念,而SCA是一个面向应用的编程和组装方式。使用SCA, 开发人员基本不用考虑技术接口, 代码是纯业务逻辑。

SCA的发布服务:

SCA为了减少对现有系统的入侵,将现有系统的服务类抽象成接口,当然如果原先就是接口+实现类就更方便了。通过SCA配置默认将系统接口暴露成为SCA服务。至于具体的配置文件格式和相关实现类的配置Demo在此先暂时放一放。

SCA的调用服务:

调用服务的方式可以采用xml配置实现,借助Spring集成相关SCA框架的整合可以很方便的使用SCA服务完成自己的业务。这个有点类似Spring集成CXF,这个内容在此也先不介绍。

SCA支持的通信及其交互方式:

SCA规范规定通讯方式有3种方式,JMSWebService、跟情况而定,如果应用处于同一JVM采用JMS,不同则采用WebService。当然了,通过扩展SCA也可以支持其他通讯方式。

对于系统间的依赖管理SCA并没做太多解决的规范,而调试\跟踪也没提出具体规定性的方案。这当然取决于具体的SCA实现框架,或者借助其他开源工具,比如MavenTestNG整合等等手工措施待见属于你们公司自己的基于SOA思想的SCA平台。

ESBSCA不是竞争关系,ESB算是提出一些基于SOA理念的一些抽象概念,核心思想是基于消息中间件来实现系统之间的交互,将系统要通讯的消息动作放到一个统一的寻呼台(消息中间件),处理消息队列的时候,消息自身带着目的信息,之后就发送过去,完成业务逻辑,就相当于麦当劳有个中央总控,所有人都有一个随身携带着的寻呼机,客户来了买餐,前台打开寻呼机往中央寻呼台发送一条消息:“客人点餐,儿童套餐”,发送完毕后,中央寻呼机将此消息发给了后厨,后厨赶紧炸薯条,烤面胚,微波炉热牛肉。一切皆由消息总线进行任务分发。

其实ESB相当于承担了SOA提出的统一服务方式进行交互。

ESB框架需要具备以下功能:

1):标准通讯格式:方便系统间进行通讯

2):消息路由:根据消息的目的地将消息发送至消息目的地,整合分系统统一成完整大系统,这点BPEL做得十分到位。

3):支持消息的请求\相应、订阅\分发2种模式进行。

4):支持多网络协议:httpTCPUDP

5):解决多种数据格式进行交换,数据间的请求数据格式有可能存在差异,消息总线要屏蔽这种差异。

综上所述,实现JMS规范的各种消息中间件,怎么看怎么和ESB所提出的规范相吻合。

5.  总结

这次介绍了相应的分布式系统的特点和SOA提出来的目的,做大型企业分布式系统,利用SOA进行系统整合、一统的意义。当然这次仅仅是抽象概念的一些介绍。之后会有相关内容作为其SCA规范、ESB规范的具体代码实现的。

SOA已经不是什么新鲜词语了,笔者的感觉现在搞软件研发越来越像服务行业了,面对客户,面对客户的客户,我们只有提升自己的服务质量,才能营造更好的品牌效益。还是那句老话,任何技术的推动背后都是商业运作。

1 楼 uuid198909 2011-07-22  
由SOA楼主能想到肯德基的工作模式, ……
不过现在软件开发却是越来越像服务行业了。
2 楼 suhuanzheng7784877 2011-07-22  
uuid198909 写道
由SOA楼主能想到肯德基的工作模式, ……
不过现在软件开发却是越来越像服务行业了。

不不不,我只是打个比方。我也不知道KFC怎么工作的。想象而已,兄弟不必太过认真
3 楼 uuid198909 2011-07-22  
suhuanzheng7784877 写道
uuid198909 写道
由SOA楼主能想到肯德基的工作模式, ……
不过现在软件开发却是越来越像服务行业了。

不不不,我只是打个比方。我也不知道KFC怎么工作的。想象而已,兄弟不必太过认真


恩,是。不过还是感觉炒作居多,包括现在的“云”啊,切实的带来的实效貌似没有太多实质性的东西。
4 楼 suhuanzheng7784877 2011-07-22  
引用
恩,是。不过还是感觉炒作居多,包括现在的“云”啊,切实的带来的实效貌似没有太多实质性的东西。

是这样的,兄弟。它只是提出了一些抽象的思维概念,对于不同的行业、企业实现可以参考扩展的标准予以实施。云计算啊,昨天北京有个“云计算峰会”。我去听了听,云计算还是面临比较多的问题挑战的。(当然了,更多的是各个厂商在推销自己的产品),我也送你一杯
5 楼 uuid198909 2011-07-22  
恩,不过我更期待楼主的《品程序人生》系列啊。对了,注意排版啊
6 楼 suhuanzheng7784877 2011-07-22  
uuid198909 写道
恩,不过我更期待楼主的《品程序人生》系列啊。对了,注意排版啊


兄弟,你太抬举了。呵呵,那种IT生活文章其实也是有感而发。大家愿意看,我自然会分享。
7 楼 richard_2010 2011-07-23  
提起SOA还是感觉有点虚的,但是大部分有规模的企业貌似都上架了ESB产品
8 楼 你若无情我便休 2011-07-23  
richard_2010 写道
提起SOA还是感觉有点虚的,但是大部分有规模的企业貌似都上架了ESB产品


神马都是浮云。
9 楼 uuid198909 2011-07-23  
引用
神马都是浮云。


感觉现在云什么的都太虚了,能像android切切实实的,才比较值得试一试。
10 楼 suhuanzheng7784877 2011-07-25  
richard_2010 写道
提起SOA还是感觉有点虚的,但是大部分有规模的企业貌似都上架了ESB产品

是啊~~~很多公司使用ESB,但是也是招标时候客户的强制要求。
11 楼 suhuanzheng7784877 2011-07-25  
uuid198909 写道
引用
神马都是浮云。


感觉现在云什么的都太虚了,能像android切切实实的,才比较值得试一试。


文章评论

亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
程序员必看的十大电影
程序员必看的十大电影
我是如何打败拖延症的
我是如何打败拖延症的
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序员和编码员之间的区别
程序员和编码员之间的区别
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
编程语言是女人
编程语言是女人
一个程序员的时间管理
一个程序员的时间管理
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员应该关注的一些事儿
程序员应该关注的一些事儿
程序员都该阅读的书
程序员都该阅读的书
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
如何成为一名黑客
如何成为一名黑客
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
每天工作4小时的程序员
每天工作4小时的程序员
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
我的丈夫是个程序员
我的丈夫是个程序员
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
代码女神横空出世
代码女神横空出世
Java程序员必看电影
Java程序员必看电影
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
老程序员的下场
老程序员的下场
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
 程序员的样子
程序员的样子
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
10个调试和排错的小建议
10个调试和排错的小建议
总结2014中国互联网十大段子
总结2014中国互联网十大段子
那些争议最大的编程观点
那些争议最大的编程观点
程序员的鄙视链
程序员的鄙视链
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有