2015年2月26日 dsthHUB 『DataSpiderインターナル...

39
DataSpiderインターナル "プラガブルアーキテクチャ"で 広がる可能性 株式会社アプレッソ 開発部 開発グループ リーダー 佐々木 健二 2015226dstn HUB

Transcript of 2015年2月26日 dsthHUB 『DataSpiderインターナル...

Page 1: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

DataSpiderインターナル"プラガブルアーキテクチャ"で

広がる可能性

株式会社アプレッソ開発部 開発グループ

リーダー佐々木 健二

2015年2月26日 dstn HUB

Page 2: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

自己紹介

• 佐々木健二

• 開発部に所属

• 趣味

– ランニング

• 毎年「Nippon IT チャリテイ駅伝」に出場

Page 3: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

754チーム中11位

Page 4: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

最近の業務

• サポート業務

• DataSpider保守開発

• DataSpider開発計画

• DataSpider SDK

• 営業支援、OEM開発支援

Page 5: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

アジェンダ

• プラガブルアーキテクチャについて

• プラガブルアーキテクチャの利点

• 拡張クラスローダ

• プラグインの起動プロセス

• SDKとは?

• SDKの未来

Page 6: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

プラガブルアーキテクチャについて

Page 7: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

プラガブルアーキテクチャとは?

• プラガブルとは…

– プラグイン(=部品)が抜き差し可能なこと

つまり、プラガブルアーキテクチャとはプラグインが抜き差し可能になっているアーキテクチャのこと

Page 8: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』
Page 9: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

DataSpiderServerにおけるプラグインとは?

• マネージャやアダプタのこと

– DataSpiderServerは、核となるカーネルと、数多くのプラグイン(マネージャ、アダプタなど)で構成されている

Page 10: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

DataSpiderServerのアーキテクチャ図

Java VM

カーネル

Web

Co

nta

iner

Trigger

Manager

DataProcessing

Component Manager

FileSystem

Manager

HT

TP

Trig

ger

File

Trig

ger

Sch

ed

ule

Trig

ger

FT

PTrig

ger

CS

V

Excel

DBFS

LFS

ExtLFS

DataProcessing

Connection Manager

Ora

cle

DataSpiderServer

マネージャ

Mail

Web

User

Manager

Global

Resources

Adapters

Converters

FT

P

Users

Groups

アダプタ

Page 11: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

カーネルとは?

• DataSpiderServerの中核部分

– マネージャの起動/停止、登録/削除を行っている

Page 12: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』
Page 13: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

マネージャとは?

• DataSpiderServerの各種機能をサービスとして提供しているモジュール

– ファイルシステムマネージャ• DataSpiderファイルシステムへのアクセスを提供

– Webコンテナ• Webアクセスの機能を提供

– ユーザマネージャ• ユーザ、グループ管理の機能を提供

【例】

Page 14: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

アダプタとは?

• 各種データソースに接続してデータの入出力を行うモジュール

– Excelアダプタ• Excelファイルのデータを読み書きする

– Oracleアダプタ• Oracleデータベースのデータを読み書きする

– Mailアダプタ• メールの送受信を行う

【例】

Page 15: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

プラグインの起動プロセス

Page 16: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

プラグインの構造

• プラグインは宣言部分と機能の実装に分離されている

宣言部分(プロパティファイル)

機能の実装(Java JAR)

プラグインのロードクラスや、種類、表示名、依存関係などを定義

フレームワークに従って、プラグインで提供する機能をJavaで実装

Page 17: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

プラグインの起動プロセス

• DataSpiderServer起動時に、プラグインのロード、初期化、サービスの開始を行う

1. プラグインのクラスをロード

2. プラグインを初期化

3. プラグインのサービスを開始

Page 18: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

プラグインのロード

02/23 19:16:40|INFO|ds.boot|DataSpider Serverを起動します。02/23 19:16:40|INFO|ds.boot|システムのロードを行います。システム名[DataSpider Server]

