qpstudy 2014.04 ミドルウェア設計の勘所

70
qpstudy 2014.04 ミミミミミミミミミミミ qpstudy 2014-04-19 @nekoruri

description

qpstudy 2014.04 ミドルウェア設計の勘所

Transcript of qpstudy 2014.04 ミドルウェア設計の勘所

Page 1: qpstudy 2014.04 ミドルウェア設計の勘所

qpstudy 2014.04ミドルウェア設計の勘所

qpstudy 2014-04-19@nekoruri

Page 2: qpstudy 2014.04 ミドルウェア設計の勘所
Page 3: qpstudy 2014.04 ミドルウェア設計の勘所

Who are you, @nekoruri ?

秋葉原生まれ大手町育ちの歌って踊れる江戸っ子インフラエンジニア。0 と 1 が紡ぐ「ゆるやかなつながり」に魅せられ早 20 年、

SNS と CGM の力で世界を幸福にするのがライフワーク。市民、幸福は義務です。あなたは幸福ですか?

http://twitter.com/nekoruri

http://facebook.com/masapon

http://d.hatena.ne.jp/nekoruri/

Page 4: qpstudy 2014.04 ミドルウェア設計の勘所

IaaS システム構築 / 管理ガイド

第 4 章 クラウド環境の運用における監視と可視化 ・安定運用のための運用監視 ・運用監視の方法 ・ニフティクラウドと OS の標準機能で  サーバー監視 ・ Munin でかんたんリソース監視 ・統合監視ツール Zabbix による監視基盤  の構築  ・その他の監視ツール ・メトリクス収集・解析サービス ・クラウドと監視と DevOps

Page 5: qpstudy 2014.04 ミドルウェア設計の勘所

最近流行の OpenSSL まとめ記事の中の

Page 6: qpstudy 2014.04 ミドルウェア設計の勘所

なかやま まさひろ

アメーバ事業本部クロスイノベーション室

Ameba 全体の「横軸」改善チーム・ゲーム共通のランキング・サービス間の回遊

Page 7: qpstudy 2014.04 ミドルウェア設計の勘所
Page 8: qpstudy 2014.04 ミドルウェア設計の勘所

「ミドルウェア」

Page 9: qpstudy 2014.04 ミドルウェア設計の勘所

「ミドルウェア」

コンピュータの基本的な制御を行うオペレーティングシステム

(OS) と、各業務処理を行うアプリケーションソフトウェアと

の中間に入るソフトウェアhttp://ja.wikipedia.org/wiki/ ミドルウェア

Page 10: qpstudy 2014.04 ミドルウェア設計の勘所

「ミドルウェア」

コンピュータの基本的な制御を行うオペレーティングシステム

(OS) と、各業務処理を行うアプリケーションソフトウェアと

の中間に入るソフトウェアhttp://ja.wikipedia.org/wiki/ ミドルウェア

Page 11: qpstudy 2014.04 ミドルウェア設計の勘所

おさらい: Web 三層モデル

Web AP DB

Page 12: qpstudy 2014.04 ミドルウェア設計の勘所

おさらい: Web 三層モデル

Web AP DB

• クライアントとの接続を捌く

• 静的なデータ配信

• 業務ロジック処理

• 動的データの生成

• データの保存と管理

• データの整合性の保証

Page 13: qpstudy 2014.04 ミドルウェア設計の勘所

ミドルウェアの範囲

Web AP DB

ハードウェア

ハードウェア

ハードウェア

OS OS OS

Webサーバ

APサーバ

DBサーバ

アプリケーション

Page 14: qpstudy 2014.04 ミドルウェア設計の勘所

ミドルウェアの範囲

Web AP DB

ハードウェア

ハードウェア

ハードウェア

OS OS OS

アプリケーションWeb

サーバAP

サーバ

DBサーバ

Page 15: qpstudy 2014.04 ミドルウェア設計の勘所

ミドルウェアの範囲

Web AP DB

ハードウェア

ハードウェア

ハードウェア

OS OS OS

アプリケーションWeb

サーバAP

サーバ

DBサーバ

ハードウェア、 OS 、アプリケーション以外の

すべて

Page 16: qpstudy 2014.04 ミドルウェア設計の勘所

アプリケーション

