编辑推荐: |
本文主要讲解了SOA是什么、SOA的发展历程、SOA的特点、SOA的关键技术、SOA如何在汽车上的使用等?
本文来自于软件设计之美,由火龙果软件Linda编辑、推荐。 |
|
SOA最近在汽车电子领域备受关注,正好最近也需要写一篇SOA相关的论文,学习到了不少SOA相关的概念及应用知识,所以打算把我了解到的相关知识及想法记录下来。
SOA是什么
SOA的全称是面向服务的架构「Service-Oriented Architecture, SOA」,类比面向对象的架构,SOA就是一种以服务为核心的架构。有许多不同的组织从不同的视角对SOA进行了描述,但迄今为止还没有一公认的定义。
我们先来看看W3C对它的定义 “SOA是一种应用程序架构,在这种架构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,能够以定义好的顺序调用这些服务来形成业务流程。“
SOA模型(图片来源:软件体系结构原理、方法与实践 )
可以看到关键字「服务」,「明确定义的接口」,接下来我们一个个来理解。
什么是「服务」呢?服务是一种比构件粒度更大的信息集合,实际是包含实现了多个关联业务需求的逻辑组合,并且允许每个服务使用特定的平台,架构或技术方案。
单个服务内部结构(图片来源:软件体系结构原理、方法与实践 )
关于「明确定义的接口」,大家可能想这还不简单吗,不就是接口定义要从使用者角度编写并且标准化吗?其实不仅如此,面向服务的接口不同于构件的接口,他的实现与特定语言无关,采用WSDL技术进行定义,可以方便的实现上述异构服务之间进行服务调用。
SOA的发展历程
SOA的发展大致分为3个阶段分为混沌,壮大,演化。
SOA的起源可以追溯到90年代末,一家叫做Gartner的信息技术研究和分析的公司提出了SOA的设想。
进入千禧年后,随着以Web为代表的互联网经济的兴起,各种电子商务业务得到迅速的发展,各大企业面临消减成本和随需应变这2个问题,SOA恰恰能满足集成各种异构系统及高度的灵活性可用性,因此重新受到人们的关注。下图是2008年W3C发布的Web技术发展展望,可以看到当时同时伴随着XML,
Web2.0等技术的发展,SOA崛起的技术基础已经备齐,之后便进入飞速的发展壮大时期,涌现出来诸如IBM
SOA参考架构(见下图),Oracle SOA等一大批SOA企业级解决方案。
W3C 2008年发布的Web技术发展展望(来源:W3C官网)
IBM SOA参考架构
后来人们发现传统的基于ESB的SOA的诸多问题,便兴起了SOA的变种微服务架构,微服务架构基本的思想是更细粒度的服务化,服务间分布式调用。
从SOA技术的发展我们可以看到技术与商业有不可密分的关系,一方面新技术推动商业目标的实现,一方面商业又给技术的发展注入源源不断的动力,所以一个新技术的产生,如何应用实践对它的未来发展至关重要。
SOA的特点
明确定义的接口, 服务的接口定义明确,并且一旦公开不能随意更改。
自包含和模块化, 每个服务在功能实现上完全独立,自我管理,版本控制,独立部署。
松散耦合 ,服务与服务间通过定义良好的接口或协议交互。
可扩展性强, 服务总线的采用, 可以快速集成其他异构系统。
粗粒度, 服务数量不应该太多,服务交互消息量大,但服务间交互频度低。
可用性强, 可采用分布式多个服务器部署,大大提升系统可用性。
可复用性强, 可以进行以服务为单位的软件复用。
SOA的关键技术
XML ,SOA发展的根基,一种文本标记语言,具有平台无关性等特征,为服务的发现,定义,发布等功能提供条件。
Web Service ,是一种跨平台的、低耦合的、基于可编程的web应用程序,可使用XML来描述、发现、配置这些应用程序,用于开发分布式交互应用程序。Web
Service技术的三剑客是WDSL(服务接口描述与服务定义),UDDI(服务发现,注册),SOAP(服务通讯协议,有被REST取代的趋势)。
ESB ,企业服务总线,是传统中间件技术与XML、WebService等技术结合的产物,主要支持异构系统的集成。ESB基于内容路由和过滤,具备复杂数据的传输能力,并可提供一系列标准的接口。用人话说就是服务间进行数据传输转发的通道。
SOA如何在汽车上的应用?
随着目前SDV(软件定义汽车)浪潮的兴起,越来越多的汽车同行开始考虑,如何用软件创造价值?如何更好的管理车上的上百个ECU(相当于各种异构的系统)?如何更好的应对需求的增长?如何提升车载OS的可用性等一系列问题,这些坑似乎在以Web为代表的互联网经济的兴起过程中也遇到过类似的,只是平台不一样罢了。
这时我们回过头来看看SOA的特点可扩展性强,高可用,松散耦合,标准化接口,支持异构系统的集成,虽然在Web领域正在逐渐被微服务取代,但是他的优点确实可以借鉴到汽车电子领域啊。
你可能会问,在Web上都已经用了几十年了怎么才到汽车电子领域呢?原因我认为有几点1.技术不满足,虽然从宏观角度看CAN网络
通讯也解耦了各个ECU,但奈何速率带宽不足,且无法较好的满足可扩展性要求。2.各个ECU独自为战,没有人从汽车电子系统架构的角度思考整车系统的架构设计。但最近随着车载以太网技术的发展,EEA,SDV的兴起,使得SOA开始在汽车电子领域的焕发青春。
那么该如何借鉴SOA以及借鉴时需要关注哪些点呢?我认为总体的原则是借鉴Web SOA技术的开发思想,如开放性,服务化,敏捷等。下面我将从以下几个方面阐述SOA在汽车电子领域应用的关注点。
服务的拆分
服务的拆分在Web上是个重要的研究课题,一般可以从业务角度或领域概念角度进行。在车载领域有着上百个ECU,每个ECU提供各种不同的服务,采用的技术平台语言均不一样,不能简单粗暴的直接以目前各个ECU作为服务的拆分结果,比如多一个ECU就要多一份硬件成本,及之后的开发测试,维护成本。我们应该尝试从系统的角度出发,梳理整个汽车电子领域的业务模型,从垂直领域出发看看那些业务是关联的组合的一起,之后在从水平领域出发哪些是基础服务,哪些是可扩展服务,允许一个ECU可以提供多个服务(AVNT主机既提供仪表服务,又提供娱乐服务等),最后和实际的ECU分布现状进行匹配融合,以找到最佳的服务拆分结果,这样才能真正的发挥SOA的作用。
服务间通讯
在Web上一般采用ESB实现,有各种开源的框架(如IBM Websphere,Mule ESB )来支撑,完成服务的注册,发布,调用,有的甚至还具备负载均衡,网关路由机制。使企业可以专注于自身业务服务的开发,并快速方便的完成服务的开发上线。在汽车领域目前随着以太网通讯技术的发展,相信未来会有更多的服务商开发基于车载以太网的ESB中间件来满足这样一个需求,我认为在这个环节车厂需要更加关注服务的接口定义,良好的接口定义更加利于平台的平滑式演进。
服务的治理
随着服务的独立运行及互相调用,对整车系统的稳定性形成一个较大的挑战,例如 基础服务调用压力过大导致调用者等待,一个服务的失效导致他调用者失效,一连串的服务调用链失效可能引发整车系统的雪崩。因此一旦采用了SOA,一定要系统性的对整车系统进行可用性研究。可以分别从单个系统及全局2个维度进行系统的
可靠性设计工作。采用 SFMEA设计手段发现问题,针对单个系统可以采用主动检测异常,错误恢复机制等策略;全局角度可以给重点模块加强冗余设计,分配好服务的调用关系,过滤无关消息的转发等技术手段。
结语
纵观整个系统架构发展轨迹,从单体架构,到SOA架构,再到目前的微服务架构,架构设计的方向一步步往服务化的发展方向靠拢,但一个根本目标没有改变,构建一个开放的,高性能,高可用性架构。汽车软件领域应该紧紧跟随尤其Web方面一些新的技术架构,因为我们的目标都是一样的,可能技术无法通用但思想一定是可以借鉴的,就比如SOA在汽车领域的应用。
|