楽天テクノロジーカンファレンス 2008にいってきました

1000人以上のエンジニア、全国各地に開発拠点をもっている
楽天のテクノロジーカンファレンスにいってきました。
分散並列処理フレームワークfaily,P2PオンメモリストレージROMAが
2009年にOpenSource化されるとのことでした。

楽天ウェブサービス

APIの紹介
  • 16種類のAPI
  • 直近だと楽天ランキングAPI
  • 1500万件,2万件の宿泊施設
  • Affiriateと連動可能
  • REST,JSON,SOAPのフォーマットをサポート
楽天ダイナミックアド

会員サービスの外部提供

楽天支払いサービス
  • 楽天会員が楽天以外のサービスでログイン
  • 買い物が出来る
  • ポイントがたまる
ユーザ機能
  • 決済STEP
  • 購入履歴確認
システム特長
今後
  • デジタルコンテンツ以外にも物販
  • 案件毎に開発だと 導入の敷居が高い
    • ライブラリの公開

レコメンド&パーソナライゼーション

技術研究所の紹介
  • MoreThanWeb
一般的なレコメンドの話
楽天のレコメンド
  • サービス固有のデータ属性
    • モール型
    • 在庫
  • 大規模データ
  • モール型
  • 在庫
    • 嗜好性を重視したい
    • 在庫が少ないものをレコメンドしすぎてもだめ
      • 独自の数式、嗜好性と在庫のバランス
大規模データへの挑戦

fairy

fairy特長
  • Scailable
    • マシンを追加するだけでよい
  • プログラマフレンドリ
  • リーズナブル/パフォーマンス
fairy使い方
  • input.filter.filter.output
  • filter interface
  • ワードカウントの例
    • input.smap(単語に分割).group_by(単語毎にグルーピング).smap(グルーピングされた単語数を数える).output
require 'fairy'
fairy = Fairy::Fairy.new
fairy =fairy.input("data/wc-input")
fmap do |i,o|
  i.each do |e|
  ...
  e.push ret
  end
end
fsuffle =fmap.group_by{|w| w}
freduce = fshuffle.smap(...)
freduce.output("data/wc-out")
  • 併売データの作成
    • あるアイテムがほかのアイテムが同じ人になっている確率
  • 現状
    • 基本的なI/F filterはOK
  • 課題
    • 大規模検証
    • チューニング

ROMA

背景
  • 大量データを格納
  • 大量トラフィックにも高速アクセス
    • Webコンテンツの特長
      • 数百KB程度のデータをPUT/GET
      • 高負荷状況でも高速アクセス
      • 対障害性
特長
  • 複数マシンから構成されるオンメモリストレージ
  • P2P
  • Ruby
  • データへの高速アクセス
    • 複数マシンに搭載されているメモリをネットワーク越しに高速アクセス
    • AppAPIを利用してROMAへアクセス
    • 開発者に分散を意識させない
require 'RClient'
rc = ROMA::Client.new
roma = rc.open
  • データを分散配置
  • 対障害性
    • 同じデータの複製を複数マシンで保持
  • 動的にマシンを追加
アーキテクチャ
  • P2Pモデルで自立的にノードの状態を管理
  • 環状(ConsistentHashing)
    • 各ノードは独自に
  • ノードの探索はクライアント側
    • データ検索のためにノードをホップしない
  • 多重化
    • クライアントからデータをputされた場合 自分の左右のノードにデータをPUT
      • 冗長度は3
    • 左右にコピーされるまで クライアントは待つ
    • 欠点
  • 動的ノード追加
    • ROMAプロセスを立ち上げたら、ハッシュ値を計算し、それをbroadcast
      • 早いもの勝ちで新規ノードを取り合う
    • ノードに参加したら左右のノードからコピ
    • データ領域
      • P:自分画担当しているデータ格納領域
      • LS:左のノードのコピー
      • RS:右のノードのコピー
    • コピーがおわったらROMA全体に参加したことを通知
今後の展開
  • 永続化
    • ROMAのデータをDiscにflash
    • 1,2台のデータが落ちた場合まではfailover可能
    • 3つ並んだノードすべてが死んだ場合はだめ
    • データがDiscに書き出されていたらリカバリ可能
  • チューニング
    • RubyGCにかかるオーバーヘッドの解消
      • Rubyの拡張ライブラリを使ってClientからのデータをGCの対象外とする
  • OpenSource
    • 2009公開!!
  • Rubyコミュニティへフィードバック
    • 大規模処理に関する知見
    • GC周り

