超大規模webの定番構成 mysql & memcached - obci.jp · •1,300万クエリ ......

47
<Insert Picture Here> 超大規模Webの定番構成 MySQL & memcached 日本オラクル MySQLグローバルビジネスユニット 梶山 隆輔 MySQL Principal Sales Consultant, Asia Pacific & Japan

Upload: buiquynh

Post on 18-Aug-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

<Insert Picture Here>

超大規模Webの定番構成MySQL & memcached日本オラクル MySQLグローバルビジネスユニット梶山 隆輔 MySQL Principal Sales Consultant, Asia Pacific & Japan

2

以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。

OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。

Copyright© 2010, Oracle. All rights reserved.

The world's most popular open source database世界で最も有名なオープンソース データベース

MySQL 60.5% PostgreSQL 51.9%

出典:「第3回オープンソースソフトウエア活用ビジネス実態調査(2009年度調査)」独立行政法人 情報処理推進機構

PostgreSQL

MySQL

PostgreSQL

Oracle

SQL Server

IBM DB2

MySQL出典:「ITmediaリサーチインタラクティブ

第6回調査:DBMS」 ITmediaエンタープライズ、ITR

MySQL:The World’s Leading On-Line Database

Powering 9 of the top 10 most trafficked sites on the web** http://www.alexa.com/topsites

Webにパワーを与えるオープンソース

Enterprise 2.0TelecommunicationsOn Demand, SaaS, Hosting

Web / Web 2.0 OEM / ISV's

新生銀行

MySQLのお客様

コミュニティ版と商用版

→ データベース機能はコミュニティ版にも「全部入り」

プラガブル ストレージエンジン→ テーブル毎に機能変更可能なMySQL"だけ"の機能

オープンソース&企業としての開発と管理

→ 全てを知るエンジニアによる責任を持ったサポート

MySQLのコミュニティ版と商用版

• サーバ製品は「全機能」をコミュニティ版にも搭載• 商用版では付加価値として技術サポートや管理機能を提供

• コミュニティ版ソフトウェアはGPLでソースコードも提供

• MySQL Community Server• MySQL Cluster (Community Edition)• MySQL GUI管理ツール• MySQLコネクタ (JDBC, ODBC, etc)

• ドキュメント

• フォーラム

コミュニティ版

• MySQL Enterprise• MySQL Enterprise Unlimited

•商用ライセンス• MySQL Embedded Server

• MySQL Cluster• Standard Edition• Carrier Grade Edition

• トレーニング• プロフェッショナルサービス

商用版

• サブスクリプション• MySQL Enterprise

• ライセンス (OEM):• 組み込みサーバ• サポート

• MySQL Cluster Carrier GradeEdition

• トレーニング• コンサルティング• NRE

サーバ

モニタリング

サポート

• MySQL Enterprise Server• 月次ラピッドアップデート• 四半期サービスパック• ホットフィックスプログラム• 延長ライフサイクルポリシー

• 全MySQLサーバの一括監視• Webベース ダッシュボード• 組み込みアドバイザ• スケールアウト構成のサポート•Query Analyzer

• 24 x 7 x 365 製品サポート• Webナレッジベース• コンサルティングヘルプ• バグエスカレーションプログラム• パフォーマンスチューニング

MySQL Enterpriseについて

Investment in MySQLRapid Innovation

• Make MySQL a Better MySQL• #1 Open Source Database for Web Applications• Most Complete LAMP Stack• Telecom & Embedded

• Develop, Promote and Support MySQL• Improve engineering, consulting and support• Leverage 24x7, World-Class Oracle Support

• MySQL Community Edition• Source and binary releases• GPL license

Oracle + MySQL Customers

• Product Integration• Oracle GoldenGate (Complete!)• Oracle Enterprise Linux + Oracle VM (CY 2011)• Oracle Secure Backup (CY 2011)• Oracle Audit Vault (CY 2011)• Oracle Enterprise Manager (CY 2011)

• Support• Leverage 24x7, World-Class Oracle Support• MyOracle Support

RC

MySQL 5.5

InnoDBがデフォルトのストレージエンジンに• ACIDトランザクション、外部キー、クラッシュリカバリ• 性能/CPUスケーラビリティの向上、データ圧縮

