#概要
在庫の業務分析サービスの、再設計/移行による不具合解消のアーキテクト役
#担当
契約社員として、データベースをはじめとしたアーキテクチャ再設計、移行計画策定とその説得、ならびにサーバサイド(Rust)の実装。
# 使用技術
- Docker,AWS,Rust,SQS,Lambda,StepFunctions,ECS,Athena,ElasticSearch,Aurora(PostgreSQL)
# 課題
- 公開直後からシステム障害が多発して客先でデモが動かない状態で、経営陣とエンジニアの間で諍いが起こり、ほとんどのエンジニアが退社してしまっていた。
- データベースの機能の利用の仕方を間違えていたり、選定したデータストアが処理にマッチしていない、そのため日次バッチが半日以上終わらない、サービス全体のデータフロー設計が間違えている。
- メイン機能の一つであるCSVファイルダウンロード機能ではアプリケーションサーバ内で生成行われており、複数リクエストが同時に要求された場合、サーバが落ちる。
- 日次バッチがPython on StepFunctionsで、主に共有のRedshiftを利用して実行されていたため、データ投入に時間がかかり、複数顧客の同時実行が困難で、顧客が利用したいタイミングで使えない。
- など数え上げられないほどの課題が山積していました。
# 取り組み
- 優先順位を決めて、全体を再設計、データ移行手順策定から移行実施までを行い、半年弱で安定稼働まで達成し、その後大量データを前提とした本格的なデータ移行を行いました。
- DBに書き込んだ値が消えるという問題があり、Aurora(PostgreSQL)のロジカルレプリケーションによるWriterへの書き込みからReaderで読み出し可になるまでのタイムラグがあったところ、DB再設計してロジカルレプリケーションを廃止、書き込み直後はWriterから読み出しに変更。DB再設計に伴う移行計画策定からサーバサイド実装までで、まずとにかくちゃんと動かす。
- CSVファイルダウンロード機能では生成をSQS経由Lambdaに追い出し、S3にアップロードしたそのファイルの署名付きダウンロードリンクをブラウザからのリクエスト時に送り返し、ファイル生成完了までポーリングするように変更することでサーバに必要なリソースを削減するよう、再設計、移行計画策定から実装はサーバサイドを。
- このサービスは日次バッチで分析データを大量に準備するものですが、利用されるデータに偏りがあるため、データ投入に時間がかかりすぎるElastic Searchから、少々性能が落ちるが複数のParquetファイルのUploadとMetaデータの再取得だけで短時間で済ませて解決できるAthenaへ、日次バッチについてはSpark(Glue)移行することを前提に移行。Athena以外にSnowflakeも評価しましたが、利用タイミングが限られている、利用データがかなり偏っているなどの理由で説得しました。その再設計、移行計画策定からサーバサイド実装まで。
- 中でもよく使われるデータはキャッシュとしてAuroraに都度充填、あるいは日次バッチでよく使われるデータを事前充填して利用できるようにして、応答速度を上げました。この機能はまた、展示会などでデモを行う時に、AWSへのアクセスなしで、Localの仮想環境に閉じて実行するという要求があり、それを実現するためにも利用しています。
# 工夫した点
- 既存顧客に迷惑をかけないよう、シームレスな移行のための段取りをする。
- 理想型に近づけるための優先順位検討
- メンバーの技術力底上げのためのフォロー。悩み相談など。