• 検索結果がありません。

Oracle Code Tokyo 2017 ダウンロード資料

N/A
N/A
Protected

Academic year: 2021

シェア "Oracle Code Tokyo 2017 ダウンロード資料"

Copied!
38
0
0

読み込み中.... (全文を見る)

全文

(1)

Deploying Cloud Native

Applications:

VMs, Containers, or Functions?

新井庸介 | Yosuke Arai

Principal Cloud Architect

Cloud Technology Business Unit

May, 2017

(2)

Safe Harbor Statement

The following is intended to outline our general product direction. It is intended

for information purposes only, and may not be incorporated into any contract. It is

not a commitment to deliver any material, code, or functionality, and should not

be relied upon in making purchasing decisions. The development, release, and

timing of any features or functionality described for Oracle’s products remains at

the sole discretion of Oracle.

(3)

What are the options for deploying a

Cloud Native application?

(4)

Deployment Target Types—Examples

Virtual Machine

AWS EC2

Azure VM

Oracle Compute Cloud

IBM Softlayer

Functions

(Serverless)

Amazon Lambda

OpenWhisk

Microsoft Functions

Oracle Functions

Container

Docker, Rocket, RunC,

LXC, …

Application Platform

as a Service (aPaaS)

Heroku, Bluemix, Oracle

Application Container

(5)
(6)

クラウド=現状最もコストとアジリティに優れたプラットフォーム

プラットフォームとしてのクラウドの特性

サーバーインスタンスの⼤きさに制約がある。地理的に分散して配備されている

→サービス分割が必要(巨⼤なシングルサービスは乗らない可能性)

性能拡張や可⽤性向上は複数サーバー利⽤が前提

→サービスの独⽴性が⾼く、スケールアウトや移動に耐える必要あり

サービス同士をAPIで連結できる

What is Cloud? What is Cloud Native App?

App

App

Multi region, country, datacenter

App

App

SaaS

SaaS

SaaS

SaaS

Cloud

Native APP

(7)
(8)

Background of 12 factor app

このドキュメントへの寄稿者は、Herokuプラットフォーム上での仕

事を通して、何百何千ものアプリケーションの開発・運⽤・スケー

ルに間接的に⽴ち会った。

このドキュメントは、多種多様なクラウドアプリケーション開発現

場での私たちの経験と観察をすべてまとめたものである。

特に、アプリケーションが時間と共に有機的に成⻑する⼒学、アプ

リケーションのコードベースに取り組む開発者間のコラボレーショ

ンの⼒学、そしてソフトウェア腐敗によるコストの回避に注目して

いる。

(9)

12factor.net/ja/

The 12 factor app is

クラウドでスケールするアプリの作り方

移植性が⾼いアプリの作り方

=環境依存性のコントロール方法

(10)

The 12 Factors を通してDeployment targetを考える

クラウド時代のWebアプリケーション開発のベストプラクティス

(参考)http://12factor.net/

. コードベース

. 依存関係

. 設定

. バックエンドサービス

. ビルド・リリース・実⾏

. プロセス

. ポートバインディング

. 並⾏性

. 廃棄容易性

. 開発/本番一致

. ログ

. 管理プロセス

1つのコードベースと

複数環境へのデプロイ

依存関係の明示的な宣言と

分離

設定の環境への格納

リソースとしてのバックエ

ンドサービス利⽤

ビルド/リリース/実⾏の

フェーズの分離

ステートレスなプロセス実

プロセスモデルによる

スケールアウト

⾼速な起動と

グレースフルシャットダウ

開発・テスト・本番におけ

実⾏環境の差異の最⼩化

イベントストリームとして

扱うログ情報

管理タスクのプロセス実⾏

ポートバインディングによ

サービスの外部公開

(11)
(12)

I. Codebase

バージョン管理されたコードベース

とアプリは1対1の関係

コードベースに対しデプロイは複数

存在する

コードベースは全てのデプロイを通し

て同一

1つのコードベースと複数環境へのデプロイ

(13)

II. Dependencies

依存関係の明⽰的な宣⾔と分離

必要パッケージが環境に暗黙的に存在することに依存しない

すべての依存関係を完全かつ厳密に宣言する

実⾏時には 依存関係分離 ツールを使って、取り囲んでいるシステムから暗黙

の依存関係が“漏れ出ない”ことを保証する

(14)

II. Dependencies

(15)

II. Dependencies

Application Libraries

Application

Jackson

Log4j

Apache Commons

lodash

(16)

II. Dependencies

Application

Application Container

Tomcat

Jetty

Grizzly/Jersey

Express

Application Libraries

(17)

II. Dependencies

