当我在为全球酒店在线预订系统做架构设计时,我发现一个头疼的问题是如何保证系统与分布在全球各地的酒店之间完成消息的交互?

一个妥协的办法是,我们为酒店管理者提供管理功能入口,管理人员可以将酒店的客房及客房类型的数据输入到系统的数据库中。发布到在线预订系统中的客房数据必须是预留的,如此方可以避免在线预订者与酒店本身顾客对于客房资源的争用。

客房资源虽然得到了妥善的安排,但造成的问题是客房可能会被闲置,从而造成资源的浪费。例如,某酒店为在线预订系统预留了50间客房。为了保证在线预订系统的顾客可以顺利地预订到合适的客房,这50间客房不允许非在线预订者预订。假设整个酒店共有200间客房,如果150间客房均已入住了顾客,那么即使酒店还空着这50间客房,对于那些实际到酒店订房的客人而言,酒店的大堂经理也只能抱歉地说客满了。

我们当然可以及时地更新这些数据,然而这会给管理员带来工作上的负担。考虑全球时区不同的情况,有可能每个酒店的管理员都需要24小时的值守。

最好的办法当然是让各个酒店的数据与在线预订系统的数据实现共享。然而这会带来三个问题:
1、 全球的酒店系统需要定义统一的接口标准;
2、 如何保障酒店数据访问的安全性?
3、 全球的各个酒店可能会使用不同的系统,如何保障它们与在线预订系统之间的互操作性?

SOA可以使得这些问题迎刃而解。虽然我们很难要求全球的酒店系统都遵循统一的酒店接口标准,但鉴于酒店的行业特征,定义统一的服务契约(Service Contract)是完全可行的。当然,我们首先需要解决消息的定义,如此我们就可以定义如下的服务契约:
[ServiceContract]
ReservationResponse Reserve(ReservationRequest request) ;

自从Web Service诞生以来,对于Web Service安全性的讨论就没有停止过。例如Microsoft推出的WSE。.NET 3.0下的WCF则完全支持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。

全球酒店在线预订系统的体系架构图如图1所示:
 
图1 全球酒店在线预订系统的体系架构图
   
用户可以通过PC、laptop或者PDA访问在防火墙保护下的酒店在线预订系统,查询/预订/退订房间。系统通过WCF技术跨应用程序地访问各个酒店提供的Web Service。这些酒店系统分布在世界各地,它们实现Web Service的方式可能是WCF、WebSphere,也可能通过Host Integration Server实现。这些Web Service都遵守一个共同的服务契约,并被定义为统一的服务接口。

为了定义与管理酒店的业务流程与工作流,系统还必须部署BizTalk Server。此外,该服务器还要负责管理事务,处理异常消息的传递。

没有SOA和Web Service,要实现这样的全球酒店在线预订系统是很难想象的,特别是新设计的在线预订系统还必须考虑兼容旧有的酒店系统。此外,我们不能奢望酒店的预订服务流程是一成不变的,利用SOA,可以很好地隔离服务的提供者与调用者之间的依赖,实现系统的松散耦合。只要在设计中遵循了“服务是自治的”这一原则,并且能够较好地定义服务的边界,即使服务的实现发生了变化,对于整个系统而言,也不会严重到伤筋动骨的地步。重要的是,我们必须改变系统设计的思路与精神,利用面向服务而非面向对象的方式来考虑架构的整体设计。

转载于:https://www.cnblogs.com/wayfarer/archive/2007/04/05/700679.html