02/23 19:16:41|INFO|ds.boot|システムのロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュールのロードを行います。02/23 19:16:41|INFO|ds.boot|モジュール[Web Container]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[Session Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[SystemModule Container]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[AccessLog Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[Database Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[File Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[License Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[Document Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[Application Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[Calendar Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[Callback Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[Command Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[Environment Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[User Manager]のロードに成功しました。

プラグインの宣言部分の読み込み、クラスのロード、マネージャの設定値の初期化などを行う

server.log

Page 19: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

02/23 19:16:42|INFO|ds.boot|モジュールの初期化を開始します。02/23 19:16:42|INFO|ds.boot|モジュール[Server]を初期化しています。02/23 19:16:42|INFO|ds.boot|モジュール[Server]の初期化に成功しました。02/23 19:16:42|INFO|ds.boot|モジュール[Web Container]を初期化しています。02/23 19:16:42|INFO|ds.boot|モジュール[Web Container]の初期化に成功しました。02/23 19:16:42|INFO|ds.boot|モジュール[Session Manager]を初期化しています。02/23 19:16:42|INFO|ds.boot|モジュール[Session Manager]の初期化に成功しました。02/23 19:16:42|INFO|ds.boot|モジュール[SystemModule Container]を初期化しています。02/23 19:16:42|INFO|ds.boot|モジュール[SystemModule Container]の初期化に成功しました。02/23 19:16:42|INFO|ds.boot|モジュール[AccessLog Manager]を初期化しています。02/23 19:16:42|INFO|ds.boot|モジュール[AccessLog Manager]の初期化に成功しました。02/23 19:16:42|INFO|ds.boot|モジュール[Database Manager]を初期化しています。02/23 19:16:42|INFO|ds.boot|モジュール[Database Manager]の初期化に成功しました。02/23 19:16:42|INFO|ds.boot|モジュール[File Manager]を初期化しています。02/23 19:16:42|WARN|ds.kernel.mgr.file|拡張ローカルファイルシステムは利用できません。単純ローカルファイルシステムとしてロードされます。02/23 19:16:42|WARN|ds.kernel.mgr.file|拡張ローカルファイルシステムは利用できません。単純ローカルファイルシステムとしてロードされます。

プラグインの初期化

各プラグインで実装されている初期化処理を呼び出す。

例えば、リポジトリDBの接続、ファイルシステムの初期化、アダプタのオペレーション、グローバルリソースの定義の読み込みなど。

アダプタの場合、ライセンスチェックやライブラリのチェックなどが行われる。

server.log

Page 20: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

02/23 19:16:44|INFO|ds.boot|システムのサービスを開始しています。02/23 19:16:44|INFO|ds.boot|モジュール[Web Container]のサービスを開始しています。02/23 19:16:45|INFO|org.apache.catalina.startup.Embedded|Starting tomcat server

02/23 19:16:45|INFO|org.apache.catalina.core.StandardEngine|Starting Servlet Engine:

Apache Tomcat/6.0.36

02/23 19:16:47|INFO|org.apache.coyote.http11.Http11Protocol|Coyote HTTP/1.1をhttp-7700 で初期化します02/23 19:16:47|INFO|org.apache.coyote.http11.Http11Protocol|Coyote HTTP/1.1をhttp-7700 で起動します02/23 19:16:47|INFO|ds.boot|モジュール[Web Container]のサービスを開始しました。02/23 19:16:47|INFO|ds.boot|モジュール[Session Manager]のサービスを開始しています。02/23 19:16:47|INFO|ds.boot|モジュール[Session Manager]のサービスを開始しました。02/23 19:16:47|INFO|ds.boot|モジュール[SystemModule Container]のサービスを開始しています。02/23 19:16:47|INFO|ds.boot|モジュール[Trigger Manager]のサービスを開始しています。02/23 19:16:47|INFO|ds.boot|モジュール[Azure Service Bus Trigger]のサービスを開始しています。02/23 19:16:47|INFO|ds.boot|モジュール[Azure Service Bus Trigger]のサービスを開始しました。02/23 19:16:47|INFO|ds.boot|モジュール[Database Trigger]のサービスを開始しています。02/23 19:16:47|INFO|ds.boot|モジュール[Database Trigger]のサービスを開始しました。02/23 19:16:47|INFO|ds.boot|モジュール[File Trigger]のサービスを開始しています。

プラグインのサービス開始

各プラグインで実装されているサービスを開始する。

例えば、Webコンテナの起動、トリガーの開始、コンポーネントプールの初期化など。

server.log

Page 21: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

プラガブルアーキテクチャの利点

Page 22: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

1. 拡張性

プラガブルアーキテクチャの利点

2. 保守性

Page 23: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

拡張性

• DataSpider本体を変更することなく、プラグインを追加・削除することができる

– フレームワークに従ってプラグインを開発するだけで、機能を拡張することができる

–不要なプラグイン(アダプタ)は削除することも可能

Page 24: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

保守性

• 他のプラグインに影響を及ぼすことなく、プラグインを追加・変更・削除することができる

– プラグインは個々に分離されているため、影響範囲は対象のプラグインだけに局所化できる

– プラグインごとにクラスローダを拡張しているため、異なるバージョンのライブラリを複数同時にロードすることができる

例えば、Oracleアダプタの場合、OracleのバージョンごとにJDBCドライバ(ライブラリ)を同時に使用するこができる

Page 25: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

拡張クラスローダ

Page 26: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

クラスローダとは?

• JavaのクラスをJVMのメモリにロードする役割を持つオブジェクト

– クラスローダは通常複数あり、それらはツリー構造になっている

– クラスの探索には、まず親のクラスローダに移譲し、そこで見つからなければ子自身で探索する

Page 27: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

DataSpiderServerのクラスローダ

• DataSpiderServerには大きく3つのカテゴリのクラスローダがある

– システム共通のクラスローダ

– マネージャのクラスローダ

– アダプタのクラスローダ

Page 28: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

クラスローダの役割

• システム共通のクラスローダ

– DataSpiderServer全体のコンポーネントから利用することが可能

• マネージャのクラスローダ

– マネージャ共通で利用するクラスローダ、各マネージャそれぞれが利用するクラスローダがある

• アダプタのクラスローダ

– アダプタ共通で利用するクラスローダ、各アダプタそれぞれが利用するクラスローダがある

Page 29: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

ModuleClassLoader

クラスローダの関係

URLClassLoader

DataSpiderURLClassLoader

CommonClassLoader

SharedClassLoader

SharedClassLoader

server

system

common

kernel

share

modules

module

plugin

data_processing

share

modules

moduleModuleClassLoader

・・・

・・・

ModuleClassLoader

ModuleClassLoaderModuleClassLoaderModuleClassLoader

・・・

・・・

マネージャのクラスローダ

アダプタのクラスローダ

システム共通のクラスローダ

クラスローダ ディレクトリツリー

Page 30: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

クラス探索の流れ(アダプタの場合)

ModuleClassLoader

URLClassLoader

DataSpiderURLClassLoader

CommonClassLoader

SharedClassLoader

SharedClassLoader

server

system

common

kernel

share

modules

module

plugin

data_processing

share

modules

moduleModuleClassLoader

・・・

・・・

ModuleClassLoader

ModuleClassLoaderModuleClassLoaderModuleClassLoader

・・・

・・・

マネージャのクラスローダ

アダプタのクラスローダ

システム共通のクラスローダ

クラスローダ ディレクトリツリー

1. システム共通のクラスローダでクラスを探索

2. アダプタ共通のクラスローダでクラスを探索

3 アダプタのクラスローダでクラスを探索

Page 31: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

クラスローダを拡張する利点

• 実行するクラスが依存するクラスを選択的にロードできる

例えば、Oracleアダプタの場合、OracleのバージョンごとにJDBCドライバ(ライブラリ)を同時に使用するこができる

例えば、アダプタのクラスローダ場合、アダプタが必要とするアダプタフレームワークのクラスを選択してロードする

• 異なるバージョンのライブラリを複数同時にロードできる

Page 32: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

クラスを共有するときの注意点

• ライブラリの競合に気をつける

– システム全体のクラスローダとアダプタのクラスローダの両方に、異なるバージョンの同じライブラリがある場合

server

system

common

plugin

data_processing

share

modules

module

commonlib_v1.jar

commonlib_v2.jar

URLClassLoader

DataSpiderURLClassLoader

CommonClassLoader

SharedClassLoader

ModuleClassLoader

アダプタのクラスローダ

システム共通のクラスローダ

(1)

A.classを探索

(2)

commonlib_v1.jarに含まれていたので、A.classをロード

(3)

アダプタにあるcommonlib_v2.jarに含まれるA.classはロードされない

Page 33: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

SDKとは?

Page 34: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

SDKとは

• アダプタを開発するための開発者キット

– プログラミング言語はJava

– APIドキュメント(Javadoc)

–開発ガイドドキュメント

– サンプルコード

– ビルドファイル

【主な提供物】

Page 35: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

SDKの使いどころ

• 既存のJavaプログラムをDataSpiderから実行したい

• DataSpiderで対応していないデータソース、プロトコル、サービスに接続したい

• Mapperでは実現が難しい複雑なロジックを実装したい

Page 36: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

SDKの未来

Page 37: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

SDKのロードマップ

4.0

4.14.2

• Java8対応• プログラム埋め込みMapperロジック

• トリガーSDK

• SDKテストフレームワーク• テンプレートコード自動生成

• Eclipseプラグイン• アダプタ開発用サーバ

Page 38: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

まとめ

• DataSpiderServerは、拡張性、保守性に優れたプラガブルアーキテクチャを採用している

• クラスローダの拡張はプラガブルアーキテクチャを実現する上で重要な技術

• 標準アダプタで実現が難しい場合は、SDKで開発することが可能

• SDKの未来にご期待ください

Page 39: 2015年2月26日 dsthHUB 『DataSpiderインターナル プラガブルアーキテクチャで広がる可能性』

ご清聴ありがとうございました。