LINEエンジニアを支えるCaaS基盤の今とこれから – Japan Container Days v18.12参加レポート

Japan Container Days v18.12に参加してきました

こんにちは、LINE Private Cloud開発チームの西脇です。

12月4日、5日で開催された Japan Container Days v18.12にスピーカとして参加してきました。
参加レポートとして、私がKeynoteで発表した 「LINEエンジニアを支えるCaaS基盤の今とこれから」をこちらのブログで簡単にご紹介させていただきたいと思います。

また、私以外にも、今回のJapan Container Daysでは、LINEエンジニアで計5つのセッションを務めさせていただきました。

事例紹介、Kubernetes の技術情報など、どのセッションも大変面白いものになっていますので、ぜひご確認ください。

LINE Private Cloud

LINEでは、社内開発者向けにPrivate Cloudを提供しています。
弊社のPrivate Cloudでは、単純なIaaSリソースだけでなく、Managed Middleware や Platform as a Service など様々なサービスを提供しています。

IaaS 品質向上 != アプリケーション品質向上

我々Private Cloud開発チームでは、2016年のリリースから、IaaS レイヤーのスケーラビリティ、パフォーマンスの改善などに特に力を注いできました。
しかし、IaaS レイヤーの品質改善は、社内のエンジニアの開発/運用業務の効率化や、アプリケーションの品質の向上に必ずしも繋がりません。

仮想マシンを提供するサービスを例に考えてみます。
我々の仮想マシンを提供するサービスでは、複数の同一の役割を持った仮想マシンを別の障害ドメインにスケジューリングするための仕組みを提供しています。
このような機能を提供することで、1つのHypervisor故障が直接サービスダウンにつながらないようにする工夫をしていますが、
これらの機能は、きちんとアプリケーション開発者が理解し利用しないと構築するアプリケーションの品質には繋がりません。

他にも、我々のPrivate CloudではGUI以外にAPIも提供しているため、
モニタリングツールなどと連携をして、トラフィックの増加に伴ってオートスケーリングを実現することもできます。
しかし、このような仕組みも開発者自身で設定/構築をする必要があります。

このように、アプリケーションの品質は、コーディングだけでなくアプリケーションをどのように(クラウドリソースを利用して)構築するかという要素が強く絡んできます。
アプリケーション開発者は、アプリケーションの開発だけでなくPrivate Cloudを利用する際のベストプラクティスなどにも気を配る必要があります。

Private Cloud開発チームでは、社内のエンジニアがアプリケーションの開発に集中できるように、IaaS の複雑性を隠蔽する CaaS というレイヤーを構築し、ユーザに提供しています。
CaaS を導入することで、Private Cloudが提供する責任範囲を、ユーザのアプリケーションをどのように実行するか、というところまで広げています。
これを通じて、ユーザがインフラを意識する機会を少なくすることを試みています。

LINE CaaS Family on Private Cloud

本発表では、Container as a Service を CaaS として表現しています。
CaaS は、「コンテナ技術を利用したユーザのワークロードを動かすためのサービス」の総称として利用しています。
我々のPrivate Cloudでは、3種類のCaaSサービスを提供しています。

  • Platform as a Service (プロダクション運用中)
    • Githubレポジトリ を登録するだけで、自動的にアプリケーションのコンテナ、DNSレコード、LB設定が実施され、エンドユーザへサービス開始することができるサービス
  • Kubernetes as a Service (ベータ版として運用中)
    • ManagedなKubernetes Clusterをユーザに提供し、Kubernetes Interfaceを通して、アプリケーション、インフラリソースのプロビジョニングを実施できるようにするサービス
  • Function as a Service (開発中)
    • LINEの社内ツール(モニタリングツールなど)やPrivate Cloud上のイベントに対して、任意のプログラムを紐付け実行することができるサービス

Platform as a Service (PaaS)

Platform as a Service(PaaS)は、CaaS Familyの中で1番最初に提供開始したサービスです。

2017年より提供を開始し、現在はプロダクションで運用をしています。

一部の商用アプリケーションは実際に本PaaS上で動いています。

Kubernetes as a Service (KaaS)

PaaS の提供を開始後、様々なサービスがPaaS上で構築されることを期待していました。

しかし、PaaS は、完全にインフラリソースを抽象化するため、ユーザ側で細かいコントロールをすることが難しいという課題があります。
そのため、PaaS を利用するのではなく、Kubernetes クラスタを自身で構築し利用するというユーザも増えてきました。

クラスタの構築/運用が簡単であれば、そのような状況は悪くない流れだと思いますが、それらはアプリケーション開発者が片手間で実施できるようなものではありません。

実際に、我々のPrivate Cloud上で動いているKubernetesクラスタで、課題を抱えているものは少なくありません。
そのため、我々 Private Cloud開発チームでKubernetesクラスタを集中管理する、Kubernetes as a Serviceの必要性が強く高まりました。

現在は、ベータ版として社内の開発者に提供を開始しています。
提供までのリードタイム短縮のために、我々は0からの実装ではなく、RancherというOSSをベースに本サービスを構築しています
Rancherをどのように利用しているか、採用背景などは、https://www.slideshare.net/linecorp/rancher20-managed-kubernetes-service で詳細を確認していただければと思います。

Function as a Service (FaaS)

Function as a Service (FaaS) は、まだユーザに提供することができていませんが、来年中の提供を目指して開発を進めています。

本サービスは、たくさんのユースケースをサポートすることが将来的に期待されていますが、直近ではオペレーション自動化基盤としての提供をメインに考えています。

システムの開発/運用中は、たくさんのイベントが日常的に発生しています。
“新しい変更が適用された”, “新しいサーバが追加された”, “新しいメンバーが追加された”, “特定のサーバが故障した”, “メモリの使用率が60%が超えた” など。

我々のオペレーションは、基本的にこれらのイベントがトリガーになって実施されることが多いです。
そのようなオペレーションの自動化は、すでに様々なツールで実現されている方が多いと思いますが、ツールが分散する、自動化スクリプトの質など様々な課題があります。

このような課題を解決し、ユーザのアプリケーション開発/運用の負担を少しでも軽減するため、FaaS がラインアップに追加されることになりました。

Knative というOSSをベースに現在は、開発を進めています。

CaaS Familyの今後

我々は、一番最初に提供した CaaS Familyの1つである、PaaS の提供経験から、大事なことを1つ学びました。

LINEのPrivate Cloudのユーザは、2000人を超える社内の開発者です。
また、日本だけでなく、タイ、台湾、インドネシアをはじめとする様々な国と地域で様々なサービスを提供しています。サービスの特性も違うため、Private Cloudに求める要件、使い方も多岐に渡ります。

そのため、1つの抽象化レベルを全ての開発者、サービスに適用することはとても難しいです。

  • VMを直接意識する必要があるサービス
  • Kubernetesを直接意識する必要があるサービス
  • 特定のイベントに対して、特定のプログラムを実行することで要件が満たせるサービス

我々のPrivate Cloudに求められていることは、LINEが提供する様々なサービスのニーズに沿った適切な抽象化レベルを開発者に提供することです。
今後、Private Cloudの各サービスの質を向上させ、開発者がより開発に集中しやすい環境作りを実現していくことを我々は目指しています。

今回の Japan Container Days では、各サービスの詳細の話はできませんでしたが、今後様々な機会でお話しできればと思います。

最後に、Private Cloudチームでは、まだまだたくさんの開発者を募集しています。
Japan Container Daysに参加された方や、本ブログを通して興味を持ってくれた方は、ぜひ下記から応募していただければと思います。

https://linecorp.com/ja/career/position/1358