勢い余ってカンファレンスプラットフォームを作った話
こんにちは、寺尾です。さくナレではだいぶ久しぶりの記事を書かせていただきます。
一般社団法人日本インターネットプロバイダー協会(JAIPA/ジャイパ)という団体で JAIPA クラウドカンファレンス(略称、クラコン)というイベントを毎年開催していて、その実行委員を務めています。
今年は9月2日にオンラインで開催しました。最近のマイブームはライブ配信なので、このイベントでもライブ配信を中心に活動をしてきました。
ライブ配信プラットフォームを巡って、いろんな紆余曲折があったので、今回の記事はライブ配信プラットフォームを記事にしてみました。
■はじまり
2020年の開催では配信を専業で提供している会社さんに配信機能を提供していただいて開催しました。しかし、いくつかの課題があったので、2021年の開催では配信機能単体では無く総合的なイベントプラットフォームを検討しました。
昨年、課題に感じていたのはこのあたりです。
- マルチトラック(同時複数トラック)に対応している
- 資料ダウンロードなどのトラッキング機能がない
- アンケートの回答率が悪いので回答率を上げたい(画面にQRコードを表示しただけではなかなか回答してくれない)
そもそも、オンラインイベントを雑に分類すると、マーケティング系の部署が主催するイベントと、テック系イベントがあります。
テック系イベントでは、そこまでアンケートやトラッキングを行うのは少ないと思いますが、マーケティング系イベントの場合、KPIの測定やホットリードを見つけ出すために様々な数字や情報を取得したいのです。
今回のイベントであるクラコンは、スポンサーの方がいるのでマーケティング要素が強く、それに適したプラットフォームを探しました。
最近は、イベントプラットフォームは沢山あるので何か良いプラットフォームが見つかるだろうと思って、4つほどイベントプラットフォームを検討・比較をしましたが、課題1、2については、どこでも対応しているけれど、課題3が解決できませんでした。
素朴に某サービスの営業担当に聞いてみました。
「課題3って解決できないんですかね?」
某サービスの営業はこう答えました。
「希望を全部かなえたいなら、自社開発して開発会社に見積もりとってみたらどうですか?びっくりするくらいお金がかかりますよ」
たぶん、契約してもないのに面倒くさいリクエストする人が面倒だったんでしょうね。。。
おかげで、メラメラ。。。と闘志が湧いてきました。
ミーティングでは平静を装いましたが、かなりシェアのあるサービスだったんですが、まず絶対この会社のサービスは使わないぞと決心したとともに、希望をかなえる物がないなら、どうやったらコスパ良く実現できるかなと考え始めました。
構想
復習ですが、課題1、2をかなえるプラットフォームは沢山あります。
そして、課題3をかなえる物が何があるかというと、一番イメージが近かったのが「Zoomの投票機能」です。
Zoomの投票機能は、強制的に全面に画面が出てくるので、心ある人は気軽に回答をしてくれます。記名する手間(紙だったら名刺を貼り付けるとか)も必要ないですし、回答したくない人は×ボタンで閉じられます(強制しないの大事)。マウスを数クリックするだけで終われます。
私の経験上ですが、イベントをやった場合のアンケートの回答率(マーケ系イベントの場合)
- リアルイベントで紙で提出:30−40%
- リアルイベントでGoogleフォームなどで提出:10%
- オンラインイベントでQRコードでアンケート読み込みで回答:10−20%
- オンラインイベントで、Zoom投票で回答:40−70%
経験的には、かなり高い回答率が期待できます。これであれば実効的な効果が期待できるだろうと踏んだわけです。
しかし、Zoomと連携してくれるプラットフォームはありませんでした。同様に、Zoom投票機能のような機能を持っているプラットフォームも見つけられませんでした。
ということで、出した結論は、
- 配信はすべてZoomの機能を利用する
- Zoomと連携する、課題1、2周りの機能を連携できる機能を作る
というプラットフォームを作れば、コスパ良く開発が出来るんじゃないか? でした。
早速、実行委員会などで話し合った結果、合意が取れたので、開発を始めました。
開発メンバーは二人、開発を担当する高町咲衣さんと、設計・QAを担当する寺尾という、最小チームで挑みます。
開発コンセプト
いかに手軽にイベント参加できるかという点をこだわってコンセプトを考えました。
- 利用は簡単に!プラットフォームにユーザ登録・パスワードはなし。メール認証のみ。
- イベント参加フォームは1回のみ送信
- 配信、投票、終了時アンケート、等の情報はすべてZoomに任せる
- 複数トラック対応
- プラットフォームでは、参加者受付とダウンロードトラッキング、分析・可視化に特化する
- アーカイブにも対応する
開発期間は約2ヶ月半、予算もあまり潤沢にはない状況だったので、Zoomで実現できる物はそちらに任せて、とてもシンプルな設計としました。
インフラ設計
次に、インフラ設計をしていきます。
今回は、さくらインターネットさんにクラコンへご協賛を頂き、インフラを使いたいだけ使って良いよと言っていただきましたので、さくらのクラウドの機能を使って構成します。
こだわりポイントはこのような点でした。
- 東京と石狩で冗長構成
- サーバも東京と石狩に配置
- ロードバランサは、エンハンスロードバランサで、AnyCastで東京にも石狩にも割り振ってくれます。
- SSLはエンハンスロードバランサにオフロード、Let's Encryptで自動更新もしてくれます!楽!
- データベースはちょっと手を抜いて東京だけ
- 石狩と東京はブリッジ接続で接続
結論から書くと、このような構成にしました。
前職でこの辺は使っていたので慣れた感じですが、エンハンスロードバランサは新しく出たサービスなので初めて使いました。
昔からあるさくらのクラウドの「ロードバランサ」はルータ+スイッチの配下に置くためVPCルータのパフォーマンス的な制約を受ける点や、同一スイッチ内でのロードバランシングのため、地理的分散には対応していない、L4でのロードバランシングでした。
今回は、安定性はもとより、いろいろと試してみようと考えて、東京と石狩で地理的分散をしようと考えていたため、エンハンスロードバランサが最適でした。石狩と東京への分散はエニキャストで行われ自動的にエンドユーザに近い方にアクセスされます。LBに到着して以降は普通のロードバランサと同じような動作です
さらに、SSL処理のオフロードと、Let'sEncryptの自動更新までしてくれるのは、とてもありがたい機能でした。
※ロードバランサの各プロダクトの違いはこちらにまとまっています
具体的な設定を見てみると、HTTPからHTTPSへの転送をLBがやってくれるのも便利です。
実サーバは、このようにサーバグループ化でき、ホストヘッダ、リクエストヘッダによって振り分けを出来ます。
今回はホストヘッダによって本番環境と開発環境を切り替えることにしました。
実サーバの監視には、アプリケーションとしての動作に不具合が発生すると200以外のレスポンスコードを返すページを作成し、たとえばDBとの疎通がなくなったなどの問題が発生したらロードバランサからの切り離しが出来るようにしました。
全台のレスポンスがなくなると、構成図には載っていませんが、静的なHTMLだけを返すソーリーサーバへのリダイレクトが行われる設定としました。
プランは100CPS。ライブ配信プラットフォームといえども、配信自体はZoomなのでそこまでアクセス集中は考えられないので、このプランで十分でした。
本番配信構成
当日の配信構成は、このような感じです。録画コンテンツ、登壇者紹介、スポンサー広告動画などは、横にOBSを置いてそこから流していました。どうやって転送するかはいろいろと悩みましたが、今回NDIを使ってみました。NDIはネットワーク要件が厳しいのでそれなりの準備をしていったのですが、当日いくつかのトラブルが発生しました。この構成であれば、安定を考えればHDMI出力をそのままキャプチャして送った方が良かったかも知れませんが、良い経験になりました。それについてはまた何かの機会に書ければと思います。
完成
久しぶりの開発でしたが、大きな遅延もなく完成出来ました。高町さんが頑張ってくれたおかげです。
多くの設定は管理画面から行います。Zoom Webinarの登録は勿論、プログラム一覧や資料ダウンロードの登録もこちらから行うと、イベントページに反映されます。
新規登録が終わるとZoomにも自動的に登録します。今回は二つのトラックが同時に配信されるため、二つのZoomアカウントにそれぞれトラックAとトラックBのウェビナーがあるのですが、こちらは裏側で登録するので、ユーザは1回だけの登録で済みます。
イベントページでは、プログラムの一覧や資料のダウンロード、講演資料ダウンロードなどが出来るようになっています。そして、このページからZoom Webinarを起動すると、名前の登録画面などは特に出ずアクセス出来ます。
ふりかえり
イベント当日、開発したイベントプラットフォーム、配信現場、Zoomでの配信ともに大きな問題もなく配信完了しました。
イベントダッシュボードでは、様々な情報を一覧可能にしました。特にトラックごとの視聴数をグラフにするのはイベント主催者側からするととても高いモチベーションになるので、こだわって実装しました。
裏側はZoomからWebhookで通知を受け取ってデータを更新、WebSocketでリアルタイムにグラフや数値を更新しています。このグラフ化、イベント運営をしてると大事ですよね。視聴者数が上がっていくのを見てるとテンションが上がりますし、このセッションのあと減ったり増えたりするのがわかると、今後のプログラムの組み方にも活かされてきます。
ユーザ登録〜配信の機能に関しては、ほとんど問い合わせを頂くこともなく、パスワードなしが良かったのではないかと思います。個人的にイベントサイトごとにパスワードを入れさせるのはやり過ぎだろうという思いが強く、覚えきれないのでやめて欲しいと思っていたので、実装してみました。
アーカイブについてはZoomのアーカイブが作成完了したら自動的に公開になるのですが、約11時間の配信でしたので、アーカイブ化に時間がかかり6時間くらいかかったようです(深夜だったので厳密には確認してませんが)。アーカイブ開始までの時間が想定よりも長かったのは、新たな学びでした。
データベースの冗長化が出来ていなかった点は、課題が残りましたが、運用コストを下げるため、できるだけマネージドサービスで行いたいと考えていたため妥協した点でした。イベント終了後、エンハンスドDB(TiDB)のベータ版の提供を知りました。これを使うと分散が可能で高可用性を担保できるようです。今後は検討をしてみたいと思います。
エンハンスドDB
https://knowledge.sakura.ad.jp/29695/
今後の展開ですが、この配信プラットフォームを一般の方にも提供しようと、Webimoというプロジェクトが動いています。ぜひご期待下さい。現在、ウェイティングリストの登録を受け付けていますので、登録をお待ちしております。
Webimo
https://www.webimo.online/