202 Views
May 29, 19
スライド概要
Mix Leap Study #42として開催されたDB Night Osaka Vol.1での発表資料です。
https://yahoo-osaka.connpass.com/event/128246/
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
DB Night Osaka Vol.1 Cassandra Anti-pattern ヤフー株式会社 システム統括本部 サービスプラットフォーム本部 データベース部NOSQL 岩瀬 高博 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
自己紹介 岩瀬 高博 ・ヤフー株式会社 所属 ・社内のNOSQLチューニング、運用、技術検証、 ツール開発を担当 ・OSSが好き 特に分散処理系やデータベース関係に興味があり 前職ではOSSの分散KVSを作ったり事業化したりしていました Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 2
アジェンダ ・Cassandra? ・Anti-pattern ・まとめ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 3
Cassandra? Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Cassandra? Apache Cassandra スケーラブルなワイドカラムNOSQL ・高可用性 ・スケールアウト特性 ・テーブル定義やCQL等RDBMSに近いI/F cassandra クラスタ 70 120 150 170 ノード 1000 2000 3800 4800 2016年 2017年 2018年 現在 利用しているノード数とクラスタ数の変化 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 5
Anti-pattern Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
高可用性 高可用性に関してのAnti-pattern ・Cassandraの可用性はデータの複製とそのデータの 保存場所を物理的に離すことで実現しています ・つまり構築時点で可用性を意識した設計が 必要になります ・またアクセスする際も意識した実装が必要になります cassandra Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 7
高可用性 構築時の設計 ・Cassandraには論理Rackという仕組みがあり、データが必ず異なる Rackのノードに保存されるという機能である cassandra 1つのデータは異なるRackに3つ保存される Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 8
高可用性 構築時の設計 ・Cassandraには論理Rackという仕組みがあり、データが必ず異なる Rackのノードに保存されるという機能である。 cassandra 論理Rack上1つが全てダウン してもアクセス出来る! Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 9
高可用性 設計のAnti-pattern ・論理Rackが物理と対応出来ていない場合 cassandra ・利用しているサーバが全 て同じサーバRackに配置 ・スイッチなどの共有もX ・仮想サーバの場合HVの配 置も注意 サーバRack Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 10
高可用性 実装のAnti-pattern ・実装時のConsistency levelがALLになっている ・データアクセス時に整合性の強度を設定可能 ALLの場合(最も高い強度) レプリケーション全てにアクセスする cassandra Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 11
高可用性 実装のAnti-pattern ・実装時のConsistency levelがALLになっている ・1Nodeダウンした場合 アクセス時にエラーとなってしまう。 ALLよりも低いレベルに設定した実装が 必要となる cassandra Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 12
スケールアウト特性 スケールアウト特性に関してのAnti-pattern ・Cassandraはノードを追加することで性能を向上させることが 可能で有り、その際利用側の停止や 設定変更を必要としません。 ・つまり、ノードが増えた際に性能が 向上出来るテーブル設計と実装が必要となります cassandra Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 13
スケールアウト特性 テーブル設計とデータ分散の関係 ・テーブル設計時に指定するPartition keyによりデータ配置先を決める Partition keyとはPRIMARY KEYカラムの先頭になり、 この値のハッシュ値にデータ保存場所を決定 CREATE TABLE test ( classno text, userid text, name text, addr text, mail text, PRIMARY KEY (classno, user_id) ) この場合classnoで配置先が決まる cassandra Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 14
スケールアウト特性 テーブル設計と実装のAnti-pattern classnoにより配置先が決まるためclassnoの種類しかデータ分散しない Cassandraは基本的にデータアクセスに 必ずPRIMAY KEYの指定が必要な為、常 に一部のノードに負荷が集中することに なり、スケールアウトによる性能向上が 出来なくなる classnoが"1"しか無い場合、そのデータを持つ ノードにアクセスが集中してしまう cassandra Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 15
スケールアウト特性 テーブル設計とデータ分散 バリエーションが多いデータや、複合指定を行い偏りを無くす CREATE TABLE test ( classno text, userid text, name text, addr text, mail text, PRIMARY KEY (user_id , classno) ) user_idを先頭に変更 もしくはclassno + useridに変更 cassandra Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 16
使いやすいI/F 使いやすいI/Fに関してのAnti-pattern ・CassandraはオリジナルのI/F APIを持っていましたが現在は廃止され ており、 ユーザアクセスはSQLに似たCQLに統一 ・データ定義もテーブル方式を採用しており、 RDBMSライクなこともあり、利用時の ハードルも低い ・データ構造、クエリがRDBMSと似ているが データ管理の方式を意識した設計、実装が必要 cassandra Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 17
使いやすいI/F データ構造とアクセス方式 Table構造とCQLによりRDBMSのレコード単位でのデータ管理を連想させ ますが、あくまでもKVS的構造でデータ管理が行われます。 レコード1 レコード2 レコード3 レコード4 レコード5 レコード6 レコード7 このように管理されていません CREATE TABLE test ( classno text, userid text, name text, addr text, mail text, PRIMARY KEY (user_id, classno) ) Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 18
使いやすいI/F データ構造とアクセス方式のAnti-pattern ① Partition keyを指定しないSELECT(ALLOW FILTERING)は全てのノード へ問い合わせが発生する 非常に高負荷となり、実利用は難しい Select * From test Where name = 'ABC..' ALLOW FILTERING cassandra Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 19
使いやすいI/F データ構造とアクセス方式のAnti-pattern ② 1レコードとして管理されている訳では無いためTTLを設定し、更新など を行った場合レコード単位ではなくカラム単位で更新が行われる。 CREATE TABLE test ( classno text, userid text, name text, addr text, mail text, PRIMARY KEY (user_id, classno) ) Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 20
使いやすいI/F データ構造とアクセス方式のAnti-pattern ② 1レコードとして管理されている訳では無いためTTLを設定し、更新など を行った場合レコード単位ではなくカラム単位で更新が行われる。 右のデータをTTL付きでインサートし 何れかのカラムに更新があった場合 有効期限を伸すとした場合、更新が 行われなかったカラムから順次アクセス 出来ないといった動きになる CREATE TABLE test ( classno text, userid text, name text, addr text, mail text, PRIMARY KEY (user_id, classno) ) Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 21
まとめ ● Cassandraはそのアーキテクチャを理解した 上での利用が非常に重要 ● 設計・実装により性能が大きく変わる ● CQLでは出来るといっていても、それは良い 使い方というわけではない ● 最後になりますが、特性を理解し利用すれば 素晴らしい性能と可用性を発揮出来ます Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 22
EOP ご清聴ありがとうございました Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 23