高可用性の向上• 準同期型(Semi-synchronous)レプリケーション• レプリケーション・ハートビート

ユーザビリティの向上• SIGNAL/RESIGNAL• パーティショニングオプション追加• PERFORMANCE_SCHEMA

RC

MySQL 5.5 - 性能の向上

• InnoDBの性能改善点• Multiple Buffer Pool Instances• Multiple Rollback Segments• Extended Change Buffering

(with delete buffering, purge buffering)• Improved Purge Scheduling• Improved Log Sys mutex• Separate Flush List mutex

• MySQLサーバの性能改善点• Better Metadata Locking within Transactions• Split LOCK_open mutex• Eliminated LOCK_alarm mutex as bottleneck• Eliminated LOCK_thread_count as bottleneck• Improved Performance/Scale on Win32, 64

• クラッシュリカバリの性能が10倍以上向上

RC

Intel Xeon X7460 x86_64 4 CPU x 6 Cores/CPU 2.66 GHz, 32GB RAM Fedora 10

MySQL 5.1.40(InnoDB built-in)

MySQL 5.1.40 (InnoDB Plug-in)

MySQL 5.5.4 (New InnoDB)

MySQL 5.5 Sysbench ベンチマーク

RC

MySQL 5.1.40(InnoDB built-in)

MySQL 5.1.40 (InnoDB Plug-in)

MySQL 5.5.4 (New InnoDB)

Intel Xeon X7460 x86_64 4 CPU x 6 Cores/CPU 2.66 GHz, 32GB RAM Fedora 10

MySQL 5.5 Sysbench ベンチマーク

MySQL Server 5.1 + InnoDB Plugin

• 現在のMySQL 5.1に新ストレージエンジンInnoDB Pluginを同梱 (5.1.38から)※デフォルトは従来版のInnoDB

• InnoDB Pluginの新機能:• スケーラビリティ / 性能改善

Google提供のパッチによる改善• テーブルデータ圧縮• インデックス作成高速化• パフォーマンス関連メタデータ追加

• プラグイン部分は2010年4月にGA

17

Asynchronous Replication

18

Semi-Synchronous Replication

memcached

• ビジネス継続性と低レイテンシが求められる

• データ管理とトランザクションが高可用性構成の重要ポイント

• データベースにこれらの機能を集約することでアプリケーションの複雑さの回避と高可用性を追求

Using Data Stores to Achieve HA & Scale

memcachedとは“A high-performance, distributed memory objectcaching system, generic in nature, but intendedfor use in speeding up dynamic web applicationsby alleviating database load” *

* http://code.google.com/p/memcached/wiki/FAQ#What_is_memcached?

• "参照がメイン"のWebサイトでスケールアウト構成を実現• 動的に生成されるページのロードを高速化• 既存のデータベースのリソースの利用を効率化• 数十台から数百台規模のノード構成をサポート• インターコネクトや特殊なハードウェア不要• 拡張およびカスタマイズが可能

memcachedの特徴

• メモリがあればどこでも実行可能• Webサーバ、アプリケーションサーバ、データベースサーバ、もしくはmemcached専用のサーバ

• CPUの利用率は低い• 複数のOSやCPUアーキテクチャをサポート

• オープンソース - コミュニティベースで開発• サーバはBSDライセンス• 最新バージョンは1.4.x系• 各種プログラミング言語向けクライアントAPIやライブラリ

• Perl, Python, Ruby, Java, C#, C, Lua, MySQL, など….• http://www.danga.com/memcached/apis.bml

memcachedが開発された経緯

• ブログサイトLiveJournalの性能向上のため• 動的ページに対して1日2,000万ページビュー以上

• 100万以上のユーザ数

• 導入後• より高速なページのロード

• データベース負荷の低減

• リソースの効率的な利用

• データベースアクセスの高速化

• 動的にページが生成されるデータベースの負荷が高いWebサイトに最適

• 800 memcached

• 40 memcached• 140 MySQL• 70 web

• 14 memcached• 166 MySQL• 244 web

• 79 memcached• 30 MySQL

何台のmemcachedサーバを使用?

memcached: What is *not*

