论面向服务架构及其应用

摘要:

面向服务架构,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。SOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。SOA可以看作是B/S模型、 XML( 标准通用标记语言的子集)/Web Service技术之后的自然延伸。SOA将能够帮助软件工程师们站在一个新的高度理解企业级架构中的各种组件的开发、部署形式,它将帮助企业系统架构者以更迅速、更可靠、更具重用性架构整个业务系统。较之以往,以SOA架构的系统能够更加从容地面对业务的急剧变化。

SOA定义:面向服务的体系结构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。

SOA主要的四个技术以及标准:

SOA的第一个技术与理论体系为结构编程方法

40年前国际上发生了“软件危机”,如IBM公司开发一个操作系统、或美国的航空公司开发飞机订票系统,都花费了上千人年的工作量,开发周期长、而开发出来的产品却是错误很多,难以维护和适应修改。正在此时,一位荷兰的物理家E.W.Dijkstra提出了一种“结构程序设计方法”,他认为:人的智力是有限的,采用数学或物理学的思维方法,用枚举、抽象、归纳、类比等思维方式简化问题。由于我也是数学系毕业的,我拜读了他的所有论文,就编写一本着作“编程方法学”,此书曾三次获得着作大奖,并在全国十多所名牌大学讲过课。用此方法扩展到软件设计中时,称为“结构化分析和结构化设计(SASD)”。

所谓“结构程序设计方法”,就是基于面向对象设计方法的早期蓝本,侧重於解决程序正确性的编程的方法,以此为基础建立了软件工程这门学科,建立了编程的基础理论体系。

解决软件开发效率的第二个基础理论体系是“面向对象”的可重用理论

我们都知道由面向对象发展到面向构件,由面向构件再发展到面向服务,因此它们的认知观和基础理论都是息息相关的,解决大型软件的开发效率和质量除了要解决编程的正确性外,还必需解决开发周期长、复用性差、成本高、文档多、以及难以适应系统演化等问题,十多年来仍旧困惑着这门学科,“软件危机”仍未解决。

人们的知识是从一个定理、一个原理逐步积累起来的,社会是依靠知识的不断积累发展的。然而编制软件每次却都是从零开始,这是造成“软件危机”的根本原因。由此提出了编程工作是否也可以重用以前成功的经验和程序呢?。整整经过十多年的探索,到七十年代才获得成功。

我用此方法设计了一个大型操作系统,这套方法和理论在产品开发和科研领域方面用得很多,因此我称它为第二个技术与基础理论。

SOA的第三个技术与理论体系是UML统一建模语言

鉴于面向对象的缺陷, 三位面向对象的奠基人联合起来,创建了UML统一建模语言。UML为软件开发和SOA的产生起到奠基和里程碑的作用。

UML主要理论成果是:①统一面向对象的基本概念,并引进了许多新的概念,②认为软件开发的过程实质上是从抽象的模型逐步细化,过渡到具体的实现,其中间的每个阶段都是实现了某一抽象模型,UML为此提供了建立模型的工具,用直觉的图形来建立模型,从此软件专家就有了自己的工具,正如音乐家有了五线谱工具那样;③为适应软件的多变性,提供了演化的概念。

实际上此建模理论是第三个技术与基础理论,它为演化到构件和架构概念奠定基础理论模型。

第四个技术与基础理论是构件架构

由于这种OO方法真正用于实际工程中开发的应用软件却很少见到,工程上的实施缺乏开发规范;在技术上要术开发人员的素质较高;最大的问题是被开发出来的软件难以演化,而软件要能适应变化是客观存在的。

为此发展出单纯重用的“构件和架构”技术及其理论体系。在1998年日本京都召开的“基于构件的软件开发(CBSD)”国际专题学术会议上,一致认为软件开发技术离不开构件和体系结构。软件体系结构现简称“架构。

 

SOA的第一个技术与理论体系为结构编程方法

40年前国际上发生了“软件危机”,如IBM公司开发一个操作系统、或美国的航空公司开发飞机订票系统,都花费了上千人年的工作量,开发周期长、而开发出来的产品却是错误很多,难以维护和适应修改。正在此时,一位荷兰的物理家E.W.Dijkstra提出了一种“结构程序设计方法”,他认为:人的智力是有限的,采用数学或物理学的思维方法,用枚举、抽象、归纳、类比等思维方式简化问题。由于我也是数学系毕业的,我拜读了他的所有论文,就编写一本着作“编程方法学”,此书曾三次获得着作大奖,并在全国十多所名牌大学讲过课。用此方法扩展到软件设计中时,称为“结构化分析和结构化设计(SASD)”。

