您的位置:首页 > 其它

ALLJOYN® THIN CORE

2015-10-14 17:57 246 查看
原文连接:https://allseenalliance.org/developers/learn/core/thin-core

ALLJOYN® THIN CORE

Overview

AllJoyn是一个开放源代码的软件系统,提供跨越不同设备类别运行的分布式应用程序的环境,并强调移动性,安全性和动态配置。 AllJoyn是“平台中立”,这意味着它被设计为尽可能独立于它所在设备上的操作系统,硬件以及软件;做到和操作系统无关,和硬件无关,和软件无关。

AllJoyn标准核心库(AJSCL)的组件被设计为可以运行在Microsoft Windows,Linux,Android,iOS,OS X,OpenWRT,或者作为互联网浏览器的插件。所有这些软件系统的一个共同特点是:它们运行在通用计算机上。通用计算机通常具有可观的内存,可利用的能量,计算能力,以及支持多进程/多线程和多语言的操作系统

另一方面,嵌入式系统被设计成提供特定功能,并且运行在较大设备中的微控制器上。由于嵌入式系统只需要执行特定功能或少量功能,工程师可以优化他们来降低产品的尺寸和成本,优化的有段通常包括:限制存储器大小,处理器速度,可用功率,外围设备,用户接口,或所有上述的。 AllJoyn精简核心库(AJTCL:AllJoyn Thin Core Library)被设计为让嵌入式系统也能够得益于AllJoyn的分布式编程环境。

由于AJTCL运行的操作环境可能非常受限,因此运行在嵌入系统的AllJoyn组件必须能够适应这种限制。这意味着我们不能在AllJoyn路由器拥有很多bundling(需要多线程),不能有很多网络连接,没有大量的RAM和ROM可供使用。我们无法运行一个包括可选语言绑定的面向对象编程环境。正因为如此,AJTCL仅包括使用C语言写的bus attachment(参见Introduction
to the AllJoyn Framework
)。数据结构对应于接口,方法,信号,属性;总线对象也进行大量的空间优化,因此开发人员的API也和AllJoyn标准核心库大不相同。

虽然API存在不同,但AJSCL和AJTCL的主要概念是相同的。它们可能是采用了更紧凑的形式,或者运行在远程一台更强大的机器上。

注: 当我们提到AllJoyn标准核心库(AJSCL)时, 我们会明确给出这些运行在通用计算机上的组件版本

Conceptual Model

如前所述,AJTCL和AJSCL的高级抽象是相同的,在Introduction to the AllJoyn Framework中对这些高层抽象已经进行了描述。我们假设读者在概念概述部分已经熟悉该文中介绍的抽象,所以这里只讲述AJTCL架构的差异部分。

AllJoyn Thin Core Library is stillAllJoyn

必须要明白:AJTCL是AllJoyn框架的一部分。精简核心库(AllJoyn Thin Core Library)和AJSCL是完全可以互操作的。由于AllJoyn网线协议(AllJoyn network wire protocol)在这两个库中都完整实现,因此AJSCL可以完全不用关心它正在和AJTCL进行交互这样一个事实;反之亦然。

回想AllJoyn框架简介(Introduction to the AllJoyn Framework),一个AllJoyn分布式总线是由驻留在物理上独立的计算机上的多个总线段组成。






Figure: AllJoyn distributed bus

每个总线分段位于一个给定的主机上(如上图标注为Host A和Host B的虚线方框),每个总线段由一个AllJoyn路由器(图中标注为D的气泡)来实现。可能有多个bus attachments在一个主机上,每一个连接到一个本地的守护程序(由六边形表示)。这些六边形细化为服务(S)或客户端(C)。

由于运行AJTCL的主机通常没有足够的资源运行路由器,因此AllJoyn架构做了一下变动:连接到分布式总线的精简核心库借用运行在另一台主机上的AllJoyn路由器。



Figure: AllJoyn distributed bus with thin core libraries

注意,嵌入式系统A和嵌入式系统B与主机B位于不同的设备上。主机B所在的设备负责管理其上的分布式总线段的路由器。运行AJTCL的嵌入式系统和托管总线段的路由器之间通过TCP协议(Transmission Control Protocol)建立连接。

嵌入式系统和路由器之间的网络通信是AllJoyn消息,他们实现总线方法,总线信号,以及流过各自会话的属性,如 Introduction to the AllJoyn Framework所述。

