본문 바로가기

IoT (Internet of Things)/AllSeen Alliance

AllJoyn의 High-Level System Architecture (1)



참고: https://allseenalliance.org/developers/learn/core/standard-core


High-Level System Architecture


먼저 Clients, Services 그리고 Peers의 아키텍쳐에 대해서 알아보자.

아래와 같이 아키텍쳐는 구성되어 있다.




System and Language Bindings (optional)
The AllJoyn system is written in C++, so for users of this language, no bindings are required. However, for users of other languages, such as Java or JavaScript, a relatively thin translation layer called a language binding is provided

http://sound79.tistory.com/admin/entry/post/

alljoyn은 기본적으로 C++로 구현이 되어 있다. 그러므로 상위 어플리케이션을 C++로 구현을 하면 상관이 없지만 Java와 같이 다른 언어로 구현을 해야 한다면 Binding이 필요하다. 아무래도 alljoyn 개발은 C++이 지원되면 환경이라면 C++로 하는것이 좋을 듯 하다.


Helper
The system and language bindings are built on a layer of helper objects which are designed to make common operations in the AllJoyn system easier


시스템 내부적으로는 당연히 Common한 동작 및 구현으로 되어 있다. 만약 Jave를 이용한다면 이 Helper와 같은 레이어를 이용하여 내부 시스템에 접근을 하여야 한다.


It is possible to use much of the AllJoyn system without using these helpers; however, their use is encouraged since it provides another level of abstract interface.



Bus 관련 Layer

Bus 관련한 Layer에 Bus Attachment, Proxy Bus Object, Bus Object, AllJoyn Bus 그리고 D-Bus가 있다. AllJoyn에서 Bus는 중요한 개념이다. 여기서는 간단하게 설명하고 이후에 좀더 상세하게 다루는 것이 좀더 이해하기 쉽지 않을까 합니다.


* The most basic abstraction of the AllJoyn system is the AllJoyn bus


즉 AllJoyn의 가장 핵심적인 부분에 AllJoyn Bus의 개념이 들어가 있다고 보면 되지 않을까 한다.



Messaging and Routing


This is an abstract communication endpoint from the perspective of the networking code

모든 데이터는  From Endpoint to another Endpoint 이다. 즉 Endpoint와 Endpoint와 통신을 한다고 생각하면 된다. Endpoint라는 개념은 정말 다양하게 사용되는 듯 하다. 하지만 확실한 것은 어떤 시스템, 모듈 혹은 Cocept에 대한 단일한 통로라고 생각하면 될 듯 하다.


This is the home of the functionality that marshals and unmarshals parameters and return values into messages that are sent across the bus.


아마 어떤 Object 형식을 XML과 같은 데이터 포맷으로 상호 변경하지 않을까 한다. 좀 더 자세한 내용은 소스를 좀더 분석해보고 나서야 알 수 있을 듯 하다.



Endpoints


Endpoints are specializations of transport mechanism-specific entities called transports, which provide basic networking functionality. In the case of a client, service, or peer, the only network transport used is the local transport. This is a local interprocess communication link to the local AllJoyn bus router. In Linux-based systems, this is a Unix-domain socket connection, and in Windows-based systems this is a TCP connection to the local router.


즉 네트워크 기능을 제공하는 내부 인터프로세스의 링크라고 보면 될듯 하다.


Local Network Transport


윗부분에서 설명하던 개념의 부족한 부분을 계속 아래에서 덧붙히는 형태인 듯 합니다만...

In Linux-based systems, this is a Unix-domain socket connection, and in Windows-based systems this is a TCP connection to the local router.


OS Abstraction Layer


The AllJoyn framework provides an OS abstraction layer to provide a platform on which the rest of the system is built, and at the lowest level is the native system.


당연한 애기이지만 특정 OS에 종속된다는 것은 IoT를 위한 프레임워크라는 특성을 잃어버리는 것과 마찬가지이다. 그러므로 특정 OS에 편협하지 않기 위하여, OS를 추상화 시키는 레이어가 필요하다.


Native System


기본적으로 Linux, Windows를 지원한다고 보면 된다. 좀더 구체적으로는...

Android, Darwin, Linux, OpenWRT, Windows, etc 이다...

좀더 찾아보니 RTOS, Embedded OS도 지원을 한다고는 하나?.... 그리고 iOS, MAC OSX까지 지원을 한다고는 문서에 나와 있으나??? 흠..