学習塾向けシステム開発 パフォーマンス改善
- 担当:フロント・サーバーサイド - 業務:要件定義・設計・実装・テスト - 技術:PHP / Laravel() / Python / TypeScript / Vue.js - 詳細 - Oracleを別システムと共用で使用していたためOracleからPostgreSQLへ移行しました。移行することでソースコード上でSQLを記述している箇所に関して、互換性がない個所の調査・適切な文法への改修を行いました。 - SQLを変更したファイルを対象とした、PHPUnitを用いたテストコードの作成を行いました。 - システム内で、ユーザが参照する頻度が高い機能(以下、該当機能)についてのキャッシュ機構の要件定義・設計・実装を行いました。キャッシュ機構には、キャッシュクライアントの導入・キャッシュの自動更新機能が含まれます。 - キャッシュクライアントには、レスポンスの高さが求められていた、かつ、データの永続化は必要がない(1日経過するとキャッシュは削除してよい)という要件から、インメモリ型のNoSQLであるRedisを採用しました。 - 該当機能は外部システムのデータを参照しており、テータの変更を検知する必要があったため、キャッシュの自動更新機能の実装が必要でした。キャッシュの自動更新機能については、PostgreSQLのトリガとPL/SQLで記述したトリガファンクション、Laravelのバッチ処理を使用しています。 - Webサーバーへの負荷分散を目的とし、ロードバランサーが導入されました。それに伴い、増設したWebサーバへのRedisのレプリケーション設定作業を行いました。 - 負荷試験の実施を負荷試験ツールLocustを用いて行いました。テストシナリオをPythonにより記述しました。 - DB移行後の、SQLパフォーマンスチューニングを行いました。実行計画の実施・ボトルネックの特定と原因の解消(適切なindex設定・テーブル結合の見直しなど)をすることで、最大20秒程かかっていたクエリを3秒程度まで短縮することに成功しました。