クラウドを『作る』ってどういうこと?

Post on 16-Aug-2015

3.988 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

TRANSCRIPT

クラウドを『作る』ってどういうこと?

Kazuto Kusama@jacopen

NTT Communications

仕事• Cloudn PaaSの開発リーダー

• アーキテクチャ設計

• スクラムマスター

• プロダクトの方向性決め

• コード書き

個人活動• PaaS勉強会主宰

• 日本Cloud Foundryグループ理事

今回お話したいこと

クラウドを作るとはどういう仕事なのか

クラウドの作り方を 知っている人?

そもそもクラウドって何だっけ

NISTによるクラウドコンピューティングの定義 https://www.ipa.go.jp/files/000025366.pdf

クラウドコンピューティングは、共用の構成可能なコンピューティングリソース(ネットワーク、サーバー、ストレージ、アプリケーション、サービス)の集積に、どこからでも、簡便に、必要に応じて、ネットワーク経由でアクセスすることを可能とするモデルであり、最小限の利用手続きまたはサービスプロバイダとのやりとりで速やかに割当てられ提供されるものである。このクラウドモデルは 5 つの基本的な特徴と 3 つのサービスモデル、および 4 つの実装モデルによって構成される。 オンデマンド・セルフサービス ユーザは、各サービスの提供者と直接やりとりすることなく、必要に応じ、自動的に、サーバーの稼働時間やネットワークストレージのようなコンピューティング能力を一方的に設定できる。 幅広いネットワークアクセス コンピューティング能力は、ネットワークを通じて利用可能で、標準的な仕組みで接続可能であり、そのことにより、様々なシンおよびシッククライアントプラットフォーム(例えばモバイルフォン、タブレット、ラップトップコンピュータ、ワークステーション)からの利用を可能とする。 リソースの共用 サービスの提供者のコンピューティングリソースは集積され、複数のユーザにマルチテナントモデルを利用して提供される。様々な物理的・仮想的リソースは、ユーザの需要に応じてダイナミックに割り当てられたり再割り当てされたりする。物理的な所在場所に制約されないという考え方で、ユーザは一般的に、提供されるリソースの正確な所在地を知ったりコントロールしたりできないが、場合によってはより抽象的なレベル(例:国、州、データセンタ)で特定可能である。リソースの例としては、ストレージ、処理能力、メモリ、およびネットワーク帯域が挙げられる。 スピーディな拡張性 コンピューティング能力は、伸縮自在に、場合によっては自動で割当ておよび提供が可能で、需要に応じて即座にスケールアウト/スケールインできる。ユーザにとっては、多くの場合、割当てのために利用可能な能力は無尽蔵で、いつでもどんな量でも調達可能のように見える。 サービスが計測可能であること クラウドシステムは、計測能力 1を利用して、サービスの種類(ストレージ、処理能力、帯域、実利用中のユーザアカウント数)に適した管理レベルでリソースの利用をコントロールし最適化する。リソースの利用状況はモニタされ、コントロールされ、報告される。それにより、サービスの利用結果がユーザにもサービス提供者にも明示できる。

クラウドの4つの特徴

リソースを、ネットワーク経由でアクセス

ネットワーク サーバー ストレージ アプリケーション サービス

リソースの共用VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

オンデマンド・セルフサービス

VM

VM

VM

Website

API

申込書で~ メールで~

○営業日後に~

サービスが計測可能であること

ネットワーク(in) 31.31GB

ネットワーク(out) 142.13GB

ストレージ 40GB

仮想サーバー 710時間

料金・・・ xxxxx円

※リソース利用がモニタリングされ、利用者が情報を取得出来ることが必要。  従量課金でないとダメという話ではない。

リソースを、ネットワーク経由でアクセス

リソースの共用

オンデマンド・セルフサービス

サービスが計測可能であること

クラウドの3つのサービスモデル

IaaS (Infrastructure as a Service)

• インフラ(サーバー、ネットワーク、ストレージ)をサービスとして提供する

• 利用者は欲しい時に欲しいだけ、これらのインフラを利用出来る • サーバーやストレージなどの設備を買うのではなく

必要な時に利用する。不要になったら利用を止める = サービス

• 例: Amazon EC2, Google Compute Engine, Cloudn Compute

PaaS (Platform as a Service)

• プラットフォーム(アプリケーション実行環境など)をサービスとして提供する

• 例: Cloudn PaaS、Heroku、Google App Engine

SaaS (Software as a Service)• ソフトウェアをサービスとして提供する • Gmail、Salesforce、Evernote、Office 365 等々

NTT Communicationsは全部やっていますが、

今回は特に IaaS / PaaS についてお話します。

仮想サーバーを提供する クラウドを考えてみる

家にサーバー買って置きました

家にサーバー買って置きました

サービスにすらなってない

インターネットに繋がる環境を用意しました。 サーバーの管理権限をユーザーに渡しました。

インターネットに繋がる環境を用意しました。 サーバーの管理権限をユーザーに渡しました。

専用サーバーのホスティング

サーバー内部の権限を分けて 複数ユーザーに提供出来るようにしました

サーバー内部の権限を分けて 複数ユーザーに提供出来るようにしました

共用レンタルサーバー

仮想化技術を利用して、ユーザーごとにVMを払い出せるようにしました

VM

VM

VM

VM

仮想化基盤を利用して、ユーザーごとにVMを払い出せるようにしました

VM

VM

VM

VM

VPS

多くのユーザーの需要に応えられるようたくさんのサーバーを用意して

柔軟にリソースの分配ができる仮想化基盤を 導入して

VM

VM

VM

VM

VM

VM

