LINE DEV DAY 2019 に参加した

はじめに

先日行われたLINE DEV DAY 2019に参加してきました.
また,参加するにあたってLINE様より学生向け参加支援制度として交通費等を支援していただきました.大変感謝しております.

このイベントでは二日間,6つの会場でセッションが行われ,他にもBoothごとの展示やポスターセッション,ハンズオン,会場外での一枠10分程度でのセッションなど非常に内容の詰まった楽しいものでした.

この記事ではこのイベントの振り返りということで印象に残ったセッションをいくつかピックアップしようと思います.
なおセッションで使われたスライドはこちらにまとめられているので気になった方は覗いてみてください.

f:id:tech_shanpu:20191124103155j:plain

セッション紹介

プライベート Kubernetes クラスタにおける gRPC サービス開発 / LINE 宇井敬一朗

LINE LIVEKubernetesを用いてるとのことで,それぞれの使用しているミドルウェアについてなぜそれを採用したのか,どういう構成なのか,メトリクス収集や監視周りなどについてのセッションでした.

外部公開の部分はLB(クラスタ外)->NodePort->Envoyの順に構成されており,EnvoyがgRPCに対応していないアプリケーションに対して変換処理(gRPC-WebやJSONからgRPCへ)も行っているとのことでした.
またNodePortの後ろにさらにEnvoyをLBとして配置する理由として,一段目のLB(クラスタ外)->NodePortの部分ではあくまでNodeレベルでしか振り分けられないので,Podレベルでバランシングを行うためだという説明がありました.
externalTrafficPolicyClusterに設定することでEnvoyを使わずともPodレベルでバランシングが行えそうですが,(セッション中では述べられていませんでしたが)kube-proxyでのパケット転送時のSNATによりクライアントのIP情報がパケットから失われるといった作用が要件に合わなかったのかもしれません.
なおこのEnvoyですがingress-nginxでも同様の操作ができることから,そちらの使用も現在検討しているとのことでした.

ログ収集にはFluentdと共にエラーや警告といったものにはIMONという自社開発のLoggingシステムを用いているそうです.
詳細については以下のスライドで解説されていました.

LINEの独自LBaaSを支えるソフトウェアエンジニアリング / LINE 早川侑太朗

このセッションは社内向けのIaaSとして提供しているLBの開発についてのお話でした.
登壇されていた早川さんは話し方がとても上手く,わかりやすかったのが印象的でした.

Verda(LINE社内で運用されているプライベートクラウドの名称)で用いられているL4ロードバランサでは以前までステートレス,セッションテーブルを持たない形で実装されていたそうです.
この実装にはシンプルであることやスケーラブルであること,またセッションテーブルの枯渇を考えなくてよい点が利点として挙げられていました.
しかしこの場合,LB上にTCPコネクションの情報等が残らないため裏側のマシンのGracefulシャットダウンが難しい(セッション中では"できない"ではなく"難しい"と表現)ことや,宛先をハッシュ表で管理しているためにそれが更新されたときに既存のコネクションが意図しない形で切られる問題があったそうです.

これらの問題に対してはLBをステートフルな実装にすることで対処できますが,これはステートレスな実装方法とトレードオフな関係にあり,TCP SYN floodによるセッションテーブルの枯渇を考慮しないといけない等あったようです.
結果的に通常時はステートフルなLBとして,攻撃を検知した場合はステートレスなLBとして動作させることでこの問題を対処したとのことでした.

Journey of Feature Flag development in LINE Android /LINE 玉木英嗣

このセッションではFeature Branch戦略の欠点を克服するためにFeature Flag戦略というものを新たに導入し,そのためのGradleプラグインををOSSとして公開したというものでした.

Feature Flag戦略ではあるまとまった機能(従来のFeatureブランチの変更範囲にあたる)をmasterにマージするのではなく,細かいまとまりの変更をmasterにマージする形式をとるそうです.
このときFeature Flagと呼ばれるブール値によりその変更が有効か無効か管理することで,完成していないコード部分の実行を阻止するそうです.
これにより,

  • コンフリクトの数が減った
  • ある機能に問題が発生したときにFeature Flagの値を変更するだけで無効にできるので簡単

といった利点があるとのことでした.
またこのFeature Flagの管理を支援するGradleのプラグインOSSとしてリリースしたそうです.

github.com

このFeature Flag戦略,コード本体の可読性,複雑さは従来より増しそうですが,コードの有効な範囲を簡単な操作で絞ることができるので非常に面白い手法だと思いました.

さいごに

卒研等が忙しく,参加するか迷っていたLINE DEV DAYでしたが学べることが多く,参加してよかったです.
今回参加できなかった方も,それぞれのセッションのビデオアーカイブが後日配信されるとのことで,チェックしてみてはいかがでしょうか.

次回も学生参加支援あるといいなあ