雨ブロ【yusukixsのブログ】

アドテク関連の業界で働くエンジニアです。最近はKubernetesでコンテナクラスタを構築してサービス開発することに力を入れてます。

A-5 HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ

セッション名:A-5 HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージA-5 LINE Global Culture
登壇者:Shunsuke.N氏

以下、メモと所感。
【メモ】
IMG_1620

LINE Storage

ユーザー同士の非同期なメッセージをやりとりするため、サーバーにメッセージを保存している

マルチデバイスを対象としているため、それに耐えられるストレージが必要

IMG_1621
 

 

ストレージに求められるもの

Low latency

0-downtime フェールオーバーとフォールトトレランス

 

RedisとHBaseを適材適所で利用している


IMG_1622

 

Redisの利用開始当初、クラスタリング機能がなかったのでシャーディングして使っていた

 

HBaseは書き込み速度が速い

 

Redisのデータを冗長化してHBaseにも保存している

IMG_1623
IMG_1624
IMG_1625
IMG_1626
 

 

 

Avaliability enhancement

Redisはシングルスレッドだが、それでもLINEのサービスをまかなえるくらい速い

Redisだけで30クラスタ4775shards, 48TBmemoryを利用

RedisLuaを使っている

IMG_1627
IMG_1628
 

 

Hbaseのチューニング1

zooKeeperRegionServerのデフォルトタイムアウト60秒だが、それを短くしている

APIServerRegionServerとのタイムアウトも短くしている

フルGCでクラストから外されないようなぎりぎりのタイムアウト調整

IMG_1629
 

 

HBaseのチューニング2

リージョンの書き込み頻度を揃える

IMG_1630
IMG_1631
IMG_1632
 

 

Dual Hbase clusters

HBase冗長化

 

滅びのコマンドが実行されても大丈夫なように冗長化されてる

 

RedisHBaseの両方にリクエストを投げて、早く返ってきたほうを使う

IMG_1633
IMG_1634
IMG_1635

 

 

 

LINE's Hbase environment

Hbase は古いバージョンなので、最新のソースから反映している

 

開発環境はDocker

 

HBaseへのアクセスは全て非同期処理

HBaseのタイムスタンプを活用する

HBaseのカウンターを使わない。悪い場合はRedis100倍遅い

 

 

timestampにシーケンスを使うべきではない

月ごとにテーブルを作って、運用で切り替えることをしていた


IMG_1636IMG_1637
IMG_1638
IMG_1639
IMG_1640
IMG_1641

 

Hbase 拡張

スケールアウトだけでは追いつかない

DCにサーバーが入りきらない、ディスクが頻繁に死ぬ

 スケールアップに切り替え

 
IMG_1642
IMG_1643
IMG_1644
 

 

今後のチャレンジ

HBase0.9.0から1.0以上にバージョンアップする

IMG_1646
IMG_1647
IMG_1648
 


【所感】
LINEのストレージの話。Redisだけで48TBものメモリを使っているという途方もない数値。
毎日100億ものメッセージを処理するためにここまでの規模が必要なんですねえ。
規模は増えてるのに、HBaseのエンジニアは増えないと登壇者の方がぼやいてました(苦笑)