kintone hiveを支える技術

公開日:2023-11-09

金春です。

CybozuDays2023 1日目が終わったあと(の深夜)にこれを執筆しています。

2023年11月8日,9日と開催されているCybozuDaysの最初のコンテンツとして開催されたkintone hive。みなさん参加されましたか?各地の予選を勝ち抜いたファイナリストによるkintone AWARD受賞をかけた決勝戦となります。

今回優勝されたモリビ植田さんさんおめでとうございます!

優勝者の決定方法

さて、このkintone AWARD受賞の決定方法ですが、会場にいる参加者のみなさんの投票とファイナリスト相互の投票によるものとなっています。

全ファイナリストの登壇が終わってから3分の投票タイムがあり、そこで優勝者が決まります。

何票くると思う?

今回のkintone hive本会場はあっという間に満席となり、サテライト会場にまで拡大して、参加者数なんと2000人!そう、この3分間に2000人が投票するのです。

3分間で2000投票がどれほどのものか

3分間に2000投票といっても、2000 ÷ 180秒 = 12投票/秒 というわけではありません。おそらく大半は投票開始から30秒以内に投票を終えます。

つまり、少なくみても2000 ÷ 30 = 67投票/秒 というスピードで投票が行われるのです。

ピンとこない方もいらっしゃるかもしれません、kintoneに1秒間に67レコードいれると思ってもらえるとだいたい合っています。

そして、おそらくこの30秒間も前半の方に集中していて、実際のピークは67投票より上になると予想されました。

投票結果を集計するためにも投票結果はkintoneに入れたい(kintoneのイベントだし)。でも、既存のkintone向けのフォームサービスではここまでの同時アクセスに耐えられません。

ないなら作る

ということで、サイボウズさんといっしょにkintone hiveのために投票システムを開発しました。
コンセプトは次のようなものです。

  • 3分間で2000投票を受け付けられる
  • 実際は最初の30秒以内で大半の投票が来る
  • 公平性のため1人で複数回投票することはできないようにする
  • 結果はkintoneに書き込む

どれだけ強力なサーバーを用意して投票を受け付けても、kintoneはAPIからの同時アクセスが100本に制限されてるため、書き込みが追いつきません。

そこで、今回は以下のような仕組みを用意しました。

Cybozu Daysで鈴木亜希子さんにも紹介していただいたアーキテクチャ図

ざっくり解説すると

  • 投票はAWS Lambdaで受けつける、大量のアクセスが見込まれるので700個のLambdaを先に用意しておく(厳密には違いますがサーバーが700台いると思っていただくとイメージが近いです)
  • 受け付けた投票はAmazon SQSにキューイングする(投票データを待機列に入れるイメージ)
  • 後段のAWS Lambdaでkintoneに負荷をかけないように書き込む(80台並列でSQSのデータを順に取り出しkintoneに優しく書き込む)
  • kintoneへの書き込みの成功/失敗も含めて投票履歴をDynamoDBに書き込む
  • すでに投票済みの端末からの投票の場合は、画面上は投票を受け付けてもkintoneには書き込まない
  • もしkintoneへの書き込みに失敗したものがあれば、別のAWS Lambdaで後ほど書き込む
  • kintoneに登録された投票データはgusuku Customineを使って集計して結果を出す

という仕組みです。kintoneに投票データを書き込むまでを弊社アールスリーが担当し、kintoneに入ってからのgusuku Customineでの集計処理はサイボウズさんで作っていただきました。

gusuku Customineの部分は、今回はじめてgusuku Customineを使う方があっという間に作ってしまいました。gusuku Customineすごいですよね!(自画自賛)

実際の結果

弊社社内でのテストでは、12秒間で2500投票受け付けられていました。なのでドキドキしながらも自信を持って本番を迎えました。

実際の参加者は約2000名でしたが、投票されない方もいらっしゃったので、投票数は2000よりも少ない数でした。今回のシステムは無事これをすべて問題なく捌ききりました。

当初の予想通り、最初の20秒くらいでおよそ1000の投票があり、その後は徐々に増えるという感じで推移しました。

投票の時には自社のブースそっちのけで、システムをリアルタイムで見守っていましたが、無事に捌けたので、とてもほっとしましたwwww

kintoneの限界を超える

kintoneにはkintoneの限界があります。ただ、それも今回の仕組みのように別のサービスをうまく使って工夫することで回避することが可能です。

弊社では、このような高負荷になるようなシステムを作ることも得意としています。kintoneでは無理そうだな、という要件があっても弊社にご相談いただければ解決できる可能性があるので、諦める前に弊社にご相談ください。

さて、これが公開される今日はCybozuDays 2日目です。お越しいただく方は、ぜひCybozuDaysを楽しんでください。

今回の仕組みに興味を持たれた方は、ぜひ弊社ブースに起こしいただき、僕を捕まえてください。

投稿者プロフィール

アバター画像
金春 利幸
"gusukuシリーズプロダクトマネージャー
ノーコード(No-Code)の有効性に着目し、kintoneとgusukuシリーズの普及のため全国を飛び回っています。"