• 信頼性の高いデータストレージ• 障害発生時にはデータを失う

• 高い可用性• 冗長性無し、フェールオーバー機能無し

• セキュア• 認証のメカニズム無し

• 高性能データベース• ACID特性無し

• データベースのキャッシュシステム• データの無効化の機能無し• アプリケーション中心の利用

memcached Server

• Slab allocator - memcachedのメモリ管理方法• あらかじめメモリの領域をアロケートしておく• 領域内を複数のサイズのChunkに分割• データサイズに適したChunkを選択し格納

• キャッシュの無効化• LRU(Least Recently Used)とタイムアウト• クライアントからのコマンド

• libeventによるイベントハンドリング• シンプルなプロトコル• サーバが内部にハッシュテーブルを持つ• サーバは他のサーバの存在を知らない

mc

ms

クライアント X1) キー“foo”に値“seattle”を登録

2) キーのハッシュ値を元にサーバのリストを参照

3) サーバBを選択

4) サーバBに接続しキーと値を登録

クライアントZ5) キー“foo”による検索

6) 登録時と同じロジックでサーバBを選択

7) キー“foo”に対する値“seattle”を取得

mc mc

X Y Z

ms ms

A B C

hash server listselect server

connectset key value

get keyconnect

get value

key = valuefoo = seattle

Basic memcached Example

memcachedの代表的なコマンド

• get/gets : キーを元に値を取得

• set/add/replace : キーと値を登録

• append/prepend : 既存の値にデータを追加

• incr/decr : 既存の値を加算/減算する

• cas : 原子性を持ったデータの置換(compare and swap atomic)

• stats : memcachedの稼働状況を表示

memcachedクライアントの役割

• キーを元にサーバのリストを参照• オブジェクトのシリアライズ• データの圧縮• “コンシステントハッシュ”による分散

• memcachedサーバができないこと…• データのダンプやロード• データの冗長性• フェールオーバー• ユーザ認証

memcached& MySQL

利用例: リードパススルー

• データをデータベースではなく、memcachedから取得する• データが古いか存在しない場合は、データベースからデータを取得する

• 取得時にmemcachedを更新

• 同じデータに対する移行のリクエストは、memcachedから取得できる

MySQLのmemcached関数

• 概要• MySQLのUDF(ユーザ定義関数)として実装• libmemcachedがベース• memcachedサーバ群をSQLで管理

• インストール• CREATE FUNCTION memc_servers_add

RETURNS INT SONAME"libmemcached_functions_mysql.so";

• https://launchpad.net/memcached-udfs/

memcached UDFの利用例

• UDFを利用するトリガを作成する例

Web Servers

ApplicationServers

MemcachedServers

MySQL Server

MemcachedClients mc mc

ms

read write

mc

ms ms

cache update

Memcached & MySQL

MySQL & memcached適用例

• Facebook - 約4億ユーザが参加する世界最大のSNS• 数千台のMySQLサーバを運用中

• 分散キャッシュmemcachedと組み合わせて負荷分散• ユーザの急激な増加に対応(2008年1億→2010年4億)• レプリケーション*で米国大陸を横断するデータ転送

* MySQLの標準機能• 秒間のトラフィック

• 1,300万クエリ以上• 参照:3,700万行• 更新:350万行• 440万IOPS

MySQL Cluster

MySQL Cluster Data Nodes

MySQL Cluster Application Nodes

MySQLClusterMgmt

Clients

MySQLClusterMgmt

MySQL ClusterのアーキテクチャSPOF(単一障害点)の無いデータベースクラスタ

NDB API

JDBC/ODBC/etc

SQL BasedApplications

MySQLServer

C++/JavaApplications

ManagementClient

ManagementNode

LDAP

MySQL ClusterDataNode

ND

B A

PI

MGM API

DataNode

DataNode

DataNode

MySQL Cluster

• 非共有ディスク型高可用性クラスタソリューション• サーバの追加により性能&データ容量を拡大するスケールアウト構成

• 無停止でのサーバ追加&データ再構成が可能• データを複数のサーバにデータの複製を分散配置

• マルチマスタ構成、単一障害点無し• ミリ秒単位での障害検知、自動フェールオーバー、自動リカバリ• ACID準拠のトランザクション

