イベント:
https://atnd.org/events/66877
スライド:
http://tech.im-dmp.net/archives/3971
- 貴重な活用事例
http://www.slideshare.net/makotouehara39/aerospike-migration
- 中身のハッシュテーブルだったりreplicationだったりの仕組みについて
http://www.slideshare.net/MasakiToyoshima/aerospike-deep-dive
- 最近追加されたデータ構造について
感想や知見:
AerospikeはKVSである。
KVSとして使うとうまく動くし、もっと高機能な何かとしては使うと面倒なことになる。
Redisのように複数のデータ構造をサポートしていると思っていたがそうではない。最近LDT(3番めのスライドで解説されている)という機能が追加されたが使いやすいわけではないし、こなれていないためバグも多そう。
いくつかの講演でバグに引っかかった話などもされていて、
KVSとして使うならばCommunity Editionでサポートなしでもいいが、
枯れていない機能は危険でEnterprise Editionを使用してサポートしてもらう前提でないと使えないとのこと。
いかんせん使われている絶対数が少ないのでバグが見つかりにくいように見える。
クラスタとしての動作は安定している。運用は楽
イベント終了後に実運用されている方にも伺ったが、自分が一番懸念していてた運用していてのトラブルなどはほとんどないということだった。
Aerospikeが最初からクラスタ構成を前提に設計されていること、SPOFがないこと、運用者が自分たちでコントロールできる項目が少なくデフォルトでいい感じの動作をしてくれる点が多いことなどから、運用はとても楽とのことだった。
クライアントリッチ
partition tableをキャッシュしたり、node down時に自動で別のserverにretryしたり、データ格納時のserializeを担当するなど、他のKVSと比べて多くの処理をクライアントが担当している。
REST APIでアクセスできるRiakなどとは対極の思想だが、node故障時のretryなどの処理を自分で書かなくていいことはメリット。
AWSでも高速、安価
https://www.aerospike.com/docs/deploy_guides/aws/tune/
この辺に載っているのですが、AWSではOn-Memory or Epehemeral Disk構成でオンプレと同等のパフォーマンスが出るとのこと
DynamoDBは高いのでそのあたりとの比較資料などがあると嬉しいっすねという話をした。
DynanoDBよりはずっと安くなるとのこと。(Dynamoが高いともいう)
同期レプリケーションのため不安定なネットワーク(Multi-AZなど)では十分なパフォーマンスが出ないことがある
イベント終了後にAerospikeの人に伺ったのだが、Multi-AZでの動作はイマイチな点も多いとのことだった。
Aerospikeは同期レプリケーションを採用している(Enterprise版のみのCross Datacenter Replication機能を使わないと非同期レプリケーションはできないとのこと)。
またRack Awarenessに関する設定があり、これを使うと同じデータをなるべく別の場所に保存させることができる(つまりAZをRackに見立てて使う)
この2つの機能を組み合わせることで片方のAZが丸ごと落ちてもデータがロストしない安心設計となる。
しかし当然AZをまたぐとレイテンシは悪化する。
実際のMulti-AZでは酷いとAZ間のpingが200ms程になることもあるそうで(特にバッチやバックアップがたくさん走る深夜)
デフォルトのtimeoutしきい値150msを超えてdown判定されてしまったり、書き込みのレイテンシが悪化したりする。(なのでMulti-AZではしきい値250msくらいで運用してもらっているとのこと)
対策としてはtimeoutしきい値を長くしたり、レイテンシが重要な用途ではSingle-AZで構成したりするそう。
とはいえこのあたりの問題はRDSのMulti-AZなどでも起きている問題ですよねという話をした。
Aerospike as a Service を計画中
詳細は言えないが秋ごろに何か発表があるとのこと。
世の中の流れとしてManaged Serviceを求められていますよねとのことだった。