有时希望允许AJTCL设备连接到临近的任何被发现的旧路由器上,并借用它。我们把这些称为无信任关系(从路由器的角度)。有时需要只允许特定的AJTCL设备连接到特定的路由器,我们把这些为信任关系(同样从路由器角度)。

These relationships areestablished using a discovery and connection process that is conceptuallysimilar to the discovery and connection process of clients and services. AnAllJoyn router conveys its willingness to host a given collection of AJTCLdevices by
advertising a well-known name. This advertisement may be driveneither by router configuration or by an advertisement specifically made by anAllJoyn component. When a connection attempt is made to any router as a resultof a discovery event, a router expecting
trusted relationships may choose tochallenge a particular Thin Core Library (or impersonator of a Thin CoreLibrary) to produce a credential. In the case of an untrusted relationship, therouter may choose to simply allow any connection attempt. In the case
of anuntrusted connection, the involved router will not allow the Thin Library toperform any operations that will cause sessions to be established withcomponents off the local device (and which, therefore, correspond to a"service that costs you money").这些关系通过发现和连接处理来建立,在概念上类似于客户/服务的发现和连接建立过程。AllJoyn路由器通过广播一个知名名称(a
well-known name)来告诉主机它期望的AJTCL设备集合。这则通告可以通过路由器配置,也可以通过AllJoyn组件专门制作的广告来驱动。发现阶段后会开始尝试连接到路由器,如果路由器希望使用信任关系的话,它就会向特定的精简核心库(或精简核心库的模仿)要求认证凭证。如果是不受信任关系,路由器允许任何的连接尝试。在不受信任连接的情况下,路由器将不允许精简核心库执行任何操作去建立和本地设备组件的会话(因此相当于“付费服务” )。

AJTL设备的连接过程可以分为三个阶段:

· Discovery phase/发现阶段
· Connection phase/连接阶段
· Authentication phase/认证阶段

发现阶段工作就像Introduction to the AllJoyn Framework中描述的服务发布和发现一样,不过有两个例外。第一个例外是:进行AJTL发现的广播,是典型的“安静”广播(quiet advertisements)。也就是说路由器不会无偿发送广播。

第二个例外是,给“安静”广播的响应也是悄悄地发送的, 我们称它为安静响应(quiet responses)。这意味着响应是单播给请求者的,而不是采用多播,因为多播是“活动”广告("active" advertisements)。这样变化的主要原因是为了让那些没有完全实现组播接收的嵌入式设备接收加入到AllJoyn分布式系统中。

What is an AllJoyn Thin Core Librarydevice?

典型的AJTCL设备在概念上类似于无线传感器网络(WSN:Wireless Sensor Network)中的一个传感器节点(SN:Sensor Node)。传感器节点通常是传感器/致动器(actuators),它们体积小,并受限于能源供应,计算能力,存储器,以及其它资源。它们能够感测周围环境,与外界进行事件通信,并且可以基于内部处理或外部事件触发一组动作。这是一个非常广泛的定义,下面罗列一小部分适合这个定义的设备采样:

· Light switches/灯开关
· Thermostats/恒温器
· Air conditioners/空调
· Vent dampers/通风口挡板
· Smoke detectors/烟雾感应器
· Motion detectors/移动侦测感应器
· Humidity detectors/湿度探测器
· Microphones/麦克风
· Speakers/音箱
· Earphones/耳机
· Doors/门
· Doorbells/门铃
· Ovens/烘炉
· Refrigerators/冰箱
· Toasters/烤面包机
现在有大量讨论无线传感器网络(WSN)文献的。这些无线传感器网络通常采用自组织多跳临时无线网络,安全性不是它们特别关注的; AllJoyn系统和它们不同,AllJoyn框架一般基于Wi-Fi网络的基础设施模式(infrastructure-mode),加入网络的设备必须要进行关联和验证。为了实现安全地加入到Wi-Fi网络,AJTCL使用一种称为“入职”("onboarding")的过程。入职服务框架(Onboarding serviceframework)允许薄核心库设备(通常没有友好的用户界面)获得足够多的目的网络的信息,以完成加入该网络所需的准入和认证过程。入职培训服务框架在专门文件中有详细的定义。

