#概要
在庫の業務分析サービスの、不具合解消のアーキテクチャ再設計とシームレス移行計画策定/実施。
#担当
データベースをはじめとしたアーキテクチャ再設計、移行計画策定とその説得、実施、ならびにサーバサイド(Rust)の設計と実装。
エンジニアの教育、チームビルディング。
# 使用技術
- Docker,AWS,Rust,SQS,Lambda,StepFunctions,ECS,Athena,ElasticSearch,Aurora(PostgreSQL)
# 課題
- 公開直後からシステム障害が多発して客先でデモが動かない状態で、ほとんどのエンジニアが退社してしまっていた。
- 日次のデータ投入バッチとそれに続く集計分析バッチが昼過ぎまでかかり、顧客がサービスを利用したい朝イチに利用できず、クレームが積み上がっていた。
- メイン機能の一つであるCSVファイルをダウンロードしようとすると、サーバが落ちてサービス提供できなくなっていた。
- 売り上げを増やすためにより大きなクライアントを受注してしまったため、長期の待機をお願いしてしまい、信用問題になりかけており、解決までの猶予がほとんどなかった。
# 取り組み
- 優先順位を決めて、大量データを前提として全体を再設計、データ移行手順策定から移行実施までを行い、新規機能を追加しながら、シームレスにデータ移行を行い、半年弱で安定稼働まで漕ぎ着けました。
- DBに書き込んだログイン情報が消えるという問題があり、DBの機能の誤用を修正、DB周りを再設計して、移行計画策定からサーバサイド実装ま、3フェーズで移行を行い、まずログインして画面を動かすところまで1ヶ月半で達成。
- 日次バッチの突き抜けを回避するため、Cron+ElasticSearchからSQS-LambdaとAthenaを使った並列データ投入/集計処理に再設計/実装。夜明け前にバッチを完了し、サービスの朝一利用を可能に。分析処理はSpark(Glue)で再設計、実装支援。Snowflakeも評価しましたが、利用タイミングが限られている、利用データがかなり偏っている、料金が高いなどの理由で見送り。
- ダウンロードするCSVファイルがアプリケーションサーバ内で生成されており、複数リクエストが同時に要求された場合、OutOfMemoryでサーバが落ちるので、Lambdaを使った非同期処理とS3から署名付きリンクでダウンロードに移行。同一リクエストには生成済みのファイルをダウンロードする仕組みを実装し、全社売上などの処理を1回実行で済ませることによって、Athena化と合わせて該当処理のAWS利用料を1/10以下に削減。
- 中でもよく使われるデータはキャッシュとしてAuroraに都度充填、あるいは日次バッチでよく使われるデータを事前充填して利用できるようにして、応答速度を上げました。この機能はまた、展示会などでデモを行う時に、AWSへのアクセスなしで、Localの仮想環境に閉じて実行するという要求があり、それを実現するためにも利用しています。
# 工夫した点
- 既存顧客に迷惑をかけないよう、シームレスな移行のための段取りをする。
- 理想型に近づけるための優先順位検討
- メンバーの技術力底上げのためのフォロー。悩み相談など。