信息化 频道

SOA施妙手 全球酒店预订不用愁

IT168编者按】对于很多企业的CIO来说,SOA(面向服务的架构)似乎还是个“天马行空”的概念。如何让SOA落地?最重要的是,IT人员必须改变系统设计的思路与精神,利用面向服务而非面向对象的方式来进行应用的整体构建。在本文中,全球酒店在线预订系统的应用就很好地体现了SOA的精髓。
 
在线预订系统面临信息交互尴尬
 
在为某国际性酒店的全球在线预订系统做架构设计时,笔者遇到了一个很头疼的问题:如何保证客房预订系统与分布在全球各地的酒店之间完成信息的交互?
 
一种妥协的办法是,在预订系统中为酒店管理者提供相应的功能入口,使管理人员可以把酒店的客房数量、客房类型等数据输入到系统的数据库里。在这种情况下,发布到在线预订系统中的客房数据必须是预留的,因为只有如此才能避免在线预订者与酒店本身的顾客对于客房资源的争用。
 

 
然而,这种办法虽然解决了客房资源的争用问题,却又造成了新的问题:酒店的客房可能会被闲置,从而导致资源的浪费。假设该酒店共有200间客房,他们为在线预订系统预留了50个房间。为了保证在线预订系统的顾客能够顺利地订到合适的房间,这50间客房将不允许非在线预订者预订。也就是说,如果有150间客房入住了顾客,那么即使酒店还空着50间客房,对于那些到酒店订房的客人而言,他们的大堂经理也只能抱歉地说客满了。
 
无疑,最理想的办法是让各个酒店的数据与在线预订系统实现共享,并使在线预订系统能够及时地获取这些更新数据,可这样的话势必会加重管理员工作上的负担。考虑到全球时区不同的情况,可能每个酒店的管理员都需要24小时值守。同时,它还将给系统架构带来三大难题:
 
①全球的酒店系统需要定义统一的接口标准,怎样实现?
②如何保障酒店数据访问的安全性?
③全球的各个酒店可能会使用不同的系统,怎样保证它们与在线预订系统之间的互操作性?
SOA巧解系统架构三大难题
 
而运用了SOA的系统架构方法后,这三大难题就可以迎刃而解。
 
首先,虽然很难要求全球的酒店系统都遵循统一的接口标准,但鉴于酒店的行业特征,定义统一的服务契约(Service Contract)是完全可行的。例如,在了解消息定义的前提下,我们可以定义如下的服务契约:
[ServiceContract]
ReservationResponse Reserve(ReservationRequest request)
这样所有的Web Service都遵守一个共同的服务契约,并将被定义为统一的服务接口。
 
其次,SOA对数据的安全访问有较好的支持。自从SOA诞生以来,对于Web Service安全性的讨论就没有停止过,厂商也从技术上强化了数据访问的安全机制。例如微软推出的WSE(Web Services Enhancements,微软提供的一个网络服务开发组件).NET3.0下的WCF(Windows通信基础)就完全支持WS-Security、WS-Trust和WS-SecureConversation等安全策略,再结合用户的权限控制以及WAN和LAN的防火墙配置,数据访问的安全性已经可以得到保障。
 
第三,SOA本身就是为互操作性(interoperability)而生的,这也正是SOA的最大价值所在。只要提供了Web Service,企业就可以通过WCF调用这些服务。即使有些系统无法提供Web Service(例如RPG和COBOL),用户也可以通过Host Integration Server(HIS)使应用程序接口能够实现.NET架构下的Web Service。
 

SOA

 
全球酒店在线预订系统的体系架构图
   
在SOA体系架构中,用户可以使用PC、笔记本或者PDA访问在防火墙保护下的酒店在线预订系统,查询/预订/退订房间。该系统通过WCF技术跨应用程序地访问各个酒店提供的Web Service,尽管这些酒店系统分布在世界各地,它们提供Web Service的方式可能是WCF、WebSphere,也可能是借助HIS实现的;为了管理酒店的业务流程与工作流,系统还部署了BizTalk Server,该服务器负责管理事务和处理异常消息的传递。
 
没有SOA和Web Service,要实现这样的全球酒店在线预订系统是很难想象的,特别是新设计的在线预订系统还必须兼容旧的酒店系统。而管理者也不能奢望酒店的预订服务流程是一成不变的,利用SOA,企业就能很好地隔离服务提供者与调用者之间的依赖,实现系统的松散耦合;此外,只要在SOA设计中遵循“服务是自治的”这一原则,并且较好地定义服务的边界,即使服务的实现发生变化,对于整个系统而言也不会“伤筋动骨”。
0
相关文章