Web AP DB

ハードウェア

ハードウェア

ハードウェア

OS OS OS

アプリケーションWeb

サーバAP

サーバ

DBサーバ

ビジネスの価値そのもの

Page 17: qpstudy 2014.04 ミドルウェア設計の勘所

アプリケーション

Web AP DB

ハードウェア

ハードウェア

ハードウェア

OS OS OS

アプリケーションWeb

サーバAP

サーバ

DBサーバ

ビジネスの価値そのもの機能要件 ⇒ アプリの機能

Page 18: qpstudy 2014.04 ミドルウェア設計の勘所

ミドルウェアの範囲

Web AP DB

ハードウェア

ハードウェア

ハードウェア

OS OS OS

アプリケーションWeb

サーバAP

サーバ

DBサーバ

ハードウェア、 OS 、アプリケーション以外の

すべて

Page 19: qpstudy 2014.04 ミドルウェア設計の勘所

ミドルウェア=OS の上で

アプリケーションを動かすために必要なすべてのソフトウェア

Page 20: qpstudy 2014.04 ミドルウェア設計の勘所

ミドルウェアの設計=アプリケーションを動かすために

必要なすべてのソフトウェアを「どのように」

組み合わせるか決める

Page 21: qpstudy 2014.04 ミドルウェア設計の勘所

ミドルウェアの設計=

アプリケーションを動かすために必要なすべてのソフトウェアを

「どのように」組み合わせるか決める

要件を満たすシステムを作る

Page 22: qpstudy 2014.04 ミドルウェア設計の勘所

ミドルウェアの選択

Page 23: qpstudy 2014.04 ミドルウェア設計の勘所

ミドルウェアの選択1. 機能要件によるもの

2. 非機能要件によるもの

○○ がしたい    ⇒ その実現に□□が最適

障害復旧は ×× 時間以内にしたい    ⇒ その実現に△△が最適

Page 24: qpstudy 2014.04 ミドルウェア設計の勘所

今回の採用アーキテクチャ

LoadBalancer

Web AP

Web AP

Web AP

DBDB

監視サーバ

スケールアウト

HA クラスタ

Page 25: qpstudy 2014.04 ミドルウェア設計の勘所

今回の採用アーキテクチャ

LoadBalancer

Web AP

Web AP

Web AP

DBDB

監視サーバ

スケールアウト

HA クラスタ

Page 26: qpstudy 2014.04 ミドルウェア設計の勘所

今回の採用アーキテクチャ

LoadBalancer

Web AP

Web AP

Web AP

DBDB

監視サーバ

スケールアウト

HA クラスタ

Page 27: qpstudy 2014.04 ミドルウェア設計の勘所

Web+AP 層のインフラ設計• 保持データ–Web:静的データ、一時データ– AP: アプリケーションコード、一時

データ

• 基本特性– データロストしても再構築可能– スケールアウト容易– 負荷分散と冗長化が一体

Page 28: qpstudy 2014.04 ミドルウェア設計の勘所

AP サーバの役割• アプリケーションを動かす– 業務ロジック処理– 動的データの生成

• 何らかの言語によるプログラムを動かす–Web からのリクエストに応える– 必要に応じて DB にアクセスする

Page 29: qpstudy 2014.04 ミドルウェア設計の勘所

AP サーバの選択• 言語環境による縛り(機能要件)

      ⇒ 言語ごとの APサーバ– Java:Tomcat, Glassfish, Jetty– Ruby: Unicorn, Puma, Phusion

Passenger– PHP: mod_php5, php-fpm– Perl: Starman, Twiggy, mod_perl

Page 30: qpstudy 2014.04 ミドルウェア設計の勘所

AP サーバの選択?• 言語環境による縛り(機能要件)

      ⇒ 言語ごとの AP サーバ– Java:Tomcat, Glassfish, Jetty– Ruby: Unicorn, Puma, Phusion

Passenger– PHP: mod_php5, php-fpm– Perl: Starman, Twiggy, mod_perl

• Webサーバ (Apache, nginx) の一部となって動く AP サーバがある⇒ 実質的に Web サーバの選択も縛る

Page 31: qpstudy 2014.04 ミドルウェア設計の勘所

Web サーバの役割• クライアントとの接続を捌く– 時間の掛かる処理の AP サーバ応答待ち