• 通信系の加入者データベースやWebのセッション永続化など、 シンプルなトランザクションが同時多発的に発生するシステム向き

• SQL以外にもC++やJavaのAPI経由で直接データアクセス可能

SQL Node(MySQL) ‏

• 標準的なSQLインターフェース• スケールアウトによる性能向上• レプリケーション構成可能

• 高パフォーマンス• C++ API• 開発ガイドを公開

• データストレージ (ディスク/メモリ) ‏• 自動的なパーティショニング• ローカル&グローバルチェックポイント• スケールアウトによる容量と可用性向上

• 管理および設定• "Arbitration" 調停役• 2ノードでの可用性

NDB API(Application) ‏

Data Node(NDB Storage Engine) ‏

Management

Node

MySQL Clusterを構成するコンポーネント

SQL Node(MySQL)

NDB API

Data Node(NDB Storage Engine)

X

NDB APIによるアクセス

• NDB API = 高パフォーマンス C++ API• キー、インデックススキャン、テーブルスキャン• ACIDトランザクション対応• オブジェクト指向エラーハンドリング• SQLでは達成できない非常に高いパフォーマンス

>レイテンシーの低減による10倍以上のスループット

>Javaプログラマの「普通の」コーディングで利用可能

MySQL Cluster Connector for Java

• MySQL Cluster Connector for Java• ネイティブJavaインターフェース• SQLは利用しない

• MySQL Cluster Java API :ドメインオブジェクトモデルのパーシステンスAPI• 別名Cluster/J• Javaアプリケーションに組み込んで利用

• JPA準拠のO/Rマッパーでのアクセス• MySQL Cluster Plug-in for OpenJPA• 主キーによる参照、更新、挿入や削除は

Cluster/Jで• その他の処理はJDBCを利用

Measured as CPU time on a single host

JDBCドライバとCluster/Jとの比較

Cluster 1

同期型レプリケーション

Cluster 2

MyISAM MyISAM InnoDB

非同期型レプリケーション

Geographical Replication - 地理的冗長性の確保

• クラスタのノードグループ間では同期型レプリケーションで、

冗長性を確保

• 地理的に離れたクラスタ間で、双方向の非同期型レプリケー

ションを行い、地理的冗長性を

確保

• (MySQL Clusterではない)通常のMySQLサーバへ非同期型のレプリケーションを行い、

レポート生成や課金処理など

のアプリケーションを実行

米国海軍 航空母艦用 航空機管理システムAviation Data Management and Control System (ADMACS)

• 艦載機・飛行甲板の運用管理• 空母に搭載された航空機のメンテナンス、燃料補給計画の管理

• 空母上の飛行甲板の利用を含む、フライトプランの作成および管理

• MySQL Cluster• 4ノードのLinux上で利用• 単一障害点のない完全な冗長性• 障害を想定したテストでの安定性とフットプリントの小ささが選択理由

• 世界最大の軍艦 ニミッツ級航空母艦で運用中

NEC モバイルインターネットプラットフォーム

• 3G通信の顧客情報管理、ユーザ認証、アクセス制御、課金システム• アプリケーションによってSQLおよびAPIを利用• 2,000万加入者のデータを管理• 2,400TPSを処理

• 将来の加入者やデータ量、処理能力の増加に備えたフレキシブルなサーバ構成が可能

お客様の声

MySQL Clusterの安定性と処理性能はすでに理解していましたが、特に選定の決め手となったのは導入の容易性と、拡張性の高さです。

5.5

5.1

2.3

MySQL Server - RCInnoDBや内部ロックの排除による性能改善準同期型(Semi-synchronous)レプリケーション

MySQL Server - GAInnoDB Pluginによる性能改善Web、金融、公共などでの安定稼働実績も多数

MySQL Enterprise Monitor全MySQLサーバの一括監視Query AnalyzerによるSQL性能統計解析

まとめ

• MySQL + memcachedは実績多数!!• MySQL Cluster

• 高パフォーマンス&高可用性クラスタソリューション• NDB APIでキーバリュー型ストレージとしても利用可能

• オラクルはMySQLを今日も改良中!!

MySQLコミュニティ版はこちらhttp://dev.mysql.com/