作为一个传感器节点,AJTCL设备通常实现一个AllJoyn层面上的服务。它使用连接的硬件检测周围环境,并通过AllJoyn信号告知事件给外部世界。如Introduction to the AllJoyn Framework中讨论的,它也可以执行一个动作,作为对外部事件的响应;通过侦听来自其它设备的信号,或响应AllJoyn客户的远程方法调用。

Thin Core LibraryArchitecture

由于AJTCL通常运行在资源受限设备上,因此没有像AJSCL运行的通用计算机上那样奢侈的资源。

AJSCL或服务过程的分层架构如下所示.






Figure: AJSCL layering

参见 Introduction to the AllJoyn Framework 获得这些分层的更多信息.

The important observation to makeat this point is that each AllJoyn client or service reproduces this layeringin every process representing an AllJoyn application.

每个支持AJSCL的主机至少需要有一个AllJoyn路由器. 这个路由器可以驻留在它自己的进程中(standalone router), 或者在捆绑路由器的情况下,它可以和某个应用公用一个程序. AJSCL路由器的分层架构如下所示.



Figure: AJSCL router layering

请注意,路由器增加了对路由器间路由信息的支持,同时可以使用多种网络传输机制,例如Wi-Fi直连。这是一个显著量的功能,随之而来的是对计算功率,能量,和内存的客观需求。

显然,不可能在资源受限系统上运行这一大堆代码,因此AJTCL最大限度地减少这些代码在一个给定设备上的需求量。它将基本环境限制到最小的C-only运行时,并借用其它设备为它来执行路由器作用。对比AJSCL,如下图所示,AJTCL摒弃了AJSCL中大部分的开销。



Figure: AJTCL layering

AJTCL只公开所需最少的API给总线连接(bus attachment),并直接公开AllJoyn消息接口,替代提供帮助功能。

AJTCL消息传输层直接使用UDP和TCP,而不使用AJSCL中的抽象传输机制。有一个非常薄的porting层来抽象少量所需的原生系统功能,整个包用C语言编写,并着眼于最大限度地减少代码量。因为这些优化,一个AJTCL系统的运行内存可以低至25Kbytes,而捆绑路由器和C ++客户端或服务组合可能需要十倍内存,和Java语言版本可能需要多达40倍。

Tying it All Together

为了让讨论更具体,这里列出两个分布式系统的示例

· 最小系统:运行在智能手机上的AllJoyn应用和AJTCL设备进行对话。该示例阐述可信任路由器关系
· 复杂系统:一个运行在无线路由器上的AllJoyn路由器.
注:通常情况下,这个无线路由器是运行OpenWRT的路由器,它预装了AllJoyn路由器。该路由器接受来精简核心库的不受信任连接,它已经加入到Wi-Fi网络。

少数AJTCL设备连接到路由器,充当一个基于AllJoyn的无线传感器网络中的传感器节点,一个通用计算机负责执行数据融合功能。

注:在无线传感器网络中数据融合是指一个过程,其中的一些性能优异的节点收集来自传感器节点的结果,然后整合或者“融合”它们,然后根据这些数据依照某种规则做出判断,执行一个动作。

A minimalist Thin Core Library system

AJTCL最小系统的一个小例子由一个精简核心库设备和一个运行AJSCL的主机组成。 AJSCL提供一个精简核心库可连接的AllJoyn路由器,还提供了一个运行精简核心库应用程序的平台。如上所述,精简核心库通常作为一种传感器节点,发送数据给运行在主机上的应用程序。应用程序通常以某种方式来处理数据,并下发命令给传感器来操纵它的环境。

一个可能真实存在的简单系统实例:墙壁恒温器控制火炉,控制应用运行在Android设备上。Android设备运行AJSCL,而墙面温控器运行AJTCL。



Figure: Minimalist example system

在这个例子中,一个要求是:只有运行在Android设备上的恒温器控制程序才能控制墙壁恒温器。

由于示例要求:恒温器只能有Android设备控制,所以恒温器只能连接它到连接在应用程序上的那个AllJoyn路由器。这意味着,Android应用应当和AllJoyn路由器捆绑在一起,只有绑定后才能通告给精简核心库将它们作为一个路由器使用。这种安排导致AJTCL和路由器/应用程序对之间建立信任关系。

