`
freeway2000
  • 浏览: 25329 次
社区版块
存档分类
最新评论

SCA所涉及的几个基本概念

阅读更多

 

    一谈及服务化就不得不提到SCA(面向组件的架构),SCA是为基于SOA思想的系统而制定的开发、部署规范,象跨语言、分布式、以及服务的思想在SCA中都得以实现。SCA的实现有很多,目前Tuscany是完全遵照SCA规范的实现的。当然还有其他的一些实现。虽说实现不一样,但都殊途同归,服务化实施的思路也都是一样的。

 

    下面就说一下SCA涉及到四个概念Component 、Composite、Node、Domain。

 

Component

    是SCA中最基本的元素,是粒度最小的执行单元或者实现单元。

    比如,一个收发email的业务,包含发送文本类型的邮件、发送html类型的邮件、发送带附件的邮件、发送会议邀请邮件、接收邮件、查看邮件、删除邮件这几个功能,我们可以把他看作是一个Email组件。

Component是可以组合与扩展的。一个Component可以依赖其他Component从而构造成新的组件,形成新的业务模式。比如,微博系统中的发送图文微博的组件就是由文字微博的组件,与上传图片的组件组合而成。

Component侧重在实现,一个 Component可以由各种语言或技术平台实现,可以是java、C、ruby、python….。如果你还是不太懂什么是组件,那么就把一个Spring Bean当做是一个组件吧(Spring Bean当中已经蕴含有一些组件的特性)!

 

Composite

    是容纳Component的容器。也是对外服务的基本构成单元。如果说Component侧重在功能,Composite则更侧重在业务。

    我们会发现超市的货架布局有一定的规律,不同类别的商品会在不同的区域的货架上叠放。如果我们将物品比作是Component,那么不同的区域就表示不同的Composite。Composite起到对Component进行分类的作用。相同的,有关联的尽量分到一个Composite中。结合一个例子,以sns中的 好友Component、分组Component为例。加好友必然涉及到好友的分组,查看分组的时候也要显示一个分组下有哪些好友。这两个Component都是有非常密切的关联关系。那么基于这一点我们可以将其归结为同一个Composite。有的人可能也会说User也和好友有关系,是否也应当归结为同一个Composite?就好比是大多数的商品都用到了塑料进行包装,那所有的分类都应该分为一类?这显然是不合理的。所以我们可以将User看作是各一个业务都会依赖的基础的服务,所以User可以抽取为一个独立的Composite。

    Composite是对外服务的基本构成单元。必然要对外暴露服务(Service)和引用(Reference)外部的服务。协议可以是多样化的,有RMI、有JMS、有WebService…. Composite具备binding的特性,可以将一个Component绑定为不同类型的协议。另外,对于Composite的引用而言,对引用的Composite的内部实现细节是不可见的,仅仅暴露了composite提升(promote)出来的Service、Reference和Property。起到对细节的封装。

 

Node

    用来描述部署的节点

    比如在分布式系统中,有很多台服务器,这些服务器侧重的业务不同。比如有A、B、C三台服务器。A服务器提供邮件服务,B服务器提供User相关的服务,C服务器提供好友相关的服务,那么这种情况下,对于每一个服务器,都可以看做是一个node。每个node下面都有一个或者多个composite。

    通常Node是以物理节点的方式体现,但有的场景也是采用的逻辑方式体现,比如在一个jvm内允许多个节点。

 

Domain

    是管理Node的容器

    在服务化全局中有其唯一的标识名称,包含Node的注册和管理工作。相同名称标识的Node注册在一同一Domain下面。在这个Domain层面上各SCA的概念上也会有较大的差异,并且实现差异化也是相当大的。比如有些SCA框架还引入了软负载均衡,服务引用的自动识别更新等一系列的高级特性。

 

     服务化也是一种思想与方法学,通过这些思想与方法学去只指导我们如何去设计出健壮、可持续扩展的软件体系结构。

 
分享到:
评论
2 楼 freeway2000 2011-11-09  
lgstarzkhl 写道
你们SCA是自己构建还是用开源的?

你可以去看看tuscany或dubbo,我们是用的dubbo
1 楼 lgstarzkhl 2011-10-11  
你们SCA是自己构建还是用开源的?

相关推荐

Global site tag (gtag.js) - Google Analytics