リンクバル技術部の川畑です。先日弊社でリリースしました、リアルタイム飲み会マッチングアプリ together の裏側のアーキテクチャについて、ANKEY主催のセミナー クラウドヂカラ #AWSセミナー 〜エンジニアに求められる本当のスキルとは〜 のLT枠で発表させて頂きましたので、その内容を紹介させて頂きます。
目次
togetherの仕組み
IoTボタンを飲食店においていただき、そのお店で飲食をしているお客様にボタンを押していただくと、togetherアプリをダウンロードしている方々に通知が届きます。その通知に申し込んでお店に足を運んでいただき、合流して飲み会を楽しんでいただくアプリとなります。
togetherシステム構成
IoTボタンとtogetherアプリからインターネット・クラウド経由でサーバー側と通信をします。サーバー側はAWSで構成されており API Gateway でリクエストを受け、その受けたリクエストを Lambda で処理して DynamoDB に対してデータ入出力をするといった典型的なAWSのサーバーレスアーキテクチャーとなります。
このうちのAWSのサーバーレスアーキテクチャーを利用するにあたって、ハマったこのあたりのことについてまとめました。
①API Gatewayでハマったこと
発生した問題
何回かリクエストを投げるとhttpリクエストコード200だったのが、429(Too many requests)に変わってしまった。
原因
API Gatewayが受け付けることができる、リクエスト数の制限を超えてしまった。
解決方法
リクエスト数の上限を調整する。(※設定箇所2箇所あるので注意)
– Stage
– Usage Plan
②Lambdaではまったこと
発生した問題
突然、Push通知が繰り返し通知されるようになってしまった。
原因
Push通知を実行するLambdaスクリプトでタイムアウトが発生して、リトライを繰り返していた。
解決方法
タイムアウトの時間を延ばす。(※デフォルト「0.3秒」)
– PUSH配信処理なので、最大の「5分」に設定
③DynamoDBでハマったこと
発生した問題
指定したアトリビュート(RDBでいうところのカラム)を条件指定して、データを検索できないといった問題が開発中に発生した。
原因
DynamoDBは特定のアトリビュートを指定して、データ検索する場合、インデックスを作成しなければならない。
解決方法
インデックスを作成する。
– DynamoDBではRDBのように、任意のカラムをWHERE句に指定して、データ検索することができないので、インデックス設計は重要
together最新情報
東京六本木横丁、渋谷肉横丁でtogetherボタンの設定開始しました!
これを機会にぜひ、togetherを体験してみてください!
最後に
会場はこのような感じでした。約70名ぐらいの方の前で大変緊張しました。
普段はインフラエンジニアですが、今回はこのシステムのサーバーサイドを担当して、大変勉強になりました。今のところEC2+RDS構成のシステムが多いですが、今後はサーバーレスアーキテクチャを利用して社内のマイクロサービス化などの推進していきたいと思います。
リンクバルではエンジニアを積極的に募集中です。興味のある方は こちら ご覧ください。
修正履歴
- 2018/7/14 システム構成図に誤りがあり「VPC」→「AWS」に修正