然后应用程序要求绑定的路由器静悄悄地广播一个AJTCL已知的well-known name(例如:com.company.BusNode),路由器后面会以安静(单播)的形式响应名称发现请求。精简核心库会在关联的网络前缀(com.company.BusNode)上执行发现请求。



Figure: Thin Core Library router discovery

当路由器收到对它之前广播的名字的查询请求,它会做出回应,告知请求的名称就在这个路由器上。 AJTCL将尝试连接到做出回应的路由器。



Figure: Thin Core Library connection attempt

此时逻辑AllJoyn总线已经形成,应用程序和精简核心库服务已经连上运行在Android设备上绑定路由器。使用气泡图来表示这个系统,它显示AllJoyn路由器是否有已经连上的服务和客户端。



Figure: Thin Core Library system example

此时,AJTCL已经连接到与应用程序绑定的路由器,但无论是应用还是精简核心库都不知道对方的存在。通常这个时候,AJTCL会要求一个知名总线名称,并实例化AllJoyn意义上的服务。精简核心库将创建一个会话端口,并使用精简核心库API广播一个well-known name。该well-known name和绑定路由器通告的well-known name不同,它对应的是精简核心库和应用程序之间的客户端/服务关系,而不是路由器和精简核心库之间的关系。为了这个well-known name,运行在Android设备上的应用程序随后将执行服务发现。



Figure:: Service discovery with the Thin Core Library

当AJTCL提供的服务(S)被运行在Android设备上的客户端(C)发现后,客户端会加入有服务创建的会话。



Figure: Android device joins session with service on the Thin Core Library

此时,Android设备上运行的应用程序已经可以访问AJTCL的任何AllJoyn服务。它可以选择由服务发出的信号被通知,例如可能是包括当前温度的周期信号。该应用程序可以提供一个用户界面,让用户输入期望的温度,然后使用AllJoyn远程方法调用发送温度给AJTCL。接收到方法调用后,AJTCL中继该请求给火炉,设置成用户期望的温度。

精简核心库上使用的API和AJSCL或服务是不同的;然而由于线协议(wire protocol)在这两种情况下是相同的,所以连接(AJSCL或AJTCL)另一侧部件的详情是不可见的。在这一点上,它们都是AllJoyn,对于要说明的意图和目的,包括AJTCLs的气泡图和AllJoyn框架简介中的气泡图是无法区分的。

A Thin Core Library-based wireless sensornetwork

这个例子组成一个非常基本的家庭管理系统。假设无线接入点是一个运行OpenWRT的无线路由器,它预装了AllJoyn路由器,允许不可信的精简核心库连接。这将允许参与到系统中的所有AJTCLs连接到AllJoyn路由器的守护程序。这个网络中的精简核心库设备可以是温度传感器,运动检测器,灯光开关控制器,热水器恒温控制器,火炉或空调系统的温度控制器。

如上所述,数据融合功能的示例网络由运行在带显示器的通用计算机上的一个应用程序来实现。在网络中不一定要求专用的通用计算机,也可以以分布式方式来实现数据融合;但是如果网络中有该通用计算机存在的话,我们就可以更好说明AJSCL和精简核心库设备是如何互操作的。“融合”(fuser)显示可以安装在家里的墙壁上,或者也可能是家里的某个PC显示器。显示器可以提供相应的用户界面给各个房间的温度计和恒温器,或虚拟的电灯开关,或者移动检测器。实际的数据融合函数算法将决定何时打开或关闭灯,和何时进行室内加热,或者开/关空调,或何时把热水器的水温度调高或调低。

OpenWRT路由器如下图所示:



Figure: OpenWRT router hosting a standalone AllJoyn router daemon

该路由器有一个独立AllJoyn路由器守护程序,图上标示为粗体水平线,表示它是AllJoyn分布式软件总线的一个分段。

某个AllJoyn服务可能驻留在路由器的总线分段上,它提供了配置AllJoyn路由器和预装AllJoyn路由器使用AllJoyn框架的方法。此外,还有一些空AJTCLs槽(slot)表示到AJTCL的不可信连接。由于这是一个通用AllJoyn路由器,相应的软件总线可以扩展到其它总线分段,以形成分布式总线。

如前一节中所述,AJTCL设备会执行发现流程,以搜索它可以连接的路由器。由于这里说明的是不受信任关系,在openwrt路由器上运行的AllJoyn路由器将被配置为悄悄地广告它的通用名称,可能是org.alljoyn.BusNode,含蓄地表示该路由器是AllJoyn分布式总线上的一个节点,期望主管精简核心库。

