`
javaboy2006
  • 浏览: 186300 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

尝试给SOFA下的一个定义

    博客分类:
  • java
阅读更多
    OSGI:服务与组件(Components & Services)

    关键理念是组件与服务(Components & Services),Developing with OSGi technology means developing bundles: the OSGi components.(摘自:http://www.osgi.org/About/WhyOSGi)。

    直观点来理解,我们开发的一个基于OSGI的系统(如settleprod),里面的每一个工程都是一个component。每一个component实现并注册自己的services,而这些services将会被其他的component来引用。

    最后,这些component在部署的时候都会打成一个jar包,每个jar包里面都会有描述自己的一个MF文件,比如下面就是sofa-platform-common-1.2.jar这个包的一个MF文件,在META-INF文件夹下:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: xi.hux
Build-Jdk: 1.5.0_08
Bundle-ManifestVersion: 2
Bundle-Name: Alipay SOFA Platform common
Bundle-SymbolicName: com.alipay.sofa.platform.common;singleton:=true
Bundle-Version: 1.0.0
Bundle-Vendor: Alipay
Eclipse-LazyStart: false
Spring-Parent: org.mule.esb


    关键的信息是:Bundle-SymbolicName: com.alipay.sofa.platform.common,这个事标示这个组件的名字,其他组件要引用这个组件的服务的话会用到这个名字。

    现在业界内对OSGI的实现比较典型的就是Equinox,这个其实就是我们每天正在使用的Eclipse的内核,现在版本Eclipse就是基于实现了OSGI的这个Equinox平台的。我们现在不需要下载任何第三方jar包就可以在eclipse上开发OSGI组件了。

    另附一篇JavaWorld上的 Hello, OSGi, Part 1: Bundles for beginners,算是一个OSGI的“hello world”,手把手教你怎么样直接使用Equinox开发OSGI bundle。

    Spring:反转控制IoC

    这个没什么好说的,看过《spring in action》一遍就能很容易的上手Sping了,没书的话直接就去看documentation也无所谓。关键理念就是IoC,把每一个业务实现的类都管理成bean,再使用反转控制来控制他们之间的依赖关系,然后就是玩玩bean的生命周期之类的。
   
    Spring Dynamic Module:OSGI服务(Services)的Spring实现

    关注OSGI的话都会了解到Spring那边有一个Spring Dynamic Module的东西,Spring动态模块。Spring Dynamic Module在原来的Spring的基础上增加了3个重要的jar包(可能由于版本不同,报名也变了):


org.springframework.osgi.bundle.extender
org.springframework.osgi.bundle.core
org.springframework.osgi.bundle.io
    事实上,这三个jar包在OSGI里面都是一个组件,不同的是org.springframework.osgi.bundle.extender这个组件,他会监听其他组件的部署,然后在其他组件部署后去到该组件jar下查看是否有名为”spring”的目录,如果有的话则这个组件对他而言就是一个 Spring Enabled的组件,然后他就会为该组件创建一个Spring的应用上下文(Application Context),读取在”spring”目录下面的xml配置文件,并创建xml配置文件里面定义的所有bean,配置他们之间的依赖。如果他在这些配置文件中发现有<osgi-service ref=”aBean” interface=”aInterface”>的定义,则会在一个Service Repository(服务库)上注册这个服务,而且服务的索引key为interface指定的接口,服务的实现为ref指定的在组件内的一个bean。如果他在这些配置文件中发现有<osgi-reference id=”name” interface=”bInterface”>的定义,则会去Service Repositry查找以interface标识的服务,查看是否有这个服务的实现,并在组件内的应用上下文注册成为一个bean,供组件内的其他 bean使用。

    这就是服务的注册和服务的引入。他与Equinox实现的服务的注册和服务的引入之间的不同就是,Equinox的实现是通过编程的API来实现的,你要注册服务需要自己在程序内调用一个context.registerService的API,把自己的服务注册上去,服务的引入也需要调用一个 getService的API来获得;而Spring Dynamic Module里面的实现方式是沿用了Spring的理念,IoC,服务的注册和获取不用你在程序里面来完成,只需要你在XML配置文件中说明就好了,然后 Spring会为你注册和引用。

    作为介绍OSGI的同一系列文章,Hello, OSGi, Part 2: Introduction to Spring Dynamic Modules也介绍了OSGI的Spring实现,同样是手把手的教程。

    Nuxeo Runtime:主机适配(Host Adapt:OSGI组件的实现)和扩展(Extension)

    我们编写的一个个工程很容易在Equinox里面就是一个组件,但是在其他没有完全实现OSGI技术(比如Jboss)的平台上面,怎么让我们的工程变成组件呢?Nuxeo Runtime就是做的这个功能。比如,我们的一个工程,最后打包成jar包,然后部署到Jboss上面,最后是成为了一个MBean,而不是一个 OSGI的组件。但是,如果我们通过Nuxeo Runtime的适配器来部署到JBoss上,在Jboss上仍然是一个MBean,但是这个MBean也是一个OSGI组件,那上面介绍的OSGI的技术就可以实现了。换种方式说,就是NXRuntime使用OSGI组件模型,并利用一堆Adapters来把这些组件部署到不同的Java主机平台上面,比如Jboss,Geronimo(另一种Java EE服务器)。

    另外,Nuxeo Runtime除了实现了OSGI组件技术外,还实现了一种扩展机制。事实上,看一下有关OSGI架构的介绍,OSGI 并没有关于扩展的定义,扩展是Nuxeo Runtime借鉴Eclipse插件技术增加的功能。有接触过Eclipse插件开发的话,就会知道Eclipse插件开发无非就是为上面的扩展点(Extension Point)和扩展(Extension),比如你想新增加一个View,用来显示当前编辑器上面都有哪些TODO标签,那么只需开发一个插件,这个插件有一个扩展,该扩展会去扩展Eclipse上面id为org.eclipse.ui.views的扩展点。那么Nuxeo Runtime也实现了这种扩展机制,让你很容易的为扩展点编写扩展,比如,在组件名为Bundle-SymbolicName: com.alipay.sofa.platform.event的一个支付宝组件里面,定义了一个扩展点serviceExport:

    <osgi:extension-point ref=”sofaPlatformServiceExporter” name=”serviceExport”>
        <osgi:object />
    </osgi:extension-point>  

    这个扩展点是用于暴露Web Service的,以后我们需要编写Web Service的时候,只需要扩展这个扩展点,把自己的接口和实现指明就可以了,如下:

    <osgi:extension bean=”sofaPlatformServiceExporter” point=”serviceExport”>
        <osgi:content>
            <serviceExport>
                <serviceInterface>com.alipay.settleprod.product.cod.facade.LogisticsResolveService</serviceInterface>
                <serviceBean>logisticsResolveService</serviceBean>
            </serviceExport>
        </osgi:content>
    </osgi:extension>

    这样使得我们的组件很灵活,以后要增加web service和修改web service时只需要增加插件,编写扩展即可。如果想了解多点有关扩展和扩展点,可以直接google下eclipse插件开发,也可以直接查看支付宝里面扩展和扩展点是如何实现的。

    Sofa:Spring Dynamic Module+Nuxeo Runtime实现OSGI的整套技术

    现在感觉对Sofa的理解比较清晰了,尝试给Sofa一个说法就是“使用Nuxeo Runtime实现了OSGI组件模型,利用Spring Dynamic Module实现组件服务机制,并且再利用Nuxeo Runtime实现了扩展机制”的一整套技术组合。其优点:

模块化,模块边界清晰,易于维护。
服务化,服务的注册和依赖都很方便。
易于扩展,很好的定义扩展点和扩展。
    这只是我的一种现在的理解,可能还有很大偏差,但是觉得大概就是这些了。当然,整个贯穿其中的还有Spring的IoC机制,让我们能很快速的就构建我们的服务,编写扩展和扩展点。还有很多ESB技术,Web Service技术等等,但是这些技术都是依托于上面所说的那些技术的,比如,使用Mule实现的ESB,在支付宝里面的地位是就是一个普通组件(记得是在近卫军时上课时我提的一个问题的答案),但是他不是业务组件,是架构组件。还有Xfire实现的web service,都是一样的。
分享到:
评论

相关推荐

    SOFA微服务开发框架介绍.pdf

    4. 组件仓库:SOFA 的组件仓库提供了一个统一的存储空间,以便复用已经开发的组件。 SOFA 的技术蓝图包括: 1. 提交服务(SRS):提供了一个统一的提交服务,以便开发者可以轻松地提交代码。 2. 下载服务(SDS):...

    rpc-sofa-boot-starter将SOFARPC功能集成到SOFABoot中

    SOFABoot 是一个完全兼容 SpringBoot 的开发框架,rpc-sofa-boot-starter 的作用就是将 SOFARPC 功能集成到 SOFABoot 中。rpc-sofa-boot-starter 提供了统一方便的编程界面、配置方式,同时提供了 SOFABoot 的健康...

    SOFA库(含fortan和c版程序)

    SOFA库,全称为"Software for Fundamental Astronomy",是由国际天文学联合会(IAU)提供的一个重要的开源软件库。这个库包含了用于天文计算的各种函数,旨在为科学家、工程师以及任何需要进行精确天文计算的用户...

    sofa-rpc,sofarpc是一个高性能、高扩展性、生产级的java rpc框架。.zip

    总的来说,SOFA-RPC是一个强大且灵活的RPC框架,适合构建复杂的企业级分布式系统。其丰富的功能和优秀的性能使其成为开发者的有力工具,帮助他们轻松地管理和维护大规模的服务网络。如果你正在寻找一个可靠的Java ...

    sofa-rpc demo

    本示例是一个基于 SpringBoot 的 SOFA RPC 实践项目,旨在帮助开发者快速理解和使用 SOFA RPC。下面我们将深入探讨 SOFA RPC 的核心概念和关键特性,并结合这个"sofa-rpc demo"来解析其实现过程。 首先,我们来了解...

    天体测量软件SOFA

    基础天文标准库(Standards Of Fundamental Astronomy,SOFA)是IAU赞助的项目,旨在为天文计算提供权威有效的算法程序和常数数值。1994年的IAU大会上,IAU天文标准工作组 提出了创立SOFA的提案。1997年,SOFA评审...

    SOFA框架简介

    每个Bundle都是一个独立的JAR包,拥有自己的类路径,并能明确指定哪些Java包和类可以被导出,以及需要导入其他Bundle的哪些类和包,从而清晰地定义了Bundle间的依赖关系。 - **执行环境层**:定义了特定执行环境...

    IAU_SOFA_LIB

    IAU(International Astronomical Union,国际天文学联合会)SOFA(Standards of Fundamental Astronomy,基础天文学标准)库是一个广泛使用的软件库,旨在为天文学、地球物理学以及相关领域的研究和应用提供精确的...

    SOFABoot是一个增强SpringBoot并与之完全兼容的框架提供了ReadinessCheck类隔离等

    SOFABoot是一个由蚂蚁金服推出的增强型Spring Boot框架,其设计目标是为大型分布式系统的开发提供更加高效、稳定和可扩展的解决方案。这个框架在保持与Spring Boot完全兼容的同时,引入了一系列特色功能,旨在提升...

    SOFARPC一个高性能高扩展性的生产级JavaRPC框架

    SOFARPC 是一个高可扩展性、高性能、生产级的 Java RPC 框架。在蚂蚁金服 SOFARPC 已经经历了十多年及五代版本的发展。SOFARPC 致力于简化应用之间的 RPC 调用,为应用提供方便透明、稳定高效的点对点远程服务调用...

    SOFA架构DEMO

    SOFA架构DEMO是一个用于演示和学习分布式系统开发的实例,它基于阿里巴巴开源的SOFA(Scalable Open Financial Architecture)框架。SOFA是专为金融级应用设计的一套高可用、高性能、可扩展的分布式服务框架。在这个...

    sofa-rpc,SOFARPC是一种高性能、高扩展性、生产级的Java RPC框架。.zip

    压缩包中的"sofa-rpc-master"可能包含了SOFARPC的源代码仓库,这对于开发者来说是一个很好的学习资源。通过阅读和研究源码,可以深入了解SOFARPC的内部实现,包括服务调用流程、服务治理策略、以及如何定制和扩展...

    sofa 天体侧量软件手册

    基础天文标准库(Standards Of Fundamental Astronomy,SOFA)是IAU赞助的项目,旨在为天文计算提供权威有效的算法程序和常数数值。1994年的IAU大会上,IAU天文标准工作组 提出了创立SOFA的提案。1997年,SOFA评审...

    sofa-boot-guides.zip sofaboot的源码与使用demo 策略模式的用法

    例如,通过定义一个启动策略接口,可以有不同的启动策略类(如快速启动、安全启动等),上下文(即SofaBoot框架)在启动应用时,可以根据配置选择合适的启动策略进行执行。 使用策略模式有以下几个主要优点: 1. **...

    Android代码-Sofa

    [] ...Just install this comfy sofa into your application: public class MainApplication extends Application { @Override public void onCreate

    Android代码-sofa-rpc

    SOFARPC 是一个高可扩展性、高性能、生产级的 Java RPC 框架。在蚂蚁金服 SOFARPC 已经经历了十多年及五代版本的发展。SOFARPC 致力于简化应用之间的 RPC 调用,为应用提供方便透明、稳定高效的点对点远程服务调用...

    sofa框架介绍

    ### SOFA框架介绍 #### SOA架构概述 SOA(Service-Oriented Architecture,面向服务的架构)是一种软件设计的方法...无论是对于构建复杂的金融系统还是其他类型的大型分布式应用,SOFA框架都是一个非常有价值的选择。

    sofa-bolt,sofabolt是一个基于netty的轻量级、易用性和高性能远程处理框架。.zip

    SOFA Bolt 是阿里巴巴开源的一款基于 Netty 实现的轻量级、易用且高性能的远程处理框架。这款框架的设计目标是为分布式系统提供简单、高效的通信能力,适用于微服务架构中的服务间通信。在深入理解 SOFA Bolt 之前,...

    十年风雨!看蚂蚁金服SOFA 分布式架构演进.docx

    SOFA 的模块化方案给每一个模块都加上了一个独立的 Spring 上下文,默认的情况下,一个模块不能直接引用另一个模块的 Bean。当需要引用另一个模块的 Bean 的时候,需要在代码中通过类似于 RPC 的服务发布和引用来...

Global site tag (gtag.js) - Google Analytics