Language Runtime

Application

Application Container

Application Libraries

(18)

II. Dependencies

Operating System

Language Runtime

Application

Application Container

Application Libraries

(19)

II. Dependencies

Operating System

Language Runtime

Application

Application Container

Application Libraries

Container

Function

AP

aaS

依存関係の明⽰的な宣⾔と分離

(20)

II. Dependencies

Application

Operating System

Language Runtime

Application Container

Application Libraries

VM

Container

Function

AP

aaS

依存関係の明⽰的な宣⾔と分離

(21)

III. Config

Config(設定)の例:

データベース、Memcached、他のバックエンドサービスなどのリソースへのハンドル

Amazon S3やTwitterなどの外部サービスの認証情報

デプロイされたホストの正規化されたホスト名など、デプロイごとの値

設定はコードから厳密に分離する

設定はデプロイごとに⼤きく異なるが、コードはそうではない。

設定は環境変数に格納する

環境変数はコードを変更することなくデプロイごとに簡単に変更できる

設定ファイルとは異なり、誤ってリポジトリにチェックインされる可能性はほとんどない。

設定をコードから分離する

(22)

IV. Backing services

バックエンドサービス: アプリケーションが通

常の動作の中でネットワーク越しに利⽤するす

べてのサービス

例)DB, MQ, SMTP, Cache, etc.

⾃社管理のサービス(オンプレミス)と他社管理

のサービス(クラウド)を区別しない

どちらもリソースであり、設定に格納されたURLやそ

の他の情報でアクセスする

サービスの切り替えにおいて、アプリケーションの

コードに変更を加える必要はない

バックエンドサービスをアタッチされたリソースとして扱う

Application

MySQL

Object

Storage

Twitter

(23)

Functions

(Serverless)

Container

III. Config / IV. Backing Services

Virtual Machine

設定をコードから分離する / サービスはリソースとして扱う

考慮ポイント:

(24)

V. Build, release, run

ビルド、リリース、実⾏の3つのステージを厳密に分離する。

ビルド: コードベースを実⾏可能な塊に変換

リリース: ビルドと設定の両方が含まれ、実⾏環境ですぐ実⾏できるよう変換

実⾏: リリースを実⾏環境の中で実⾏する

各ステージで実施することは他ステージでは⾏わない

例: 実⾏ステージでコードを変更しビルドしなおす

ビルド/リリース/実⾏の

フェーズの分離

Build

Release

Run

Application

Config

Application

(25)

VI. Processes

プロセスはステートレスかつシェアードナッシングであるべき

メモリやディスクにキャッシュされたものが、将来のリクエストや

ジョブにおいて利⽤できることを決して仮定しない

セッションスティッキーを期待しない

将来のリクエストやジョブが別のプロセスで処理される可能性を考慮する

セッション状態のデータはそれ⽤のデータストアに格納すべき

アプリケーションは、1つもしくは

複数のステートレスなプロセスとして実⾏する

(26)

VIII. Concurrency

スレッドモデルとプロセスモデル

スレッドモデル:プロセスがCPUやメモリを確保、複数スレッドで並⾏処理

プロセスモデル:リクエスト量に応じてプロセスを多数起動して処理

スレッドモデルよりプロセスモデルを採る

個々のプロセスが内部で多重化することを禁止するわけではないが、

サーバーのスケールアップには限界がある→プロセス分割できることが重要

スケールアウトの操作は単純かつ確実なものであること

プロセスモデルによってスケールアウトする

(27)

Functions

(Serverless)

Container

VI. Processes / VIII. Concurrency

Virtual Machine

ステートレス, シェアードナッシングモデル / マルチプロセス

考慮ポイント

マルチプロセスのオーケストレーション

プロセス配置, 管理/監視, スケーラビリティや可⽤性の確保, 負荷分散, etc.

アプリのスレートレス、シェアードナッシングの度合い

デプロイの配置に対する依存性, セッションに対する依存性

(28)

IX. Disposability

高速な起動とグレースフルシャットダウンで堅牢性を最⼤化する

Twelve-Factor Appの プロセスは即座に起動・終了することができる

リリース作業の迅速化, スケールアウトの迅速化

グレースフル・シャットダウンを実装

Web: Listen中止→処理中のリクエストを処理しきる→シャットダウン

Worker: 処理中のジョブをキューに戻す→シャットダウン

プロセスは突然の死に対しても堅牢であるべき

予期しないグレースフルでない停止もうまく処理できるよう設計すべき

(29)

X. Dev/prod parity

開発、ステージング、本番環境をできるだけ一致させた状態を保つ

開発環境と本番環境のギャップを⼩さく保つ

