Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
IIJ Technical WEEK 2013
GIO-APIを支えるAPIプラットフォーム

2013/11/19
株式会社インターネットイニシアティブ
プロダクト本部 プロダクト開発部 アプリケーションサービス課
川上 芳尚

© 2013...
内容

• 今年9月に運用開始し、2ヶ月ほど経過した
APIプラットフォームの内部構成(裏側)
• 最初に対応したIIJ GIOホスティングパッ
ケージサービス(社内略称:GP)を題材
• IIJ GIOホスティングパッケージサービス
– 20...
・概要
・デザインコンセプト
・システム構成
・API公開支援
・今後の展開
© 2013 Internet Initiative Japan Inc.

3
・概要
・デザインコンセプト
・システム構成
・API公開支援
・今後の展開
© 2013 Internet Initiative Japan Inc.

4
概要 | 社内システム構成(オンライン)
サービスオンライン

API
フロントシステム
(WebUI)

バックオフィスシステム

アカウント情報
契約情報
・・・

API
API

API
IaaS(GP)システム
(クラウドオーケストレ...
概要 | APIプラットフォーム
サービスオンライン

フロントシステム
(WebUI)

バックオフィスシステム

IaaS(GP)システム
(クラウドオーケストレータ)

外部API

アカウント情報
契約情報
・・・

HaaSシステム
...
概要 | ホスティングパッケージサービスで要求される具体的な変換例イメージ

https://gp.api.iij.jp/json?Action=StartVirtualMachine&GcServiceCode=gc########&Sign...
・概要
・デザインコンセプト
・システム構成
・API公開支援
・今後の展開
© 2013 Internet Initiative Japan Inc.

8
デザインコンセプト
•
•
•
•
•
•
•
•
•
•

サービスの機能を容易にAPI公開できるように支援
メッセージフォーマットの変換
内部システムが止まっていたら一定時間保留し、リトライ処理
さまざまな認証、認可
さまざまなアカウントデ...
・概要
・デザインコンセプト
・システム構成
・API公開支援
・今後の展開
© 2013 Internet Initiative Japan Inc.

10
システム構成 | サブシステム構成図
パラメータ検証

サービス解決

リスナ

API
コントローラー

SSL(HTTPS)通信
の終端

認証

メッセージキュー
(ブローカ)

フォーマット変換

HTTP/AMQP変換

バックオフィ...
システム構成 | サブシステム概要
• リスナ
– インターネット側のソケット通信接続受付
– HTTPSを終端するリバースプロキシ(Apache + Keepalived)

• APIコントローラー
– HTTP/AMQPの橋渡しを行うWe...
システム構成 | 主なソフトウェア

OS(KVM)
CentOS 6 系

サーバ類
Keepalived 1.2 系
Apache httpd 2.2 系
Thin 1.6 系
Unicorn 4.6 系
RabbitMQ 3.1 系
My...
システム構成 | 用語(AMQP)
AMQP:Advanced Message Queuing Protocol

RoutingKey:XXXXX

AMQP broker (RabbitMQ Server)
Message
Message ...
システム構成 | プロセス構成とデータフロー
correlation-id :XXXXX
reply-to :AAAAA

QueueとRoutingKeyは1対1
AMQPのボディ(=application-data)はJSON形式
MQ

...
システム構成 | メッセージキューの冗長化 | Serverダウン
Active/Active構成
RabbitMQ Server

Publisher

Consumer

Message Message

Exchange

Message...
システム構成 | メッセージキューの冗長化 | Consumerダウン
Active/Active構成
RabbitMQ Server

Publisher

Consumer
(Active)

Message Message

Exchan...
システム構成 | 非同期メッセージパッシング | メリット・デメリット

• メリット
– モジュール間が疎結合になり、機能的拡張性に
優れる

• デメリット
– システム全体としての見通しが悪くなりやすく、
保守を難しくしてしまうリスクがあ...
システム構成 | 非同期メッセージパッシング | 活きてくるケース

RabbitMQ Server
Message
Message
Message

Message
Message
Message

Publisher
(Client)

M...
・概要
・デザインコンセプト
・システム構成
・API公開支援
・今後の展開
© 2013 Internet Initiative Japan Inc.

20
API公開支援 | 各サービスへの展開
パラメータ検証
定義

サービス解決

リスナ

API
コントローラー

認証

メッセージキュー
(ブローカ)

フォーマット変換

バックオフィス
システム

バックエンド
コントローラー

社内標...
API公開支援 | 設定ファイルイメージ

XML-RPC

XXXサービス
システム

標準的なガイドラインに準拠
入力チェック/認証/認可系

APIプラットフォーム提供機能
HTTPプロキシ(SSL)
認証/認可
フォーマット変換(JSO...
・概要
・デザインコンセプト
・システム構成
・API公開支援
・今後の展開
© 2013 Internet Initiative Japan Inc.

23
今後の展開

• 稼働実績を積み重ねて、可用性の高さを実証していく
• 他の社内サービスに展開し、トラフィック量を増やしながら
ブラッシュアップしていく
• DR(disaster recovery)対応
• 社外システムとの連携
社内システム...
ご清聴ありがとうございました

© 2013 Internet Initiative Japan Inc.

25
Upcoming SlideShare
Loading in …5
×

GIO-APIを支えるAPIプラットフォーム

3,877 views

Published on

IIJ Technical WEEK 2013の講演資料です。
「GIO-APIを支えるAPIプラットフォーム」
IIJプロダクト本部 プロダクト開発部 アプリケーションサービス課 川上芳尚
http://www.iij.ad.jp/company/development/tech/techweek/

Published in: Technology
  • Be the first to comment

GIO-APIを支えるAPIプラットフォーム

  1. 1. IIJ Technical WEEK 2013 GIO-APIを支えるAPIプラットフォーム 2013/11/19 株式会社インターネットイニシアティブ プロダクト本部 プロダクト開発部 アプリケーションサービス課 川上 芳尚 © 2013 Internet Initiative Japan Inc. 1
  2. 2. 内容 • 今年9月に運用開始し、2ヶ月ほど経過した APIプラットフォームの内部構成(裏側) • 最初に対応したIIJ GIOホスティングパッ ケージサービス(社内略称:GP)を題材 • IIJ GIOホスティングパッケージサービス – 2010年にIIJ GIOへラインナップされたIaaS型パブリック クラウドサービス – 従来よりAPI公開のご要望をいただいていた 【IaaSの読み方:アイアース】 http://www.iij.ad.jp/GIO/glossary/alphabet-i-IaaS.html http://giolog.iij.ad.jp/2012/01/12/5334/ © 2013 Internet Initiative Japan Inc. 2
  3. 3. ・概要 ・デザインコンセプト ・システム構成 ・API公開支援 ・今後の展開 © 2013 Internet Initiative Japan Inc. 3
  4. 4. ・概要 ・デザインコンセプト ・システム構成 ・API公開支援 ・今後の展開 © 2013 Internet Initiative Japan Inc. 4
  5. 5. 概要 | 社内システム構成(オンライン) サービスオンライン API フロントシステム (WebUI) バックオフィスシステム アカウント情報 契約情報 ・・・ API API API IaaS(GP)システム (クラウドオーケストレータ) HaaSシステム API連携 全社サービス横断的にフロントシステム、バックオフィスシステムが構築されている IIJ GIOサービス横断的にHaaSシステムが構築されている IaaSクラウドオーケストレータを構築し、ホスティングパッケージサービスを展開 社内システム間はAPIが定義 プロトコルは、XML-RPCが主流(実装言語は、Perl,Python,Ruby,Javaなど色々) ※XML-RPC:XMLでエンコードして、HTTPでデータ転送するRPCプロトコル © 2013 Internet Initiative Japan Inc. 5
  6. 6. 概要 | APIプラットフォーム サービスオンライン フロントシステム (WebUI) バックオフィスシステム IaaS(GP)システム (クラウドオーケストレータ) 外部API アカウント情報 契約情報 ・・・ HaaSシステム 内部API ・サービス横断的にユーザに解放する仕組みを構築 ・第一弾としてIIJ GIOホスティングパッケージサービスで対応 © 2013 Internet Initiative Japan Inc. 6
  7. 7. 概要 | ホスティングパッケージサービスで要求される具体的な変換例イメージ https://gp.api.iij.jp/json?Action=StartVirtualMachine&GcServiceCode=gc########&Signature=XXXXX QueryString(認証情報含む) XML-RPC GioPublic.VM.Run { ServiceCode } JSON $RESULT { StatusCode, ErrorCode, Result { TaskId } } { "StartVirtualMachineResponse": { "RequestId": "xxxxxxxx", "GcServiceCode": "gc########", "Current": { "Status": "Starting" }, "Previous": { "Status": "Stopped" } } GioPublic.VM.GetState { ServiceCode } $RESULT { StatusCode, ErrorCode, Result { VMState } } } ※内部仕様定義形式 © 2013 Internet Initiative Japan Inc. 7
  8. 8. ・概要 ・デザインコンセプト ・システム構成 ・API公開支援 ・今後の展開 © 2013 Internet Initiative Japan Inc. 8
  9. 9. デザインコンセプト • • • • • • • • • • サービスの機能を容易にAPI公開できるように支援 メッセージフォーマットの変換 内部システムが止まっていたら一定時間保留し、リトライ処理 さまざまな認証、認可 さまざまなアカウントディレクトリを柔軟に組み合わせて利用できる認証プラットフォームと しての機能 膨大なAPIコールがあっても適切に受け付け レスポンスのキャッシュ 内部APIが想定時間内に処理を終えられなくても、適切にエラーを返す 悪質なアクセスは除外 各種サービスの内部API同士のハブとしても利用可能 © 2013 Internet Initiative Japan Inc. 9
  10. 10. ・概要 ・デザインコンセプト ・システム構成 ・API公開支援 ・今後の展開 © 2013 Internet Initiative Japan Inc. 10
  11. 11. システム構成 | サブシステム構成図 パラメータ検証 サービス解決 リスナ API コントローラー SSL(HTTPS)通信 の終端 認証 メッセージキュー (ブローカ) フォーマット変換 HTTP/AMQP変換 バックオフィス システム (同期/非同期変換) バックエンド コントローラー IaaSサービス アダプタ IaaSサービス システム ログ管理 © 2013 Internet Initiative Japan Inc. キャッシュ 11
  12. 12. システム構成 | サブシステム概要 • リスナ – インターネット側のソケット通信接続受付 – HTTPSを終端するリバースプロキシ(Apache + Keepalived) • APIコントローラー – HTTP/AMQPの橋渡しを行うWebアプリケーション • サービス解決 – エンドポイントから該当サービスを決定 • パラメータ検証 – 認証前の事前チェック • 認証 – ユーザ認証 • フォーマット変換 – HTTPリクエストから内部リクエスト形式への変換 – 内部レスポンス形式からレスポンスボディ形式(JSON/XMLなど)への変換 • バックエンドコントローラー – サービスアダプタへの振り分け – サービスによっては認可 © 2013 Internet Initiative Japan Inc. 12
  13. 13. システム構成 | 主なソフトウェア OS(KVM) CentOS 6 系 サーバ類 Keepalived 1.2 系 Apache httpd 2.2 系 Thin 1.6 系 Unicorn 4.6 系 RabbitMQ 3.1 系 MySQL 5.5 系 + MHA for MySQL memcached 1.4 系 fluentd アプリケーション実装言語 Ruby 1.9 系 Java 7 系 © 2013 Internet Initiative Japan Inc. 13
  14. 14. システム構成 | 用語(AMQP) AMQP:Advanced Message Queuing Protocol RoutingKey:XXXXX AMQP broker (RabbitMQ Server) Message Message Message Message Consumer (Client) Message Consumer (Client) Publisher (Client) Exchange Message (properties) reply-to correlation-id content-type content-encoding ・ ・ ・ (application-properties) Message Queue (application-data) © 2013 Internet Initiative Japan Inc. 14
  15. 15. システム構成 | プロセス構成とデータフロー correlation-id :XXXXX reply-to :AAAAA QueueとRoutingKeyは1対1 AMQPのボディ(=application-data)はJSON形式 MQ サービス解決 reply-toへ戻す パラメータ検証 API コントローラー (Thin) RPCパターン Client:Publisher -> Consumer Server:Consumer -> Publisher correlation-id HTTPのセッションと対応付けるためのID リレーし続ける reply-to 最終的なレスポンスの戻し先Routing key (コールバックキュー) 認証 HTTP correlation-id :XXXXX reply-to :AAAAA フォーマット変換 (req) バックエンド コントローラー (req) IaaSサービス アダプタ フォーマット変換 (res) reply-toへ戻す バックエンド コントローラー (res) © 2013 Internet Initiative Japan Inc. XML-RPC 15
  16. 16. システム構成 | メッセージキューの冗長化 | Serverダウン Active/Active構成 RabbitMQ Server Publisher Consumer Message Message Exchange Message Queue mirror mirror Message Message Message Exchange Message Queue フェイルオーバー/フェイルバック サーバ側はActive/Activeで構築されている クライアント(PublisherとConsumer)側からKeepalived(IPVS)によるVIPに対してConnectionを張る 接続先サーバ側がダウンして、Connectionが切断された場合は、(自動的に)VIPに対して再接続する ダウンしたサーバをファイルバックした際は、クライアントのConnectionはそのまま維持する © 2013 Internet Initiative Japan Inc. 16
  17. 17. システム構成 | メッセージキューの冗長化 | Consumerダウン Active/Active構成 RabbitMQ Server Publisher Consumer (Active) Message Message Exchange Message Queue QueueDeclarePassive mirror mirror Message Message Exchange Consumer (Standby) Message Queue フェイルオーバー/フェイルバック すべてのConsumerからサーバ(のVIP)に対してConnectionを張り、Channelを作成する 一定時間毎に該当のQueueに対してQueueDeclarePassiveで通信する(ハートビート) ConsumerCountがしきい値を下回る場合は、Consumeを開始する © 2013 Internet Initiative Japan Inc. 17
  18. 18. システム構成 | 非同期メッセージパッシング | メリット・デメリット • メリット – モジュール間が疎結合になり、機能的拡張性に 優れる • デメリット – システム全体としての見通しが悪くなりやすく、 保守を難しくしてしまうリスクがある – 多くの部分においてモジュール間は同期処理で あり、わざわざRPCパターンで作り込む必要が ある © 2013 Internet Initiative Japan Inc. 18
  19. 19. システム構成 | 非同期メッセージパッシング | 活きてくるケース RabbitMQ Server Message Message Message Message Message Message Publisher (Client) Message Message Exchange Consumer (Client) Message Queue TCPコネクション メッセージ(APIリクエスト)毎ではなく、 クライアントのプロセス単位でコネクションを確立する コネクションプーリングが必要にならず、 API のようなデータの小さい 大量のメッセージ処理に向く © 2013 Internet Initiative Japan Inc. 19
  20. 20. ・概要 ・デザインコンセプト ・システム構成 ・API公開支援 ・今後の展開 © 2013 Internet Initiative Japan Inc. 20
  21. 21. API公開支援 | 各サービスへの展開 パラメータ検証 定義 サービス解決 リスナ API コントローラー 認証 メッセージキュー (ブローカ) フォーマット変換 バックオフィス システム バックエンド コントローラー 社内標準 アダプタ 定義 DNSサービス システム ログ管理 © 2013 Internet Initiative Japan Inc. キャッシュ 21
  22. 22. API公開支援 | 設定ファイルイメージ XML-RPC XXXサービス システム 標準的なガイドラインに準拠 入力チェック/認証/認可系 APIプラットフォーム提供機能 HTTPプロキシ(SSL) 認証/認可 フォーマット変換(JSON,XMLなど) レート制御 キャッシュ ログ管理 StartVirtualMachine: Authn: AccessKeyId Authz: Cafe: - [ GpServiceCode, SA ] Require: - GpServiceCode - GcServiceCode AllowedMethod: - GET - POST Validation: GpServiceCode: Match: "/^gp[0-9]{8}$/" MinLength: "10" MaxLength: "10" GcServiceCode: Match: "/^gc[0-9]{8}$/" MinLength: "10" MaxLength: "10" Adapter: GP GetVirtualMachineStatus: Authn: AccessKeyId Authz: © 2013 Internet Initiative Japan Inc. API制御系 ControlGroups: Timeout: ConnectionTimeout: "30" ReplyTimeout: "120" RateControl: MaxConnections: "20" RateLimits: "100" RateLimitsIntervalSec: "15" Retry: RetryIntervalSec: "30" MaxRetries: "2" CacheControl: MaxAgeDefinitions: - [ GioPublic.VM.Get, "60" ] - [ GioPublic.VM.GetState, "60" ] IgnoreCache: Actions: - StartVirtualMachine - StopVirtualMachine - RebootVirtualMachine - InitializeVirtualMachine - ImportRootSshPublicKey 22
  23. 23. ・概要 ・デザインコンセプト ・システム構成 ・API公開支援 ・今後の展開 © 2013 Internet Initiative Japan Inc. 23
  24. 24. 今後の展開 • 稼働実績を積み重ねて、可用性の高さを実証していく • 他の社内サービスに展開し、トラフィック量を増やしながら ブラッシュアップしていく • DR(disaster recovery)対応 • 社外システムとの連携 社内システム APIプラットフォーム リスナ 認証 ログ IaaSサービス システム DNSサービス システム キャッシュ ・・ ・ スケールアウト 社外システム 機能拡充 © 2013 Internet Initiative Japan Inc. 利用システム追加 24
  25. 25. ご清聴ありがとうございました © 2013 Internet Initiative Japan Inc. 25

×