音声書き起こし
1. オープニング
@potato4d
こんにちは。UITのpotato4dです。ユーザーインターフェースとテクノロジーを愛する開発者のための、ポットキャストUITインサイド、今週もやっていきたいと思います。 今回はですね、UITで管理しているプライベートnpmである、Verdaccioオの、スケールアウト、パフォーマンス改善っていうところについて、このあたりの UITの、テントに関するサーバーを含むような、社内ツールの開発を担当されている吉澤さんに話を聞こうと思います。吉澤さん、よろしくお願いいたします。
@rChaser53
こんにちは。よろしくお願いします。
@potato4d
では早速自己紹介の方お願いしてもよろしいでしょうか。
@rChaser53
はい。UIT Front-End Dev.7 チームというチームに所属しております、よしざわと申します。このチームは基本的に 社内向けのサービスをひたすら開発している人間とこのようにやってるシーンありまして、私はその中で、プライベーションエンジニ
@rChaser53
するように追加で彼氏の方をしておりまして。ま、そのあたりの開発をメインにやって。
@potato4d
ありがとうございます。じゃあ今日はちょうどそのあたりについてお話を伺うことができるっていう風な感じですかね。よろしくお願いします。 では、もう早速本編の方行こうかなと思うんですが、少し、もうオープニングと、あと、そうですね、エピソードのタイトルで、ネタバレしてる部分があるかなと思うんですけど、今回ですね、プライベートnpmの、スケールアウト ます、パフォーマンス改善っていうところをやっていただいたかなと思うんで、どんな感じのことをやったかっていうのをざっくり教えてもらってもいいですか。
2. 今回やったこと
@rChaser53
はい。Verdaccioは、 Authentication、認証回りだとか、まあ、ストレージだとかの機能を、自分でプラグインを開発することで変更することができるんですね。 今回はそのストレージプラグインの開発を行って、スケールアウトができるようにしたという内容になります。
@potato4d
なるほど。ありがとうございます。 Verdaccioといえば、結構プライベートnpmを、こう、自分で立てるossとして有名かなと思うんですけど、そもそも社内のプライベートnpmの状況って今どんな感じにやってるんでしたっけ。
@rChaser53
現状、主に2つ、社内ではプライベートmpmがありまして、Nexus、商用のNexusのツールが ありまして、それと、UITが管理しているプライベートnpa、ベルダチがあるみたいな話になっております。
@potato4d
Nexusっていうのは、なんか、もう少し広いやつですかね。
@rChaser53
そうですね、あの、色々なレジストリ、Rubyだとか、Pythonだとか、いろんなものをレジストリとして利用できるやつですね。そのうちの一部の機能として、npmレジストリを提供している。 ですが、まあ、ちょっと、やはり、汎用的に広げすぎたっていうところがあって、細かいところまで要望は答えられないので、UITが独自で、プライベートのnpmの方のポスティングだとか、開発だとか、運用をやってるみたいな形になります。
@potato4d
なるほどな。ちなみに、使い分けはどんな感じでやってる状態ですか。
@rChaser53
はい。Nexusの方がやはり古くからあるので、Nexusにしか存在しないパッケージがあるような状況になってます。 ですので、VerdaccioのアップストリームのNexusを使用し指定しておりまして、Verdaccioにベピーインストールで探しに行って、なかったら、Nexusの方に参照しに行くみたいな形にまずなっております。 また、基本的にVerdaccioはプロセスが1つしか建てられない、
@rChaser53
スケールアウト、冗長化ができないような構成になっておりますので、プライベートばっかジの、管理はVerdaccioにもらって、 ま、それ以外は、Nexusを利用するという風な運用になっております。
@potato4d
負荷のかかりうる汎用的な部分に関しては、Nexusに移譲しながら、こう、我々の使い勝手だったり、機能っていうところが要求される部分で、ブルタッチを使っているっていう風な構成というとこ。
@rChaser53
そうですね、そうですね、あの、READMEとかのGUIがNexusでは存在しないので、ちょっとそれだと 使いにくいかなという風なところはあるかなと思ってます。
@potato4d
ありがとうございます。 今も少し触れましたが、Verdaccioオがスケールアウトができないみたいな、あのシングルプロセスしか立たないみたいな話があったかなと思うんですけど、今回の本題として パフォーマンス改善みたいなところがあげられるかなと思うんで、そこちょっとお伺いしたいんですけど。そもそも、今の話だと、こう、重いような処理はNexusに移譲していて、プライベートなものに限定してブルタッチを使ってるみたいな話だったかなと思
@potato4d
ですけど、そんな中で、どういう形で今回パフォーマンス改善みたいなところのモチベーションが出てきた感じなんでしょうか。
@rChaser53
元々、パフォーマンスを改善したいなというふうな話はあったんですが、 さらに今回、10月にあの、yaho。japanとの統合の話がありまして、ユーザー数が、急激に増えるよねという風なところがあって、 なんとかスケールアウトをしたいなという風な話が上がったっていうところがあります。
@potato4d
なるほどなるほど。まあ、結構。じゃあ、今後、ユーザー数が一気にこれまで以上に増えるんで、そこに備えておきたいっていう風なところですね。 はい。ちなみに、なんでしょう。ユーザー数の増加に対して、単にこう対応するっていうだけであれば、例えば社内ツールっていうところを加味すると、単にスケールアップするみたいなのも選択 としてあったかなと思うんですけど、今回、スケールアウトまで、やろうっていう風に考えたきっかけみたいなのは、どういうところにあったんですか。
@rChaser53
やはり冗長化したいなという風なところがありまして、あのー、ベジストリーですので、できる限り安定性が欲しいよね っていう風なところはやはり強かったという風なところがありまして。どうにかスケールアップだけではなく、まあ、スケールアウトでなんとかしたいなというのと、そもそもあのcpuとかメモリとかの問題よりも、ネットワークの やつがもう限界の方が来てしまうところがありまして、
3. Verdaccio の課題感
@rChaser53
まあスケールアップじゃもうどうにもならんなみたいなところが
@rChaser53
あったんで、これはありますね、
@potato4d
結構今までの段階ですでにこう、あげられるものを上げ切って、なかなか対応するのが厳しくなってたんで、もうこの機会にやってしまうっていう風なとこ。
@rChaser53
そうですね、メモリとcpuはどう考えても余ってるのにみたいな感じで、はい、
@potato4d
理解しました。じゃ、結構あれっすね、その待機とかが問題だったみたいな感じですかね。ネットワークっていうところで言うと、
@rChaser53
そうなっているようでしたね。はい。
@potato4d
であれば、確かにそのそもそもの台数みたいなところの解決っていうのが今後重要になってきそうな部分ですね。
@rChaser53
それしか選択肢がないかなみたいなところもありました。
@potato4d
ありがとうございます。そんな、あの、スケルアウトしたいっていうモチベーションがある中での話になるんですけ と、先ほどシングルプロセスでしか動かないみたいな話があったかなと思うんですが、そもそもこう、パッケージとかって、それぞれのリクエストに関してこうなんでしょ、別当なレスポンスを返すと言いますか、 そのバージョンを指定したら必ず同じ適当なレスポンスが返ってこないと。あんまりこう、レジストリとしての信頼とかって考えると、そう、怪しいのかなと思うんで、割とスケールアウトとかって、
@potato4d
なんでしょう、やってることで言うとできそうな印象があるんですけど、こう、内部的な事情がおっきいのかなと思うんですけど、どういった、都合でこう、シングルプロセスで、じょじょまスケルアプしかできないみたいな感じだったんですかね。
@rChaser53
これなんですが、ちょっとあのVerdaccioは、元々、やっぱり、あのプライベートatmリストリーとして、あの 大規模に使われることが前提になかったせいで、ちょっと色々と面白いことをやっておりまして、 ま、メタデータが、プロセス上のメモリで、キャッシュとして持っちゃってるんですね。おお、
@potato4d
そうなんですね。なるほどなるほど
@rChaser53
なんで、具体的に言うと、新規のパッケージをパブリッシュした際に、例えば、さんだ、だんだんだんって、あのvmとかを並べたりだとか、プロセスとかを、 3つとか増やしたりすると、1つのプロセスでは、新規のパッケージが確認できるけれども、残りの2つのプロセスで、まあ、パッケージが存在しないなんてことが普通に発生してしまうと、
@rChaser53
なるほどはい
@rChaser53
いう、非常に具合が悪いことがありまして、まあ、どうにもならんなっていうのと、そもそも あのメタデータの管理が、あと、パッケージの管理は全てファイルベースで行っているので、そのままではとてもではないけれどもスケールアウトができないよね、みたいな状況にあり。ま
@potato4d
あ。で、もう1台のvmであったり、マシンの中で動くことが前提としては、いまからにライブのシステムが作られているみたいな。
@rChaser53
そうですね、知り合いとかで、なんか実際にパブリッシュするためのテストとかに使われる要素が多分メインだと思うんで、 あんまりそんな大規模なnpmレジストリとして使われることは考えられてない。あ、
@potato4d
形に、あくまでもnpmjsがあるうちで、プライベートで限定的に使いたい時に、こう便利なツールみたいな設計になっていたっていう具合ですね、はい。 結構こう、今聞いてると、ファイルベースであったり、そのイメモリーでのキャッシュみたいなところって、こう、なかなか手を出しづらいところ、回収するってなってもすごい大変なところかなと思うんですけど、どういうふうにVerdaccioを回収していった形になるんですか。
@rChaser53
Verdaccioは一応、あの、やっぱその辺が苦しいのかなっていう風なところ、開発者が把握しているのかなんなのかわからないんですが、あの、プラグインの開発が自由に。 ま、自由にではないな、まあ、ある程度自由に、あの、できるようになってるんですね。 で、そこで、あのー、例えば、なんか、ストレージの部分の処理の一部だとか、認証の部分の処理の一部だとかを、カスタムプラグインを開発することで自由に変更ができるようになってるよ、という話になっています。
@potato4d
なるほど。フォークして回収みたいなのをしなくても、限定的にパッチを当てたいみたいな場合ならプラグインの範囲で完結できるみたいな。
@rChaser53
はい。ちょっとあの形ですかね。 全部ではない。全部ではなくて、あの軽いところに手が届かない感じはすごい強いんですけれども、今回の件に関して言えば、まあなんとかなったみたいな話ですね。
4. 課題解消に向けて取り組んだこと
@potato4d
今回は、具体的にはどういう感じで処理を書き換えていったんですか。
@rChaser53
そうですね、そこの部分の、あの、実際にあの、現在パブリッシュしているプライベートパッケージの情報を、ファイルベースじゃなくて、 まあmysqlのテーブル上で持たせるようなお話にして、どっかのvmでもアクセスできるようにしたっていうので、スケールアウトができるようにしたという風なところがありますね。
@potato4d
最終的にデータを持っているのが、そのインスタンスではなくても、rtvの方に入ってるんで、全員がそこを向いておくようにすれば、どのインスタンスからでも参照できるんで、問題ないっていう風なところですね。
@rChaser53
はいはい、そうなりますそうなります。
@potato4d
ちなみに、その他で、あのファイル、あのベースで管理している部分もあるみたいな話があったかなと思うんですけど、その辺はどういう感じで解決したの
@rChaser53
ですか。シアードファイルシステム。まあ、あの、1つのvmで複数のファイルシステムを共有するとかいうのはあると思うんですが。はい。それを使えば、ファイルベースで管理してる部分は、まあ、なんとかなるかなっていう風なところである。 はい、そっちの方はなんとかなったっていう風な話にはなっておりま。
@potato4d
そのあたりはまあシンプルにあれですね、インフラの構成を調整して解決して、この1番希望となるっていうか、オンメモリーで触れないところをプラグインで解決したみたいな 形なんですね。そうなります。そうなります。ちなみに、プラグインって書く場合ってどういう風にこれ書くんですか。1から書いたりするんですか。
@rChaser53
一応Verdaccio自体も、実はあのデフォルトのプラグイン、あのVerdaccio自体もプラグインを利用していて、プラグインを特に指定しないと Verdaccioは元々開発しているプラグインを利用するみたいな、デフォルトのプラグインを利用するみたいな話がありまして、そのデフォルトのプラグインをベースに、ちょっと 一部に回収を加えたみたいな形に今回の方はなっております。
@potato4d
あと、もうベルタッチを、本体がこう、プラグインシステムに乗っかる形でコアの機能を開発していて、それをこう、まあ、フォークして回収するみたいなか にしておくと、メインの機能は、こう、デフォルトのプラグインと同じような形に動作して、限定的に書き換えることがそれなりにやりやすくできるみたいな
@rChaser53
ですかね。そうですね、一応、そういう風な形が提供されてるっていう風な話なんですが、そもそもやっぱり、でも、あの、プラグインの開発自体が、ほとんど過疎ってると言いますか、 やられていないみたいな形になっていて、サードパーティーのプラグイン開発では、誰かやってないかなって探してみたんですけど、 全然見つからないですし、そもそもベルタッチの開発メンバーもほとんどそこの部分のコアの部分も触れていなかったようで。ま、かなりあのー、ソースコートとしては古いものになっていて、
@potato4d
あーなるほど。
@rChaser53
余計多分それでみんな触れてなかったのかなみたいな感じがありましたね。あの すごい懐かしいあのコンスト。ま、コンストじゃねえな、コンストもかせなかったもんな。バーセルフイコールリスみたいな感。 あの、アーギュメンツとかそこらへんがあったりだとか、
@rChaser53
あん、なんかその辺のものがゴロゴロ転がってるような状況だったり、当然、あのー、アセンカーウェイトとかも使われていなくて、コールバックになったりとか、 ま、ちょっと、あの、これだから、余計、誰もプラグイン開発を今までしてなかったんだろうなみたいな感じが、まあ、プンプンによっているような感じにはなっています。
@potato4d
結構、あれですね、あの、ベースが、のコードがあるから、開発はできたとは、結構、1から書くってなると大変そうっていうか、この流に合わせないといけないのもあって、 結構大変そうかな、みたいな
@rChaser53
ところですかね。そうですね、ちょっと、あれを1から書くのはあまりやりたくないなという風に気持ちは強いですね。一応現状ベルルチの語形を使っているんですが、あの緑形になるとさすがにまずいと思ったのか、ちょっと全面的にライン 開き直して、え。ようやくあのアセンカエは。とか使えるように。
@rChaser53
で、もしあのベルダ中のクラブリン開発とかにご興味のある方が、あの欲形がリリースされてから開発すれば、もう少しあの今時のまともな なるんじゃないかな、みたいな感じがしますね。
@potato4d
はい。じゃあこ、もし同じような課題を抱いてる人が今これを聞いているなら、まあこう、もう少しバージョンアップを待った方がいいっていう風なところですかね。
@rChaser53
そうですね。正直、あの、あまりにもプラグイン自体が開発がしづらいので、実際、あの、今回のストレージ以外の機能に関しては、前段にちょっとあの、apiサーバー、 Verdaccioの前段にapiサーバー、 まあ、設置するような形を取っておりまして、そこの部分のapiサーバーで、認証だとか、メタデータの管理だとか、キャッシュだとかは全部とって、
@rChaser53
みたいな状況になってますね。まあ、なるほどなるほど。アプリケーショナルリバース、ブロックシードとかやればいいんですかね、あの、Verdaccioに迎え、リクエストは全部そこを経由するんで。 はい、そんな感じにしたくなっちゃうぐらいには、ちょっとプラグインは開発がしづらい状況に現状はなってます。
@potato4d
私は、まあ、なかなかちょっと苦労した部分もあるが、まあなんとか課題は解消できてよかったなところ。
@rChaser53
そうだったわけですかね。はい。
@rChaser53
一応今のところこれに関しての問題は発生していないので、おそらくはこれがなんとかなったのではないかなという風には思っております。
@potato4d
ちなみに、スキルアウトを実施してからはどれぐらい経ったんですか。
@rChaser53
今。8月30日にやったので、まだ1ヶ月も経ってないですね。うんうん。うんうん。ちょっとみんなカジュアルにあの100レジストリとかを変えてはくれないので、 ロックマイル全部書き直さないといけなくなっちゃいそうですね。なかなかあのエイって増えてくれないってところがあって、ちょっと大丈夫なのかなっていう風に不安になるところがあるんですが、 少なくとも手持ちの環境で動作確認、性能確認をした限りは、vm増やした分だけハンドリングできる同時接続数とか増えるみたいな、
@rChaser53
当然途中で頭打ちはあったんですけど、はい。ま、ある程度線形に増えてくるっていうようなところが確保できる。今大体3倍かけてるんですけど、3倍ぐらい 同時手数、学数が増えてるので、おそらくはしばらく大丈夫なんじゃないかななんていう風に思って。
@potato4d
でもまあ、これからまたさらに増えるかもしれないが、現状はひとまず大丈夫そうそうですし、まあ成功したと言えるんじゃないかっていう風なところですね、
@rChaser53
はい。
@potato4d
ぜひまた、あの時間経った後、あるいはペルダッチオのバージョンアップがあってプラグインシステムがより良くなった場合にどういう風に変わっていったかみたいな、まだ今後のインサイドでも 聞いていきたい気がしますね。
@rChaser53
あ、是非ともお願いしますね。
5. 今後控える課題や展望
@potato4d
では、最後にですね、少し話の方を変えてですねえ、お伺いしたいのが。今後、今のところ控えてる課題とか、この辺りはもう少し触れたらよかったなみたいな部分があったりだとか、あるいは、こう、もう少し スケアウトみたいな話からは広がっていいかなと思うんですけど、ウVerdaccioであったり、プライベートnpmっていうところを見た時に、もっとこういうことをしていきたいみたいなのって、今考えていることはあったりしますか。
@rChaser53
そうですね。メタデータの管理はやっぱりファイルベースで結局残ってしまったんで、これをまず、なんかファイルベースじゃなくて、モンゴdbとかを使って、ちゃんとファイルベースから脱却したいというところがありますね。 バージョンごとのあのパッケージ、ジェイソンの情報を全て、あの、今、ジェイソンファイル、Verdaccioは元々管理してるんですけど、 はい、これ、まあなんとなく言えない感がすると、まー聞いただけで思うと思うんですが、パブリッシュされるためにどんどん、どんどんジェイソンファイルを読んでいくみたいな話にな。
@rChaser53
で、人によっては、なんかあの、ciが動くためにバリしてる方々とかがいらっしゃいますので、そうなると、最終的に20メガバイト、30メガバイト、数十メガバイトのジェイソンファイルをまあいじけることになるみたいな話になって、 これはいじりたくないな、どっかのタイミングで障害が発生するんじゃないかなというふうにすごい不安なところがありまして、そこの部分の、メタデータの管理の部分を、ま ちょっとファイルベースから脱却して、mongodbあたりにこそいなという風なところがまず1点ございま、
@rChaser53
あとは、結局、テールアウトとか冗長化したのはいいんですけれども、あまり、あの、定量的に測定できていないので、実際何台ぐらいまで増やした方がいいだとか、あわよくばダイナミックスケールアウト、ダイナミックスケールインなのかも 視野に入れるために、リクエストの成功率、失敗率などをもう少し測定できるようにさ いいなっていう風に思っておりますね。よくある、あるあるの話とかだと思うんですけど、みんな、あの、仕事が終わる夕方とかに、どんどん、どんどんプッシュとかするじゃないですか。
@potato4d
はい。
@rChaser53
そういうラッシュ時でどれぐらいリクエスト数が増えるのか、 もしくは、朝とかの、あのみんな誰も起きてないような時間帯をどれだけ、どれだけ減らしていいのかとか、そういった情報はやっぱり欲しいなと思います。リアルタイムでリクエストの成功です。
@rChaser53
失敗す、もう少し上げられ
@rChaser53
したいなっていうところはありますね。
@potato4d
なるほど。結構あれっすね、基盤の部分でちょっとやり残した部分もあるんで、そっちはうまく課題解消していきたいなっていうのと、より最適化と言いますか、 ま、ユーザーが使う機械に、1番問題なくこう利用するような、あの、うまくワークするような形にしていきたいなっていう風なところ
@rChaser53
です。はい、そうですね。 あと、現状、ちょっとやっぱり、あのguiがあまり好ましくない形になっていて、検索ぐらいしか使えていないので、まあ、もう少し、あの、ポータルとして、せっかくあのyahoo。japanの方、 統合して新しくユーザーが増えるわけですので、みんなが作ったパッケージをもう少し宣伝ができるような場として、
@rChaser53
guiとかその辺りも評価していきたいなみたいな感じになりますね。ポータルとしての機能をもっと強くしていきたいなっていう気持ちもあります。
@potato4d
確かにこう、ユーザーが増えるタイミングって、そういう、こう、ちょっと魅力的なところを作るチャンスでもありますし、それが広まるきっかけにもなり得るんで、面白そうですね、なかなか。
@rChaser53
そうですね、下半期とかはそのあたりの強化に努められればな、みたいな話が。あ、チーム内では
@potato4d
なかなか楽しみですね。では、さらに今後の展望のところまで含めて。ありがとうございました。クロージングの方に向かいたいと思います。
6. クロージング
@potato4d
というわけで、今回は、吉澤さんを招待して、プライベートnpmのパフォーマンス改善、特にスケールアウトという文脈について語っていただきました。 lineのフロントエンド組織UITでは、このような、フロントエンドに関する、様々な、情報に対する意見交換や議論を日々行っております。 過去にUITinsideで紹介させていただいたエピソードの中にも、社内勉強会であったり、意見交換から始まったものも多くありますので、今後もどんどん情報を発信していければと考えておりま
@potato4d
また、このポットキャストに関するご意見、感想の方は、 ぜひぜひ、リソーシャルメディアに投稿いただければと思います。ハッシュタグハッシュ。UITアンダースコアインサイドにてつぶやいていただきますと、スタッフの方で、 拾っていきたいと考えておりますので、ぜひぜひ、投稿いただければと思います。というわけで、今回は、プライベートpmのパフォーマンス改善について話していきました。
@potato4d
吉澤さん、ありがとうございました。
@rChaser53
ありがとうございました。