• 静的なデータ配信– 3G 回線のスマホがちんたら長時間接続

         ⇒ 豊富な同時接続数– LAN 接続の PC が大量の画像を取得

         ⇒ 高速なスループット

Page 32: qpstudy 2014.04 ミドルウェア設計の勘所

C10K(同時接続数の爆発)問題

• 大量のクライアントからの同時接続–何も考えない Apache(prefork 設定 ) では無

理– nginx や Apache event_mpm の検討

• node.js で AP サーバを直に公開– 非同期モデルならば直接 C10K が扱える– 静的データは別ドメインの Web サーバ

Page 33: qpstudy 2014.04 ミドルウェア設計の勘所

HTTP KeepAlive

• ブラウザー Web 間は有効が望ましい– TCP や SSL のハンドシェークにかかる時間– TCP 接続中のパケット落ちのリカバリ時間( 1秒〜 3秒)

         ⇒ スループットに影響

• Web ー AP 間は無効が望ましい– KeepAlive = 処理が終わった後も接続を残す– AP サーバの同時接続数を無駄に消費

Page 34: qpstudy 2014.04 ミドルウェア設計の勘所

Web+AP 層のインフラ設計• 保持データ–Web:静的データ、一時データ– AP: アプリケーションコード、一時

データ

• 基本特性– データロストしても再構築可能– スケールアウト容易– 負荷分散と冗長化が一体

Page 35: qpstudy 2014.04 ミドルウェア設計の勘所

Web+AP 層は Stateless に保つ

• データを持たない– データは全て DB に保存– ログも全て DB等に送信

• データの同期なくサーバを追加できる– 非機能要件:性能・拡張性同時接続数増加に無停止で対応できること

• いつサーバが壊れてもなにも失わない

Page 36: qpstudy 2014.04 ミドルウェア設計の勘所

今回の採用アーキテクチャ

LoadBalancer

Web AP

Web AP

Web AP

DBDB

監視サーバ

スケールアウト

HA クラスタ

Page 37: qpstudy 2014.04 ミドルウェア設計の勘所

DB 層のインフラ設計• 保持データ–永続データ– トランザクションデータ

• 基本特性– データロストするとシステム崩壊– データ整合性確保のため分散困難– HA クラスタで冗長化

Page 38: qpstudy 2014.04 ミドルウェア設計の勘所

DB 層のインフラ設計• 保持データ–永続データ– トランザクションデータ

• 基本特性– データロストするとシステム崩壊– データ整合性確保のため分散困難– HA クラスタで冗長化

死ぬ気でデータを守れ

Page 39: qpstudy 2014.04 ミドルウェア設計の勘所

HA クラスタ• DB サーバの冗長化手法の一つ–複数台(通常は 2台)でペアを組む– 通常はその片方(サーバ A)が仕事をする– もう片方(サーバ B)は仕事をしない代わり

に、サーバ A が動いているか延々とチェック– サーバ A が突然の死– サーバ B が A の死に気付く– サーバ B が仕事を始める

10 分程度

Page 40: qpstudy 2014.04 ミドルウェア設計の勘所

データの同期• Shared disk model– ハードウェアレベルで高度に冗長化された頑丈な共有ディスクに A/B ともに接続

– サーバ A が死んだらサーバ B が読みに行く

サーバ A サーバ B

Page 41: qpstudy 2014.04 ミドルウェア設計の勘所

データの同期• Shared nothing model– サーバ A は、処理の結果変更された内容をずっとサーバ B に送り続ける

–十分に速ければ、サーバ A と同じデータをサーバ B 上でも持っていることになる

サーバ A サーバ B

Page 42: qpstudy 2014.04 ミドルウェア設計の勘所

ボトルネックとの闘い• CAP 定理:以下の 3 つは両立しない

1. 一貫性2. 可用性3. 分断耐性

• 一般的な DB でざっくりいうと1. 一貫性と2. 可用性を求めると、3. 複数台に分散させることができない

Page 43: qpstudy 2014.04 ミドルウェア設計の勘所