※ただし仮想化基盤の有無は、クラウドの要件ではない。仮想化を用いないクラウドもあり得る。

ユーザーがオンデマンドで操作できるAPIやGUIを提供して

VM

VM

VM

VM

VM

VM

GUI

API

ユーザー要求に応じてリソースの配置や削除を行うコントローラを作って

VM

VM

VM

VM

VM

VM

GUI

APIController

リソースの利用状況等をモニタリングする仕組みを作って

VM

VM

VM

VM

VM

VM

GUI

APIController

Resource Monitor

VMのデータを保存する共有ストレージとか

VM

VM

VM

VM

VM

VM

GUI

APIController

Resource Monitor

Shared Storage

ユーザー要求に応じたネットワークを実現するSDNとか

VM

VM

VM

VM

VM

VM

GUI

APIController

Resource Monitor

Shared Storage

SDN / Controller

ログの収集・検索などの仕組みを用意して

VM

VM

VM

VM

VM

VM

GUI

APIController

Resource Monitor

Shared Storage

SDN / Controller

Log management

そしてこれらを運用していくための、沢山のツールや監視の仕組みを作って

これらが揃って、クラウドサービス(ここではIaaS)が提供出来る。

つまり、IaaSを作る仕事とは

サービスを実現するためのサーバー・ネットワーク等の 設計(物理/論理) ⇒ 詳しい話は @u1 のセッションで!

サービスのコアとなるコントローラの開発

ユーザーインターフェースの開発 (GUI・CUI・API)

日々の運用

ソフトウェア

ソフトウェア

ソフトウェア

ソフトウェア

ソフトウェア

ソフトウェア

ソフトウェア

クラウドの神髄はソフトウェアにあり

コムのクラウドも(結構)内製でコード書いてます

1からコードを書いて サービスを作るパターン

OSSのクラウド基盤を使うパターン

これらを使う場合コードを書く必要はない?

OSSのクラウド基盤を使う場合• コード全体に目を通して何がどういう仕組みで動いているか把握

• 問題があったら自分たちでログとコードを追って原因を特定

• 問題を修正

• 修正した問題をコントリビュート

これくらいの取り組みは最低限必要

OSSだけで完結しないところは、やはり自製

認証基盤との 繋ぎ込み

課金システム

GUI

Deployment

Cloudn PaaSの場合

カスタマイズ

Cloudn PaaSチームの ソフトウェア開発

ウォーターフロー開発 アジャイル開発

スプリント計画• やるべき項目を「バックログ」として洗い出す

• 2週間を1スプリントとし、バックログの中からスプリントに投入する

→これがチームの2週間の仕事となる

ペアプログラミング推奨 コードを書いたら、必ずコードレビュー

振り返り• 毎週、チームで振り返りを行う • 「良かったこと」「悪かったこと」

「来週からどう改善するか」を全員で出し合う

IRC

いろんなツールを活用新しい仕組みの導入を恐れない

http://www.slideshare.net/jacopen/cloudn-paaschatops

チーム力を高めていくのが大事

どうして自分たちで コードを書くのか• クラウドの神髄はソフトウェア

• ソフトウェアの開発力を高める=サービスの魅力を高める

• 世の中の動きが激しすぎて、外注ではスピードが追いつかない

どうして自分たちで コードを書くのか• クラウドの神髄はソフトウェア

• ソフトウェアの開発力を高める=サービスの魅力を高める

• 世の中の動きが激しすぎて、外注ではスピードが追いつかない

• そのほうが楽しいから

楽しい!!✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌

求められる知識の幅が広い• 単にソフトウェアを書くだけでなく、

• インフラ周り • OSやデータベース • その他ミドルウェア • バックエンドアプリ • フロントエンドアプリ • UI / UX • その他派生する技術(IoT,ビッグデータetc)

ネットワーク

ハードウェア

OS

ミドルウェア データベース

バックエンドアプリ

フロントエンドアプリ

UI / UX

求められる知識の幅が広い• 単にソフトウェアを書くだけでなく、

• インフラ周り • OSやデータベース • その他ミドルウェア • バックエンドアプリ • フロントエンドアプリ • UI / UX • その他派生する技術(IoT,ビッグデータetc)

ネットワーク

ハードウェア

OS

ミドルウェア データベース

バックエンドアプリ

フロントエンドアプリ

UI / UX

楽しい!!✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌

楽しい!!✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌

もちろん、大変なことも多いけどね。 ⇒ 詳しくは @r_takaishiのセッションで!

クラウドエンジニアになろう!

技術力はあったほうが良いに超したことはないけど

必要なのは

好奇心 行動力

この2つがあれば 技術力は勝手についてくる

勉強会に出てみよう

• 好奇心と行動力の塊みたいな人がいっぱい居る

• まずは参加してみる。次に発表してみると力が飛躍的に高まる

• 詳しくは @hico_horiuchi のセッションで!

http://www.slideshare.net/hico_horiuchi/janog3

同志を見つけよう

• 尖ったサークルで活動することは

一生の糧になる(と思う)

ロールモデルを見つけよう

• 身近に「この人はすごい」

という人がいれば、

その人から教わるとか、行動をマネしてみるといい

クラウドエンジニアになろう!

ちなみにNTTコミュニケーションズだと✓ 大規模なリソースを扱うことができて ✓ 世界トップクラスのインフラがあって(アジア唯一のTier1ステータス)

✓ IaaSもPaaSもSaaSも作ることができて

✓ ソフトウェア開発に力を入れ始めていて ✓ クラウドをやりきれるだけの十分な体力があって ✓ エンジニアが自由に活動できる

Questions?

top related