@potato4d が @rChaser53 に、社内 Private NPM をスケールアウトさせるための開発について話を聞いてみました
ゲスト
- yoshizawa takayuki(@rchaser53)
- UIT Front-End Dev.7
- Front-End に関する社内インフラの整備
概要
- LINE では Private NPM を運用している
- これまでスケールアップだけ行ってきたが、この機会にスケールアウトした
今回パフォーマンス改善が必要となった経緯
- パフォーマンスの改善と安定性の両方の問題があった
- registryのため安定性が必要だがVerdaccioは1台構成しかできない
- Verdaccio が FS と Inmemory-cache に依存しているため
- 今後Y!Jとの統合のため、ユーザ数の増加に対応しておきたい
- registryのため安定性が必要だがVerdaccioは1台構成しかできない
- 社内には Nexus と呼ばれる別の Registry もある
- これは NPM に限らず Java など他のエコシステムも利用可能
- その一方で機能はあまり豊富ではないので、現状はあくまでも npmjs にあるパッケージの向き先として活用
- このタイミングでできれば Verdaccio にすべてのリクエストを集約させたい
- User -> Verdaccio -> Nexus -> NPMJS というフローから、 User -> Verdaccio -> NPMJS へ
課題解消に向けて取り組んだこと
- ファイルベースでパッケージとメタデータを管理しているという問題について
- Shared File Systemを使って複数台のVMでファイルを共有すればOK
- Verdaccioの管理するプロセス上のメモリでメタデータをcacheとして持っている問題について
- Verdaccioは主に2種類のメタデータをjsonファイルとして所持している
- private packageの一覧
- 各pacakgeのversionごとの情報
- Verdaccioはstorageの処理の一部をcustom pluginを開発することで変更できる
- メタデータの管理方法もcustom pluginによって変更することができる
- MySQLでメタデータを管理するように変更
- 元々Verdaccioの前段に立てていたAPIサーバで管理していたメタデータを流用
- Verdaccioは主に2種類のメタデータをjsonファイルとして所持している