開発経験
・iOS
・Android
・PHP
・Ubuntu
・AWS
・MySQL
・Yii
・Yii2
詳細:
現在も携わっているプロジェクトとなります。
プロジェクト初期から関わっており、
最初はPHPでのAPI実装から携わりました。
AWS RDSのMySQLサーバーにDBを作成し、
RDSとEC2を接続してyiiでActiveRecordでデータを取得し、
APIを作成しました。
これまでC++をメインにやってきたので、
型が無いということに一番戸惑っていました。
APIを作成できるようになったら、
iOSの開発を引き継ぎました。
こちらは特に苦労なく実装を進めることができました。
漫画を読めるアプリを作成した後、
複数の漫画が読めるアプリを作成しました。
その後Androidのアプリ制作も引き継ぎました。
Androidでの開発も初めての業務レベルでの実装ではないので、
特に苦労することはなく実装できました。
前職(釣りゲームプロジェクト等)では、NDKでのC++がメインだったのですが、
SDKのJavaとの連携も記載していたので、Javaだけの実装も苦労なくできました。
苦労した点はサーバーの負荷対策です。
定期的にPush通知でユーザーが一気に集まるタイミングができてしまって、
APIでクエリ詰まりが起きてしまっていました。
ひとまずはRDSのIOPSのオプションを付与しました。
そこからは負荷対策を実装していくことになりました。
まずはPush通知の分散対策を実行しました。
秒間のアクセスを減らすことができたら良かったので、
数秒ずつずらすようにしました。
また、TOPページへのアクセスが高負荷となっていたので、
APIの簡素化をして不要なデータは返却しないようにし、データを圧縮しました。
サーバーが安定してしばらくすると、インフラ周りの作業を引き継ぎました。
この時点で、iOSの作業とAndroidの作業は別の方に引き継いでおります。
AWSのコンソールからインフラの管理の学習をしていき、
EC2やRDSの状況把握をCloudWatchなどで、確認できるようになりました。
ここからはコストの削減に努めます。
まずはRDSのIOPSのオプションを2,000つけていて、
RDSコストが大きくなっていたので、
そのオプションを消しました。
APIの負荷からのクエリ詰まりのためにつけていたオプションですが、
APIを新しいものにして、アプリ側にページャーを実装することによって、
Push通知をバラけさせたタイミングよりも負荷は大きく下っています。
そのためIOPSのオプションを消してもRDSは安定しました。
また、RDSの負荷とサービスのプロモーションのロードマップから、
向こう1年は急激に負荷が増えることが無いと判断したため、
リザーブドインスタンスの購入をしました。
この時点で大きくコストカットできておりますが、
APIのページャー実装なども伴って、
EC2への負荷もかなり下っていたので、
AMIを取得し、インスタンスタイプを下げました。
それまでの半分の性能のサーバーにしました。
3台稼働させていたサーバーも常時稼働を2台にし、
4台まで自動スケールするようにしました。
今までは別サーバーからのAWSコマンド実行による、
EC2のCronでのスケールだったのですが、
AWSのAutoscalingを使用しての自動スケールにしました。
また常時稼働の2台はリザーブドインスタンスとして、
前年度より半分のコストとなりました。
APIの負荷をさらに下げた部分の実装ですが、
yiiフレームワークだったAPIをYii2フレームワークへ変更しました。
これにともなってActiveRecordの生成はセッション内ならキャッシュされるようになったので、
外部結合などで別テーブルデータを持ってきても大きな負荷にならないようになりました。