LINE テクノロジー&エンジニアリング大全

「Verda」――LINEが独自に開発したNATサービスの裏側

この記事を読むのに必要な時間:およそ 3 分

強固なNATサービスを実現した宣言的な設定

――今回のNATサービスの開発では,分散KVSのetcdと,クラスタ管理ツールのConsulを使われています。これらを採用した理由は何だったのでしょうか。

城倉:etcdはVerdaのネットワーク開発チームでよく使っているソフトウェアであり,どう使えばいいのかなど,我々なりの知見がありました。そういった背景から,必要なデータを分散システムに効率的に届けることを考えたとき,etcdを使えばいいとすんなり決まりました。

Consulについても,我々の中ですでにロードバランサのチームが使っています。このロードバランサは内製のもので,大規模に使っている老舗のネットワークサービスになります。そこでConsulの活用例やうまく利用するためのポイントなどについて,チームのメンバーから情報を得られたことが決め手となりました。

今回のNATサービスのような分散システム的を開発するとき,大きく分けて2種類の方法があります。1つはリモートプロシージャコールを使って分散しているノードに対してこれを設定しなさいと通知するパターン。2つ目は設定を宣言的に記述し,それをどこかのデータベースに書き込んでおく。そして分散システムの各ノードはその宣言的な設定を自分で取得し,自律的に設定を行って動作するパターンです。

Kubernetesは後者の分散システム的なアーキテクチャを強く尊重したデザインになっています。そういったKubernetesのようなメカニズムを作るときに,本質的に必要な機能をきれいにカバーしてくれたのがConsulとetcdでした。

Verdaの大きな特徴の1つはetcdとConsulを活用している点

Verdaの大きな特徴の1つはetcdとConsulを活用している点

――今回のNATサービスにおいて,注目してほしいポイントはありますか。

城倉:ネットワークとソフトウェアの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ではすべてのサービスが満足できる状態ではないため,もっと頑張らなくてはならないと考えています。そういった部分でチャレンジはまだまだ続けているので,ぜひ今後にも注目していただきたいと思います。

――本日はありがとうございました。

画像

著者プロフィール

川添貴生(かわぞえたかお)

株式会社インサイトイメージ代表取締役。企業サイトの構築及び運用支援のほか、エンタープライズ領域を中心に執筆活動を展開している。

メール:mail@insightimage.jp


馮富久(ふぉんとみひさ)

株式会社技術評論社クロスメディア事業室室長。

1975年生まれ。横浜市出身。1999年4月株式会社技術評論社に入社。入社後から『Software Design』編集部に配属され,2004年1月に編集長へ就任。同2004年9月に『Web Site Expert』を立ち上げ,同誌編集長に就任,現在に至る。その後,2008年9月に設立したクロスメディア事業部(現クロスメディア事業室)に配属。現在,社外活動として電子書籍を考える出版社の会の代表幹事やWebSig 24/7のモデレーター,TechLIONプロデューサーなども務める。過去にIPAオープンソースデータベースワーキンググループ委員やアックゼロヨン・アワード他各賞審査員などの経験を持つ。

Twitte ID:tomihisa(http://twitter.com/tomihisa/