時間のギャップ: 開発者がリリースしたコードが本番に反映されるまで数日、

数週間、時には数ヶ月かかることがある。

人材のギャップ: 開発者が書いたコードをインフラエンジニアがデプロイする。

ツールのギャップ: 本番デプロイではApache、MySQL、Linuxを使うのに、開

発者がNginx、SQLite、OS Xのようなスタックを使う。

利⽤するバックエンドサービスも開発/本番一致とする

悪い例)開発環境ではSQLiteを使い、本番ではPostgreSQL

開発環境ではローカルメモリでキャッシュ、本番ではMemcached

(30)

Functions

(Serverless)

Container

X. Dev/prod parity

Virtual Machine

開発、ステージング、本番環境をできるだけ一致させた状態を保つ

Application Platform

as a Service

考慮ポイント

環境の可搬性

ローカル環境での開発は可能か

動的な設定切り替え

(31)

XI. Logs

ログをイベントストリームとして扱う

Twelve-Factor Appはアプリケーションの出⼒ストリームの送り先や

ストレージについて一切関知しない

アプリで独⾃にログを出⼒したり管理したりしない

標準出⼒のみを使⽤

ログ管理も実⾏環境側で⾏う

(32)

XII. Admin processes

管理タスクを1回限りのプロセスとして実⾏する

1回限りの管理プロセスも、アプリケーションプロセスと全く同じ環

境で実⾏されるべきである

管理プロセス例: DB操作、管理シェル実⾏など

管理⽤のコードは、同期の問題を避けるためにアプリケーション

コードと一緒にデプロイされるべきである。

(33)

The 12 Factors

クラウド時代のWebアプリケーション開発のベストプラクティス

. コードベース

. 依存関係

. 設定

. バックエンドサービス

. ビルド・リリース・実⾏

. ポートバインディング

. 並⾏性

. 廃棄容易性

. 開発/本番一致

. ログ

1つのコードベースと

複数環境へのデプロイ

依存関係の明示的な宣言と

分離

設定の環境への格納

リソースとしてのバックエ

ンドサービス利⽤

ビルド/リリース/実⾏の

フェーズの分離

プロセスモデルによる

スケールアウト

⾼速な起動と

グレースフルシャットダウ

開発・テスト・本番におけ

実⾏環境の差異の最⼩化

イベントストリームとして

扱うログ情報

ポートバインディングによ

サービスの外部公開

(34)

⾃由度か、⽣産性か

There’s nothing you can’t do with

enough time and investment

The essential tradeoff is level of

control vs. productivity

You have to decide what’s more

important/necesssary when

choosing a deployment type

Productivity

Contr

ol

Virtual

Machine

Container

Function

APaaS

(35)

Cloud Native Deployment Target?

Application

Operating System

Language Runtime

Application Container

Application Libraries

Container

Function

AP

aaS

考慮すべきポイント

⾃由度 or ⽣産性

依存関係の管理

マルチプロセスの

オーケストレーション

アプリのスレートレス,

シェアードナッシング化

環境の可搬性, ローカル

(36)
(37)
(38)

参照

関連したドキュメント

「欲求とはけっしてある特定のモノへの欲求で はなくて、差異への欲求(社会的な意味への 欲望)であることを認めるなら、完全な満足な どというものは存在しない

全体構想において、施設整備については、良好

現状と課題.. 3R・適正処理の促進と「持続可能な資源利用」の推進 自然豊かで多様な生きものと 共生できる都市環境の継承 快適な大気環境、良質な土壌と 水循環の確保 環 境 施 策 の 横

・グリーンシールマークとそれに表示する環境負荷が少ないことを示す内容のコメントを含め

都市 の 構築 多様性 の 保全︶ 一 層 の 改善 資源循環型 ︵緑施策 ・ 生物 区 市 町 村 ・ 都 民 ・ 大気環境 ・水環境 の 3 R に よ る 自然環境保全 国内外 の 都市 と の 交流︑. N P

 千葉 春希 家賃分布の要因についての分析  冨田 祥吾 家賃分布の要因についての分析  村田 瑞希 家賃相場と生活環境の関係性  安部 俊貴

3R・適正処理の促進と「持続可能な資源利用」の推進 自然豊かで多様な生きものと 共生できる都市環境の継承 快適な大気環境、良質な土壌と 水循環の確保 環 境 施 策 の 横 断 的 ・ 総

3R・適正処理の促進と「持続可能な資源利用」の推進 自然豊かで多様な生きものと 共生できる都市環境の継承 快適な大気環境、良質な土壌と 水循環の確保 環 境 施 策 の 横 断 的 ・ 総