CAP 定理の抜け道• どうしても 1台じゃ厳しいヽ (;´Д`) ノ– キャッシュ、レプリケーション

  ⇒ 一貫性への影響– 機能分割(機能分割)、水平分割

  ⇒ 開発効率や一貫性への影響– 一貫性を捨て、結果整合性で妥協

  ⇒ 分散 DB の活用

Page 44: qpstudy 2014.04 ミドルウェア設計の勘所

分散 DB( NoSQL)の活用• 「サーバを増やすほど速くなる」– そんな銀の弾丸があったら Oracle が買収し

(略

• 分散 DB の「性質」を深く理解–どんなアクセスに向いているのか–どんなデータに向いているのか– 合わないものを使うと不幸になります (断言 )

Page 45: qpstudy 2014.04 ミドルウェア設計の勘所

今回の採用アーキテクチャ

LoadBalancer

Web AP

Web AP

Web AP

DBDB

監視サーバ

スケールアウト

HA クラスタ

Page 46: qpstudy 2014.04 ミドルウェア設計の勘所

監視サーバの役割1. 障害の発見、通知– サービスの「生存」を監視、通知– 冗長化サーバの一部だけの故障も検知

2. メトリクス(リソース状況等)の取得– CPU やメモリの利用率– ディスク空き容量– レスポンスを返し終わるまでの応答時間– どうもおかしい=閾値を超えたら通知

Page 47: qpstudy 2014.04 ミドルウェア設計の勘所

ボトルネックの把握• 様々なメトリクスの取得– リクエスト数、ネットワークトラフィック– DB の内部パラメータ

     ⇒ ボトルネックの把握、解消

Page 48: qpstudy 2014.04 ミドルウェア設計の勘所

ボトルネックの把握• 様々なメトリクスの取得– リクエスト数、ネットワークトラフィック– DB の内部パラメータ

     ⇒ ボトルネックの把握、解消

推測するな計測せよ

Page 49: qpstudy 2014.04 ミドルウェア設計の勘所

監視ツールの選択• 生存監視– Nagios 、 Mon 、 Sensu

• メトリクス取得–Munin 、 GrowthForecast 、 Cacti

• 統合監視– Zabbix

Page 50: qpstudy 2014.04 ミドルウェア設計の勘所

監視ツールの選択• 生存監視– Nagios 、 Mon 、 Sensu

• メトリクス取得–Munin 、 GrowthForecast 、 Cacti

• 統合監視– Zabbix

とにかく手軽

必要な機能が揃っている

Page 51: qpstudy 2014.04 ミドルウェア設計の勘所
Page 52: qpstudy 2014.04 ミドルウェア設計の勘所

ミドルウェアと生きる

Page 53: qpstudy 2014.04 ミドルウェア設計の勘所

インフラエンジニアの主戦場• 下の層は手を動かすことが減った– ハードウェアの仮想化– OS は RHEL/CentOS 、 Ubuntu に集約

• 最もエキサイティングな分野–新しいミドルウェアが毎年いくつも登場– 性質を見抜き、最適な場所に投入– ソフトウェア単位では数年で陳腐化

Page 54: qpstudy 2014.04 ミドルウェア設計の勘所

どうすればこの先生きのこれるか

Page 55: qpstudy 2014.04 ミドルウェア設計の勘所

どうすればこの先生きのこれるか

• 人は考えることに注力しよう!– 利用できることは利用しよう

• IaaS 、 PaaS 、 BaaS• AWS等クラウド事業者の提供するコンポーネント

– 自動化できることは自動化しよう• Puppet 、 Chef• Vagrant• 継続的デリバリー

– 抽象化できることは抽象化しよう• IaaS• Docker

Page 56: qpstudy 2014.04 ミドルウェア設計の勘所

どうすればこの先生きのこれるか

• ミドルウェアの「性質」をつかもう!– データベースとか分散 DB とか MQ とか• 得意とするデータの形式• 更新の方法・頻度、取得の方法・頻度• ボトルネックはどこか

–Web サーバとか AP サーバとか• キャッシュ• 接続の管理方法• SSL アクセラレーション

– 最適な場所に最適なものを!パズル!

Page 57: qpstudy 2014.04 ミドルウェア設計の勘所

どうすればこの先生きのこれるか

• コンピュータサイエンスを学ぼう!– 基礎を知っている人は強い–新しいものが出てもすぐに順応できる–むしろ余計なことを覚えずに済む

–経験に理詰めを加えることで最強に見える「推測するな、計測せよ」  1.経験から仮説をたてる  2.計測する  3.結果をもとに理詰めで対策する

Page 58: qpstudy 2014.04 ミドルウェア設計の勘所

どうすればこの先生きのこれるか

• セキュリティの知識をつけよう–情報セキュリティと、暗号化技術–脆弱性のリスク分析ができる–私たちは、

  何を  何から  どのように守りたいのか?

Page 59: qpstudy 2014.04 ミドルウェア設計の勘所
Page 60: qpstudy 2014.04 ミドルウェア設計の勘所

The Heartbleed Bug

CVE-2014-0160TLS heartbeat read overrun

2014-04-07( 現地時刻 ) 脆弱性公表2014-04-08 JPCERT/CC等から注意喚起2014-04-13 OpenBSD チームが fork開始2014-04-19 国内被害公表 ( 三菱 UFJ ニコス )

http://www.cr.mufg.jp/corporate/info/pdf/2014/140418_01.pdf

Page 61: qpstudy 2014.04 ミドルウェア設計の勘所

The Heartbleed Bug

CVE-2014-0160TLS heartbeat read overrun

2014-04-07( 現地時刻 ) 脆弱性公表2014-04-08 JPCERT/CC等から注意喚起2014-04-13 OpenBSD チームが fork開始2014-04-19 国内被害公表 ( 三菱 UFJ ニコス )

http://www.cr.mufg.jp/corporate/info/pdf/2014/140418_01.pdf

ちゃんと追

いかけられていますか?

Page 62: qpstudy 2014.04 ミドルウェア設計の勘所

どうすればこの先生きのこれるか

• セキュリティの知識をつけよう–情報セキュリティと、暗号化技術–脆弱性のリスク分析ができる–私たちは、セキュリティ技術を使って

  何を  何から  どのように守りたいのか?

Page 63: qpstudy 2014.04 ミドルウェア設計の勘所

どうすればこの先生きのこれるか

• 新しい情報へのアンテナを張り続けよう–新しい脆弱性• 極めて緊急性の高い脆弱性にもすぐ対応できる• 読み解くためにはセキュリティの知識が必須• Heartbleedでも詳細解説出るには数日

–新しい技術、ソフトウェア• 「使ってみた」系記事• 「どう使ってみたい」系記事• 公式ドキュメント、 GitHub

Page 64: qpstudy 2014.04 ミドルウェア設計の勘所
Page 65: qpstudy 2014.04 ミドルウェア設計の勘所
Page 66: qpstudy 2014.04 ミドルウェア設計の勘所

!?

Page 67: qpstudy 2014.04 ミドルウェア設計の勘所

どうすればこの先生きのこれるか

• 新しい情報へのアンテナを張り続けよう– 新しい脆弱性

• 極めて緊急性の高い脆弱性にもすぐ対応できる• 読み解くためにはセキュリティの知識が必須• Heartbleedでも詳細解説出るには数日

– 新しい技術、ソフトウェア• 「使ってみた」系記事• 「どう使ってみたい」系記事• 公式ドキュメント、GitHub

– 急に流行が来ても、嗅覚が効く。

Page 68: qpstudy 2014.04 ミドルウェア設計の勘所

どうすればこの先生きのこれるか

• 情報交換をしよう–ブログを書こう• 突っ込まれる──だがそれが良い。• リファラー見てニヤニヤできる。

–技術の話ができる相手を見つけよう• Twitter 、 Facebook• エンジニア勉強会、セミナー、展示会

–懇親会も機会の一つ• ちょっとウザイぐらいでも絡んで行っちゃおう• Twitter とかでも絡めるようになれば勝ち

Page 69: qpstudy 2014.04 ミドルウェア設計の勘所
Page 70: qpstudy 2014.04 ミドルウェア設計の勘所

まとめ• 「ミドルウェア」ってなによ?– OS とアプリケーションの間のすべて

• Web3 層モデルで何考えればいいの?–Web+AP の中にデータを持たない– DB のデータを気合いで守る–推測するな、計測せよ

• ミドルウェアと付き合っていこう–積極的に勉強しよう、アンテナ張ろう、話し合おう!