2013年2月14日木曜日

Developer's Summit 2013 参加メモ(2)

★受講中に書いていたメモを、推敲無しでそのまま上げています。
★誤字脱字、内容の漏れなどあるかと思いますがご了承下さい。。

HBase at Ameba / 鈴木俊裕氏@サイバーエージェント

導入

AmebaにおけるHbaseの導入事例

自己紹介

  • @brfrn69
  • Ameba ソフトウェアエンジニア
  • テクノロジーラボラトリー

HBaseについて

  • 会場で使ったことある人は20–30%ほど
  • BigTableのOSSクローン
  • 可用性が高い、多次元ソートマップ、ハイパフォーマンス
  • Auto Sharding
    • 自動分割、運用負荷の分散

Master-Slave型アーキテクチャ

  • アーキテクチャ説明(Region,、SPOF回避、HDFS)
  • HBaseの信頼性はHDFSに依存

HBaseのデータモデル

  • 列志向データフォーマット
  • RowKey/ColumnFamily/Column/Timestamp/value
  • ColomnFamilyはIO分割したいときに使う

HBaseのAPI

  • Get
  • Put
  • Scan
    • 範囲・フィルタ
  • Increment
    • valueのインクリメント
  • CAS(Compare Ans Swap)
    • 簡単なトランザクションが実現できる

HBaseの設計

  • RowKeyの設計で負荷やデータ量が偏る可能性がある
  • RowのColumnはいくらでも増やせる。ソートもされるし、更新もAtomic
  • Joinはない=非正規化がほぼ前提
  • クエリに対してスキーマが決まる。
    • RDBだとまずスキーム
  • Codezine「初めてのHBase」読んでね!

グラフDB “Hornet”

  • Amebaのスマホ向けプラットフォームをリリース
  • デカグラフ構想
    • 各サービスのユーザ層:ミニグラフ
  • ユーザのグラフ構造を保持するデータベースが必要
    • スケール、高スループットが必須
  • 従来はMySQL+Sharding
    • Pigg、グルっぽ、なう、みんなMySQL *書き込みのスケールに難
    • Shardingの管理が大変
  • そこでHBaseの採用
    • スケールする、速い、Scan、AutoSharding
    • 元々ログ解析にHadoopを使っていたので、ノウハウもあった

Hornet

  • データモデル:プロパティグラフ
  • JavaAPIの説明
  • スキーマ(リレーションシップ)の説明:フォロー関係を例に
    • RowKey:hash(NodeId)+StartNodeId+type+direction+timestamp+endNodeId
    • ColumnFamily:“h:”(単一の値)
    • Column:""(未使用)
    • Value:Serializeしたプロパティ(dateとかfavoriteとか)
  • プレフィックススキャンを使ってリレーションを取得(正引き・逆引き)
  • 今後オープンソース公開したい。

社内ライブラリ

  • 社内で複数サービスを同時展開している
  • DB、一部基盤化はされているが、各サービスで個別に構築している。
    • MySQL,MongoDB,Casandra,,,
  • DBをHBaseに統合することで運用を一元化・障害削減したい
  • いかにRDBに慣れているエンジニアにとって簡単にできるか

Json Persister

  • 「JSONデータとしてJavaオブジェクトを永続化する」社内フレームワーク
    • Beanをシリアライズする
    • 主キーとかインデックスとかをannotate
    • 主キーで取得(load)、リスト取得(list)。シンプル。
  • このシンプルなインターフェースを介してHBaseを使おう。
  • これもオープンソース公開したい。

おわりに

  • HBase触ってみませんか?

0 件のコメント:

コメントを投稿