2023/10/06 に公開 796 views

このエピソードについて

@potato4d が @rChaser53 に、社内 Private NPM をスケールアウトさせるための開発について話を聞いてみました

ゲスト

  • yoshizawa takayuki(@rchaser53)
    • UIT Front-End Dev.7
    • Front-End に関する社内インフラの整備

概要

今回パフォーマンス改善が必要となった経緯

  • パフォーマンスの改善と安定性の両方の問題があった
    • registryのため安定性が必要だがVerdaccioは1台構成しかできない
      • Verdaccio が FS と Inmemory-cache に依存しているため
    • 今後Y!Jとの統合のため、ユーザ数の増加に対応しておきたい
  • 社内には 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サーバで管理していたメタデータを流用

Refs

  • BGM&SE
    • 魔王魂/騒音のない世界/OtoLogic