基于SOA的体系架构设计相关推荐

  1. 基于面向服务体系架构(SOA)和面向资源体系架构(ROA)的业务组件模型

    引言 在<面向服务体系架构(SOA)和业务组件(BC)的思考>(以下简称< SOA 和 BC >)一文中介绍了基于面向服务体系架构(SOA)的组件模型,本文按照"分离 ...

  2. 项目体系架构设计——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(四)

    系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...

  3. 基于SOA的银行系统架构

    Part-1  [简述] 1.通过引入面向服务架构(SOA),企业服务总线(ESB),适配器(Adapter)及面向构件等技术,尝试打造一个统一业务流程服务平台,实现面向流程的服务集成. 2.传统银行 ...

  4. 1.项目体系架构设计(电商推荐系统)

    文章目录 一.项目系统架构 二.项目数据流程 三.数据源解析 1.商品数据表 -- Product 2.用户评分表 -- Rating 四.数据模型(表结构) 五.统计推荐模块 1.历史热门商品统计 ...

  5. KMer职场必修——知识体系架构设计及分类

    4月24-26在东软·沈阳园区,中国知识管理实践第一人吴庆海博士和东软集团资深知识管理专家陈雪玲老师联合,为学员们讲授了一堂生动的知识管理课程--知识体系架构设计及分类. 知识体系设计是企业知识管理落 ...

  6. 【软件体系结构】架构风格与基于网络应用软件的架构设计:Roy Tomas Fielding】

    [软件体系结构]架构风格与基于网络应用软件的架构设计:Roy Tomas Fielding 博士 - 唐雕 - 博客园

  7. 数据仓库系统的技术体系架构设计

    数据仓库系统的技术体系架构设计 作者:成晓旭 该数据仓库系统的主要功能是从众多外部系统中,采集相关的业务数据,集中存储到系统的数据库中.系统内部对所有的原始数据通过一系列处理转换之后,存储到数据仓库的 ...

  8. 网游的跨服玩法是如何实现的?“跨域体系”架构设计思路

    虽然游戏市场竞争激烈,产品格局变动较大,但游戏产业一直处于稳步增长阶段,无论是在端游,页游,手游还是已经初露端倪的HTML5游戏.可以预见,游戏类型中,MMOARPG游戏仍然会是引领市场的主流趋势,贡 ...

  9. 某银行大数据体系架构设计与演进

    近年来,随着大数据与人工智能相关技术的迅速发展,新技术逐步在全社会各行各业得到应用.银行业作为一个高度信息化的行业,首当其冲面临着互联网新技术应用的挑战.民生银行在 2013 年开始布局分布式.大数据 ...

最新文章

  1. App字体大小不随系统改变而改变
  2. ecos无线驱动掉线问题解决方案分析
  3. java web项目里ehcache.xml的参数说明
  4. 008 RestFul API 拦截器
  5. 带你玩转七牛云存储——高级篇
  6. 基于JAVA springboot+VUE前后端分离疫情防疫平台设计实现
  7. OAuth2实现原理
  8. python链表_手把手实现 python 的链表数据结构
  9. 程序显示文本框_vb程序语言题库
  10. KVM详解(一)——KVM基础知识
  11. Anagrams by Stack(进栈出栈问题)
  12. VS2003版本Jsoncpp的配置和使用
  13. go语言学习网站大全
  14. 公链生态周报:BI指数周涨幅超4%,以太坊POS代码即将完成 | 链塔智库
  15. html5 canvas 一个漫天飞雪的效果
  16. Hololens2仿真器 模拟手势输入
  17. 臭可乐,怎么才能让你不吃便便呢,唉
  18. 社会会把你塑造成你讨厌的模样
  19. 菜鸟携手花西子 打造国货出海全链路物流解决方案
  20. 车载诊断数据库ODX——初步了解ODX

热门文章

  1. 基于实时计算Flink版的场景解决方案demo
  2. 入选2021全球青年领袖榜单,蚂蚁何征宇的技术人生
  3. OpenYurt入门-在树莓派上玩转OpenYurt
  4. 程序员看过来:阿里毕玄提升代码能力的4段经历
  5. 如何使用实时计算 Flink 搞定实时数据处理难题?
  6. 前端如何正确使用中间件?
  7. 闲鱼研发框架应用和探索
  8. C语言输出长方柱的体积,需要求3个长方柱的体积,请编写一个基于对象的程序。数据成员包括length(长)、width(宽)、 height(高)。要求用成员函数实现以下功能...
  9. 90后码农可以拯救互联网吗?
  10. 同时渲染两个世界:恐怖游戏《灵媒》背后的尖端技术