分布式网络中的传感器节点AJTCLs通过入职(onboarding)过程加入到无线网络。在此过程中,它们可以被分配所谓一个有意义的名称,用来说明它们在家里的情况。例如,一个灯泡控制器(开/关/暗淡)可以被定名为“厨房”,另一个名为“起居室”。相应的精简核心库节点开始发现分配给他们的路由器(可能是org.alljoyn.BusNode),然后将尝试进行连接。由于openwrt的路由器上预装的AllJoyn路由器的槽(slot)大概是不可信的,因此精简核心库的连接都会被接受。



Figure: AJTCL nodes connected to the OpenWRT AllJoyn router

一旦精简核心库应用连接到在openwrt上AllJoyn的路由器实现的总线分段,就开始宣传自己相应的服务。可能此时也有一个家居控制系统加入到无线路由器提供的无线网络中。此设备将执行服务发现,并寻找系统中由精简核心库提供的服务。



Figure: OpenWRT router, Thin Core Libraries, and home control system

一旦家居控制系统发现某个AJTCLs的服务广告,它会尝试加入到和发现的精简核心库的会话。这将导致路由器上的总线分段和家庭控制系统的总线分段合并成一个单一的虚拟分布式总线。



Figure: AllJoyn distributed software bus

当合并的总线完全形成,连接到总线上的设备成为AllJoyn客户端或AllJoyn服务。AllJoyn精简核心库的传感器和命令执行器(actuators)都是嵌入式设备,它们通过TCP连接到AllJoyn路由器,这个事实细节不会暴露给分布式总线上的其它部件,它们也没必要关注这些细节。家庭控制系统也许是用Java编写,运行在使用Android系统的通用计算机上,这个事实也不会暴露给分布式总线上的其它部件。AllJoyn客户端和服务调用和执行远程方法调用,以及发射和接收信号。

现在对数据融合节点运行算法更清晰的说明一下。例如,在分布式总线上发布的一个重要AllJoyn信号可能是“探测到一氧化碳”(
CARBON-MONOXIDE-DETECTED
)。此信号将由家居控制系统(数据融合器data fuser)接收,然后它可以发送一个远程方法调用给某一个执行器节点,告诉它打开通风换气扇(TURN-FAN_ON);它可能会发送一个远程方法调用给另一个执行器节点,要求它声音报警(
SOUND-ALARM
),同时它也可能发送短信给业主,让他们知道过量的一氧化碳已经在家里被发现。

家庭控制系统更现实的功能,如果没有人的情况(通过移动检测和每天的日程安排),可能会做一个远程方法调用去控制火炉, 降低家里的温度。家庭控制单元可以发送消息到给热水器告诉它降低工作时间时的水温或半夜时的水温;由于半夜时电费会比较便宜,它也可以在半夜时进行方法调用,调高水温,让洗碗机开始工作。

家庭控制系统响应的所有信号,进行的方法调用是完全独立于源和目标设备的类型和位置。

Summary

AllJoyn是一个旨在给部署在异构系统上的分布式应用提供一个框架的综合系统。AJTCL将嵌入式设备加入到AllJoyn分布式软件总线,并展示它们自己给系统的其余部分,同时将在这种异构系统通常困扰开发者的细节抽象出来。这种方法允许应用程序开发人员专注于他们的应用程序的内容,而不需要大量低层嵌入式系统或网络的经验。

AllJoyn系统被设计成作为一个整体一起工作,从各种类型组件构成的点对点(ad-hoc)系统所固有的阻抗失配中解脱出来。我们认为,和其他平台相比,AllJoyn系统可以使开发和部署分布式应用(包括嵌入式系统组件)更简单。

Learn More

To learn more about how to integrate the AllJoyn framework in yourdevelopment efforts, access the documentation and downloads available on the AllSeen Allianceweb
site
.

· Introductory guides -Describe AllJoyn technologies and concepts.
· Development guides -Provide guidelines to setting up the build environment and provide solutions tospecific programming problems, including code snippets and explanations.
· API references -Provide details for working with the AllJoyn source code and writingapplications in each supported programming language.
· Downloads - Softwaredevelopment kits (SDK) provide resources to help users build, modify, test, andexecute specific tasks.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: