Azure Cosmos DB Technical Deep Dive まとめ

1
Mr.99 @yuuki99percent

リーダーは、データの書き込みを担当します。リーダーがデータを受け取って、他のフォロワーにデータの書き込みを整合性をとる。フォロワーは読み取りを担当します。 #jazug

2019-04-27 13:22:36
Saori Ando @sao_a

CosmosDBが全世界で使えるDBなのは、データを保持しているユニットをReplicaと呼んでいて、Replica単位で動いているので一つが障害でダウンしても他で保管ができる。Replica SetはLeaderとFollowerで構成されていて、一度Leaderが指示を受けてから書き込みをFollowerが行う #jazug #globalazure

2019-04-27 13:22:42
Saori Ando @sao_a

一方で、読み込みはFollowerに対してユーザからのリクエストが来る(Read Replica的なかんじね)なので、リクエストに応じて対応するNodeが違う #jazug #globalazure

2019-04-27 13:24:47
Mr.99 @yuuki99percent

CosmosDBの横方向の分散はPartionIDが担う。ちょうどいい具合にバラけるデータをパーティションキーとして指定する(例:ハッシュ値の下二桁)。 #jazug

2019-04-27 13:26:40
Akiyoshi Tsuchida @__akiyoshi__

Partitionsに選ぶキーは程よくばらけている物を選ぶ #globalazure

2019-04-27 13:26:44
Mr.99 @yuuki99percent

偏りがあるデータでパーティションキーにすると一部のクラスターに影響をあたえる。売上月だと、読み込みは直近にかたよるので負荷が偏る。例えば車のモデルと人気のあるモデルに負荷が偏る。 #jazug

2019-04-27 13:28:38
Akiyoshi Tsuchida @__akiyoshi__

Partitionごとにリージョン内で別Replica Set リージョン間は縦割りのReplica Setで同期 #globalazure

2019-04-27 13:29:07
Akiyoshi Tsuchida @__akiyoshi__

データが増えてきたら、内部的に自動でパーティションを分け直す #globalazure

2019-04-27 13:30:07
Saori Ando @sao_a

partition keyはどのパーティションキーを担当するのかによってどのレプリカセットに属するのかが決まる #jazug #globalazure

2019-04-27 13:30:16
Mr.99 @yuuki99percent

ポータルで見てみましょう。800GBのデータを保持しています。パーティションで区分されています。この棒グラフは、パーティションキーでの分散具合を示します。それぞれのパーテョンにどれぐらいの負荷がかかっているかを見れます。 #jazug

2019-04-27 13:31:32
Akiyoshi Tsuchida @__akiyoshi__

お金の話 最近最小安くなったけど、個人で使うにはまだ高い印象 #globalazure

2019-04-27 13:33:10
Mr.99 @yuuki99percent

課金はリクエストユニット。1RUは1kのデータを読み込むぐらい。最低400RUから。東日本で400RUで時間課金で0.8円。400RUの計算リソースをAzure側で予約します。予約するのでSLAを担保できる。  #jazug

2019-04-27 13:34:40
Akiyoshi Tsuchida @__akiyoshi__

RUの課金=裏のリソース占有購入 #globalazure

2019-04-27 13:35:03
かしわば @kashiwaba0121

リソースユニットを買う=Azure側でその分の計算資源を確保することになる。このためにSLAを担保することができると。 #GlobalAzure #jazug

2019-04-27 13:35:39
Ayako @ayako_omori

#GABC #tokyo 今年も2部屋で内容盛り沢山★ 竹井さんの #CosmosDB deep dive & 大平さんの IoTEdge からセッションスタート🔥 #Azure の試用ができるクーポンも配布中なので、セッション聞いてすぐ試したくなった方も安心😎 #jazug #azure pic.twitter.com/4g0nHy9ZPv

2019-04-27 13:35:44
拡大
拡大
拡大
拡大
Mr.99 @yuuki99percent

書き込み、更新などにもRUが必要。この例では50000RUで秒間50mbのデータを書き込んでいます。アロケートしているのは10万RU。もしRUが足らない場合は処理が制限されエラーがかえってくる。 #jazug

2019-04-27 13:36:44
Saori Ando @sao_a

800GBのJSONデータをうまく分散してあげると1つあたり2GBずつぐらいに分散して保持することができる。パーティションキーは最大10GBという制限があるので、その辺も考慮するのは必要 docs.microsoft.com/ja-jp/azure/co… #jazug #globalazure

2019-04-27 13:37:36
Mr.99 @yuuki99percent

CosmosDBの一貫性モデル。CosmodDBの画面に行くと音符マークがあります。見て理解できた人いますか。いませんね。これは、データを書き込める人と、反映についてを示しています。読み書き遅延をどのようにハンドルするかを示してます。 #jazug

2019-04-27 13:39:21
Akiyoshi Tsuchida @__akiyoshi__

Consistencyの話 「音符の例えわかりにくいよね」 #globalazure

2019-04-27 13:39:22
Saori Ando @sao_a

処理数に応じてRUを購入する必要がある。一時的に書き込みが多いのであればその時だけ書き込みを増やすとか、処理に応じてRUを変動する方がベスト #jazug #globalazure

2019-04-27 13:39:29
Mr.99 @yuuki99percent

Strong一貫性だと、普通のデータベースと同じ。書き込んだ瞬間に他のデータベースでも読み込みが可能になる。 #jazug

2019-04-27 13:40:54
Mr.99 @yuuki99percent

CAP定理。すべてを保つのは難しい。 #jazug

2019-04-27 13:41:48