強固なNATサービスを実現した宣言的な設定
- ――今回のNATサービスの開発では,
分散KVSのetcdと, クラスタ管理ツールのConsulを使われています。これらを採用した理由は何だったのでしょうか。 城倉:etcdはVerdaのネットワーク開発チームでよく使っているソフトウェアであり,
どう使えばいいのかなど, 我々なりの知見がありました。そういった背景から, 必要なデータを分散システムに効率的に届けることを考えたとき, etcdを使えばいいとすんなり決まりました。 Consulについても,
我々の中ですでにロードバランサのチームが使っています。このロードバランサは内製のもので, 大規模に使っている老舗のネットワークサービスになります。そこでConsulの活用例やうまく利用するためのポイントなどについて, チームのメンバーから情報を得られたことが決め手となりました。 今回のNATサービスのような分散システム的を開発するとき,
大きく分けて2種類の方法があります。1つはリモートプロシージャコールを使って分散しているノードに対してこれを設定しなさいと通知するパターン。2つ目は設定を宣言的に記述し, それをどこかのデータベースに書き込んでおく。そして分散システムの各ノードはその宣言的な設定を自分で取得し, 自律的に設定を行って動作するパターンです。 Kubernetesは後者の分散システム的なアーキテクチャを強く尊重したデザインになっています。そういったKubernetesのようなメカニズムを作るときに,
本質的に必要な機能をきれいにカバーしてくれたのがConsulとetcdでした。
城倉:ネットワークとソフトウェアの2つの観点があります。まずネットワークの観点では,
ブラストラディウスを小さくするNATルーティングの手法を自分たちで考えてサービスとして開発した点です。 ただ,
これは素晴らしいメカニズムだと思っているわけではなく, 試行錯誤しつつプロダクションサービスとして開発した, そのネットワークエンジニアとしてのチャレンジはアピールできるポイントかなと考えています。 ソフトウェアに関する部分でおもしろいと思うのは,
やはりKubernetesのような宣言的な方式を採用し, ネットワークサービスを作ったという部分です。ネットワークやソフトウェアに興味がある人には, そういった部分に注目していただけると楽しめるのではないでしょうか。 - ――今回のプロジェクトで得られた知見としては,
どういったものがありましたか。 城倉:やはり分散システムを宣言的なメカニズムで実現したことですね。ソフトウェアにトラブルが発生しても,
そのノードで動いているソフトウェアを再起動すれば, 宣言的な設定に応じて自律的に設定を行い, 設定が変わっていても自分で設定するといった特徴が, そもそもの宣言的分散システムのメカニズムにはあります。 リモートプロシージャコールを使った場合,
設定を送ろうとしたノードが再起動中の可能性があり, それをケアするメカニズムを新たに作らなければなりません。その意味で, Kubernetesの宣言的な概念を参照したのは, ある程度壊れながらでもサービスを提供できるポイントとしてよかったと思っています。 また,
このデザインのためにetcdやConsulを使い, 足りない部分をGo言語で書くといった仕事をしましたが, これはすべてKubernetesの上に載せられることがプロジェクトが終わるころに徐々にわかってきました。今回, 宣言的設定のための分散システムメカニズムを構築しましたが, Kubernetesでもそういった機能をカスタムリソースとして提供していて, それをうまく活用することでもうちょっと簡単に作れたのかなと後から思ったんです。 現在はパブリッククラウドで提供されているVPC
(Virtual Private Cloud) の機能を作っていて, その上でNATサービスと似たようなロジックを実現するためにKubernetesを利用し, 開発コストを下げたいと考えています。実際に検証も行い, Kubernetesでも実現できそうだと確認しました。 このように,
大きなエネルギーを注いでチャレンジし, その結果こうすればもっと良くなるかもしれないといった知見が蓄積されることは, チームとしてよいことだと思っています。 - ――Verdaの今後の開発について伺わせてください。
城倉:現状ではVerdaを使っていないサービスもありますが,
LINEのすべてのサービスをVerda上で動かしたいと考えています。 ではVerdaがカバーできていないサービスはどのようなものかというと,
FinTechやヘルスケアなど, アイソレーションに対する要求が高いサービスです。現在手がけているVPCもそのためのものであり, 要求の高いサービスをサポートするためのインフラ機能の開発を積極的に進めています。 現在LINEには数多くのサービスがありますが,
現状のVerdaではすべてのサービスが満足できる状態ではないため, もっと頑張らなくてはならないと考えています。そういった部分でチャレンジはまだまだ続けているので, ぜひ今後にも注目していただきたいと思います。 - ――本日はありがとうございました。