第三回ライブドア・テクニカルセミナーに行ってきました

クラウド時代のWebストレージ/データベース戦略

自己紹介
クラウド
  • SaaS
  • PaaS
  • laaS
  • パブリック
利用者から見て
  • 物理的なサーバ、ネットワークを意識しない
  • 高可用性
  • 柔軟な課金体系
  • Amazon S3,CloudFiles...
提供者から見て
  • 高価な機器に依存しない=>スケールアウト
  • リソース有効活用でコスト効率
  • 管理、運用の手間の効率化
ライブドアの考え
  • 物理サーバリソースは投資済み
  • 提供しているサービスはSaaS的なもの
  • さらにコスト効率をあげたい
  • (l|P)aaS的なクラウド環境を自分達で付くって自分達で使う
実例
  • Webサービスのメディアストレージ
  • 安価に容量を拡張可能
  • データの冗長化/高可用性
  • 実際の構成は"あまり"意識したくない
    • アプリとストレージ双方でちょっとくらい意識した方が良い
名前
  • なかなか決まらない、最初のクラス名が決まらなくて2時間とか...
  • STFに決定
    • Step over Toled with Facelock?
  • STorage Farm
  • HTTPを利用した分散ストレージ
  • 参考にしたプロダクト
特徴
  • シンプルなkey-value
  • クライアントからは巨大なストレージプールとして見れる
  • 普通のサーバを使用して拡張可能
  • データのレプリケーション
  • apacheモジュールベース
Cons
  • ファイルシステムとしてマウントできない
    • コードの書き換えが必要
    • FUSEとかつかったらだめかな
  • すでにあるオブジェクトに追記できない
Design
REST
  • GET/PUT/DELETE
  • Bucketの作成/削除
  • Objectの取得/作成/更新/削除
  • レプリカの作成数はヘッダで指定
    • オリジナル画像は3つくらいレプリカが必要
    • サムネイルは再コンバートできるから2つでいいかとか
Example

PUT /ikebe/picture.jpg HTTP/1.1
X-Replication-Count: 3
Content-Length: 10240<内容>

基本戦略
CAP定理
  • Consistency
  • Availability
  • Partition Tolerance
  • 一貫性を捨てる
MySQL

Dual Masterが使えるようにAutoIncrement等使ってなくて
PerlのロジックをCにコピペして実装

MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.18 その他の関数
UUID は、スペースおよび時間においてグローバルに一意の数字としてデザインされています。UUID() へのふたつの呼び出しは、互いに接続されていない別々のコンピュータ上で行った場合でも、それぞれ異なるふたつの値を生成することが想定されます。

  • URI->実態のマッピング/メタ情報
  • テーブル
    • strage ストレージノドマスタ
    • bucket バケット
    • object URI<->オブジェクトID
    • entity オブジェクトID<=>ファイル実態
mod_stf.c
  • バックエンドストレージへのリクエストディスパッチゃー
mod_stf_strage.c
  • mod_dav_fileに似ている
  • GET/PUT/DELETE メソッドを受け付けてファイルの読み書き
  • GETはdefault-handlerに任せ
  • PUTはRecursiveにディレクトリを作成
  • 同一ファイル名での上書きはできない
    • 更新は一回消して内部的には別ファイルを作成
TODO
  • MySQL依存からの脱却
  • 特定のノードの使用(SSD対応)
    • Webなんて、最新と人気なものが高速に返せればよい
  • オープンソースでの公開
質問
  • ストレージのサイズはどのくらい?
    • MAX:20TB-30TB位
    • 運用:10T程度
    • 月に1Tづつ増える
  • mogile FSでは何がダメでSTFなのか

ライブドアクラウド風サービス

概要

ライブドア、“クラウド的”サービスを3月開始へ - ITmedia NEWS

  • クラウドをやってみよう
    • ライブドアの強みを生かしたサービスにしたい
      • 自社色をだしたい
      • 安価に
  • ライブドア流とは
    • Webサービスに強い
    • DataHotelというデータセンターを運用している
      • 回線、インフラを自社で運用している
利点

※AmazonEC2の利用中の企業は大部分はExtraLargeを契約しているらしい

    • 強いサーバが必要?

