View
221
Download
0
Category
Preview:
Citation preview
<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.
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
• ビジネス継続性と低レイテンシが求められる
• データ管理とトランザクションが高可用性構成の重要ポイント
• データベースにこれらの機能を集約することでアプリケーションの複雑さの回避と高可用性を追求
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から取得する• データが古いか存在しない場合は、データベースからデータを取得する
• 取得時に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/
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 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を利用
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性能統計解析
Recommended