楽天グローバルインフラ

  • サーバー台数
    • APP,Web,DB4000台
  • トラフィック
  • データセンターの場所
    • 秘密
    • データセンター自体も楽天独自運営
  • データ量
    • コンテンツ量
      • ファイルサーバは300Tbyte以上
      • HDD 2000個
    • DB
      • 20Tbyte
      • DBサーバがSANにつないで実データはSANに格納
  • どこまで内製?
    • サーバエンジニア
    • データベースエンジニア
    • ネットワークエンジニア
    • ストレージエンジニア
    • データセンターエンジニア
    • セキュリティエンジニア
    • 合計100名以上インフラエンジニア!
  • インフラ技術の取り組み例
    • Webサーバ配下は3+n台
      • スイッチが故障しても2/3
    • DBサーバ
      • SANを導入してクラスタ
      • OracleRAC
      • SlaveDB
        • 監視してだめだったらアプリケーションが参照先を変更する
  • マルチホーム
    • AS番号とIP管理質事業者の資格を
  • セキュリティ
  • 仮想化技術
    • 一部本番で導入
    • 検証中
  • 製品リスクの分散
    • マルチベンダー
    • 以前製品の仕様変更によりOSがインストールできないことがあった

国際展開

UNIX的なアレ:gihyo.jp出張所:連載|gihyo.jp … 技術評論社

台湾展開
設計思想
  • 他国展開のベース
  • 多言語対応
  • CoreSystem
    • どこの国でも共通
  • LocalSystem
    • 各国毎に用意する部分
  • Core/Localは試行錯誤
DB
  • 文字コードUTF-8
    • どこの国でもいけそう
    • 森〓外
      • WindowVistaよりつかえる4バイト文字
      • 4バイト文字が可能なRDBMS
UTF8 4byte ノウハウ
oracle o o o
my o x o
posgre o o o
ネットワーク
  • 重いとき20秒くらいかかる
    • 日本と台湾間でパケットロスが発生!!
    • mod_defalate,expire
  • 1/15にパフォーマンス向上
ファイルサーバ
  • ECは商品画像等細かいファイルがたくさん
  • ビジネスの規模でスケール
  • 保管方法
    • 商品画像
      • 将来的には数TB
    • 楽天画像,CSS
  • 共有ストレージに頼らない
  • 独自分散ファイルシステム
  • Webサーバそれぞれにファイルを保存
    • masterサーバが落ちてもサービスは落ちない
  • どのサーバにどの画像があるのかはProxyサーバd管理
  • Appからは抽象化レイヤーで管理する
    • JavaObjectにて扱える
    • Dir構造,etc...
  • 設定ファイルで分散
  • 自動同期
    • masterにファイルをアップロード
      • リリースバージョンファイルも同時にアップロード
    • Webサーバはmasterサーバをpolling
      • 更新があったらファイルとリリースバージョンを取得
    • Webサーバではリリースバージョンではない複数バージョンを持っている

リンクシェアのサーバ構築方法

なぜサーバが増えるか
  • 開発のためにdev環境
  • HAのため
  • 災害回避のため多地域
課題
  • インストール設定
    • cobbler
  • パッケージ管理
  • ハードウェアの有効活用
neXtgen
手順
  1. hard vendorが設置macアドレスをlinkshareに通知
  2. cobbler,rpm,yumが入ったHDDをデータセンターに送付
  3. LinkShareシスアドがSSHで作業
    • 5分くらいで数十台のサーバをセットアップ完了
結果

CPU稼動率は7、8割に向上

楽天テクノロジー全体概略

内製を主としている楽天の技術
  • 事業を横断してのうはうを共有
  • エンジニア1000人以上
  • 開発拠点
    • 東京,宮城,大阪,北海道,福岡
  • サービス毎にエンジニアがいるわけではなく
    • 楽天サービス全体から受注する感じ
  • 内製
    • 安心、リーズナブル
  • エンジニアの採用専門部隊あり
  • 社内勉強会
  • 福利厚生
    • 専用フィットネスクラブあり(楽天タワーで土日も営業)
    • 専用マッサージ
    • 楽天食堂

楽天ジャングル

  • エンジニアからイノベーションを起こす
    • 自由なサーバ
      • root権限
      • 面倒な調整は一切なし
      • 通常業務がこなさせていればあまった時間はジャングル
  • 自由に発表が出来る
    • 社内限定でURLがひとつ手に入れられる
  • 技術研究所の技術を利用可能
    • レコメン、顔検出、画像類似