ニーズ

  • Webフロントサーバをクラウドにする
    • サービス規模に応じて、短時間のリソース増減が可能
  • バックエンドは専用サーバ
実装決定までの試行錯誤
技術
目指すもの
  • スケールアップ,スケールアウト
    • ユーザ操作で即時に行うことが
  • なぜ?
    • 急激なトラフィック増加があるサービスへの対応
    • スモールスタートの規模を最小にとどめて個人開発者の支援
    • 人的リソース温存
TODO
  • LVS DSR構成
  • Auto Scalling
    • Auto Scaleも今後対応予定
  • PC3?
質問
  • DSRでも裁けなくなったらどうする?
    • 1顧客の量を制限
    • 現状はLVSには余裕があるが、今後増えてきた場合はセットごと追加
  • APIを公開することは?
    • 今後は必須の条件になってくる
  • お値段は?
    • EC2よりも性能良くて(メモリ1GB)5,000-6,000
    • EC2はネットワーク従量課金であるが、PC2は?
      • 社内で賛否両論
  • インスタンス監視
  • インスタンスは月額?時間課金?
    • まだ話がいっていない
    • ログをとっているので1秒単位でも1時間単位でもできる
      • お客さまの都合により柔軟に
  • インスタンスの重複
  • Migration先はシステムが勝手に決める?
    • 決めてない
    • お客さんに選んでいただいてもよいかな?

livedoor Readerの新機能とは?

自己紹介
Livedoor ReaderのStreaming API

livedoor Readerサービス終了のお知らせ

  • livedoor readerのクロールしているフィードの更新情報をリアルタイムに取得
  • キーワードに絞りこみ
ポイント
  • 外部ドメインでも動く
  • 非公開フィードの記事はでない
リアルタイム
  • Readerがクロールしたタイミング
Streaming APIのサーバサイド実装
  • クローラ
  • apache
    • nginx+Plackに変更予定
    • 5+2台
  • mysql
  • memcached
  • perl
  • Q4M
    • ジョブ管理
    • MySQL(64bit)*2台
  • TokyoTyrant
    • memcachedの代替
    • HashDB*7台
    • キャッシュ
  • InnoDBPlugin
    • 改良されたInnoDB
    • データを圧縮してメモリ利用効率向上
  • Nginx
    • ロシア生まれのWebサーバ
    • Streaming APIのフロント
    • long-pollコネクション可
  • PSGI/Plack
  • 負荷試験ツール
    • Coroで作られたDoSツール
    • 大量のコネクションを張る
  • 記事データサイズ
    • テキストだけで1TB
    • 過去記事の削除->やってない
      • 件数不明
  • 対象:180Mフィード
  • 更新があるフィードは約1時間
  • クローラ
    • 4台
クローラの処理
  • Q4Mをつかってバケツリレー
  • daemontoolsで管理
  • Broker
    • cronで1分置きに起動
    • 必要なデータを予めmemcached
    • クロール対象のfeedをQ4M
  • Fetcher
    • Coroを使った並列処理
    • ドメイン毎に同時接続数を制限
    • URLにたいしてHTTPでとってくる
  • Parser
    • 解析する
    • XML::LibXML+XML::Liberal+独自
    • CPUパワーに依存
  • Updator
    • 更新されたものを見付けてアップデータ
    • データベースの処理速度に依存
    • 並列数は1台あたり10
Front (古いブラウザ)
Front (IE)
  • window.name+IFRAME間送信

ニフティクラウドの紹介と今後の展望

Loading...

クラウドをやる理由
  • 大規模で継続したサービスを提供可能な資金
  • お客さんをいっぱいもっている
  • いままでの技術をうまく流用できる
内部基板

VMWare+L2網+IPストレージ

  • 思想
  • 機器
    • マルチベンダー
    • 数百TB
疎結合
  • アプリの部分はモジュール化されており、基板自体を意識していない
  • ネットワーク、ストレージ、サーバ、仮想OSはお互いをほぼ意識すること無くメンテナンス構成変更が可能
  • 物理サーバはメモリとCPU箱 DISKは不要
  • ラックにサーバをいれればCloud Ready
規模の経済
  • ユーザ毎や環境ごとに特殊なことはしない
  • 大量、一括購入によるコスト削減
  • ニフティと一体の基板
  • 運用が物理台数や、仮想マシン数に比例しない