所谓“结构程序设计方法”,就是基于面向对象设计方法的早期蓝本,侧重於解决程序正确性的编程的方法,以此为基础建立了软件工程这门学科,建立了编程的基础理论体系。

解决软件开发效率的第二个基础理论体系是“面向对象”的可重用理论

我们都知道由面向对象发展到面向构件,由面向构件再发展到面向服务,因此它们的认知观和基础理论都是息息相关的,解决大型软件的开发效率和质量除了要解决编程的正确性外,还必需解决开发周期长、复用性差、成本高、文档多、以及难以适应系统演化等问题,十多年来仍旧困惑着这门学科,“软件危机”仍未解决。

人们的知识是从一个定理、一个原理逐步积累起来的,社会是依靠知识的不断积累发展的。然而编制软件每次却都是从零开始,这是造成“软件危机”的根本原因。由此提出了编程工作是否也可以重用以前成功的经验和程序呢?。整整经过十多年的探索,到七十年代才获得成功。

我用此方法设计了一个大型操作系统,这套方法和理论在产品开发和科研领域方面用得很多,因此我称它为第二个技术与基础理论。

SOA的第三个技术与理论体系是UML统一建模语言

鉴于面向对象的缺陷, 三位面向对象的奠基人联合起来,创建了UML统一建模语言。UML为软件开发和SOA的产生起到奠基和里程碑的作用。

UML主要理论成果是:①统一面向对象的基本概念,并引进了许多新的概念,②认为软件开发的过程实质上是从抽象的模型逐步细化,过渡到具体的实现,其中间的每个阶段都是实现了某一抽象模型,UML为此提供了建立模型的工具,用直觉的图形来建立模型,从此软件专家就有了自己的工具,正如音乐家有了五线谱工具那样;③为适应软件的多变性,提供了演化的概念。

实际上此建模理论是第三个技术与基础理论,它为演化到构件和架构概念奠定基础理论模型。

第四个技术与基础理论是构件架构

由于这种OO方法真正用于实际工程中开发的应用软件却很少见到,工程上的实施缺乏开发规范;在技术上要术开发人员的素质较高;最大的问题是被开发出来的软件难以演化,而软件要能适应变化是客观存在的。

为此发展出单纯重用的“构件和架构”技术及其理论体系。在1998年日本京都召开的“基于构件的软件开发(CBSD)”国际专题学术会议上,一致认为软件开发技术离不开构件和体系结构。软件体系结构现简称“架构”。

3.比如在开发一个简单的web系统时候

页面设计:

  1. 动静分离  JavaScriptCSS统一放到公共的静态服务器上,完全独立的子域名,防止脏Cookie问题和动态域名中无用Cookie问题,通过文件版本号解决系统新版和旧版本之间冲突问题。  所有图片由独立的分布式图片系统管理,对原图进行不同规格的无损裁减和压缩。

 2. 异步加载和懒加载  商品价格、营销活动信息、库存等动态数据通过异步加载  非首屏数据做懒加载处理,提高首屏加载时间,比如评价、商品详情等内容

3. 多级缓存策略

 a. 浏览器本地缓存  协商缓存,对于某些时效要求较高的资源通过Last-modified控制数据。做到StatusCode=304  强缓存,JSCSS等静态资源或者一些页面碎片伪静态数据通过ExpiresCache-Control(http1.1支持)设置做到强缓存,在不强制刷新的情况下可以做到200(from cache)

 b. CDN缓存  CDN分两条线有自营CDN和合作商的CDN,图片、静态资源与伪静态数据分  别放在不到的CDN 

c. Varnish缓存  Varnish在设计上负载使用轮询方式,不使用URL HASH策略,用空间换时间的策略, 从而避免热数据问题,也支持横向扩展。  Varnish 缓存和CDN缓存在失效时间错开,从而避免同时失效回源压力过大。

后台设计:

数据的统一处理:

Web系统的数据通过MQ消息来源于外部系统。在设计时把共性抽出来分成三部分

接受MQ消息并持久化通过Listener

解析报文解析报文

业务处理上简化为addupdatedelete三个动作  异常组件以观察者模式实现,记录处理失败的MQ消息并对消息进行截取,并供下次再反向执行

 参考资料: 百度百科  

posted @ 2020-05-15 08:39  孙浩楠  阅读(605)  评论(0编辑  收藏  举报