
2025.02.26
10年前とここまで違う 落とし穴だらけの“ERP to ERP”基幹システム刷新が抱えるリスクと実情
LINE Messaging Platformのサーバーサイド開発(全1記事)
提供:LINE株式会社
リンクをコピー
記事をブックマーク
今井祐介氏(以下、今井):本日は「Messaging Platform 開発室の紹介」をしたいと思います。今井です。よろしくお願いします。
まず今日のアジェンダですが、まず開発室の紹介と具体的にやっていること。あと今後やりたいことという部分と、現在のやりがいであったり求めている人物像を紹介します。最後に、現在使っている技術スタックに関しても紹介したいと思います。
最初に、私たちの開発室に関しての紹介ですが、大きく3つチームがあります。Messaging Platform 開発室の下にZ Part、N Part、IMF Partという3つのチームが現在ありまして、具体的にやっていることがそれぞれ違っています。
Z Partに関して言うと、ストレージ関連のレイヤー開発チームになりまして、N Partは、自身が所属しているチームになりますが、アプリケーションレイヤーの機能開発であったり運用をするチームとなっています。IMF Partは、現在社内のいろいろなところでKafkaが使われている中で、社内向けのKafkaをプラットフォーム化する運用をしているチームとなっています。
Messaging Platform 開発室の主な担当範囲ですが、基本的にはLINEのバックエンド開発です。LINEのクライアントとの間にロードバランサであったり、LEGY(LINE Event delivery GatewaY)と私たちが呼んでいるHTTP2であったり、SPDYのリバースプロキシ的なものになるんですが、裏にtalk-serverと私たちが呼んでいるメッセージングのバックエンドサーバーがいます。
そのtalk-serverがストレージを使っていて、この2つのtalk-serverとストレージに関してが今の主な担当範囲となっています。その他コラボレーションしているサービスがいくつかありまして、そこに対しての開発サポートやAPI提供もやっています。
具体的にやっていることですが、直近数年間で担当した主な機能開発というところで、主にはメッセージ関連ですと、送信取り消し機能というところです。メッセージを送ったあとに間違って送信してしまったと気づいた状況で、そのメッセージを取り消したいなど、そういう時に使う機能を近年はリリースしています。
あとはメンション機能です。他のチャットサービスでも利用されている機能をLINEのユーザーニーズに沿った形で提供しています。また、資料内の一番右側に表示している画面のホームタブと呼ばれている画面に、これはフレンドリストと呼んでいて、この中で、今日が誕生日の友だちをお知らせしたり、そういう情報を通知として送る機能も開発しています。
それからチャット画面です。その画面内で、今は季節ごとに配信したりしていますが、例えばクリスマスであったりバレンタインであったり、そういう季節性のイベントの時に、チャット内で何かをトリガーとしてエフェクトを表示するような機能をサーバー経由でクライアントに配信する機能であったり、その他諸々コア機能に付随するような機能を開発しています。
2つ目は、これはどちらかというと改善系のタスクにはなるんですが、どうしてもすでに10年近く運用しているサービスなので、いろいろな問題が起きているところがあって、例えばその1つとして、クライアントとサーバーの情報の不一致があります。
具体的に例えばサーバー側では友だちの数が2人となっているのに、クライアントのストレージでは3人となっているとか。何が原因かわからないですが、過去にあった障害やバグが原因で、不一致が起きていることが多々あったので、それを解決するような施策として、定期的にAPIを呼んで、その人の誤差があった場合にはシンクしてもらう。
シンクと言っているのは、クライアントからサーバーに対して情報をすべて同期するような作業でその結果、不一致が解消されます。そういうものをリリースしたりもやっています。こちらは私たちはLINT(LINE Improvement for Next Ten years)と呼んでいまして、2019年のセッションで発表していますので、よかったらご覧ください。
3つ目は、やはりこれも改善系のタスクにはなるんですが、昨今データセンターの障害や諸々の問題が起きている中で、メッセージの送信失敗時にリトライができる。要はクライアント側で失敗したりサーバー側で失敗したりした時に、内部的にストップしてしまうのではなくて、ちゃんとリトライして最後までメッセージが確実に送信される仕組みを考えたり。
そのメッセージを送信するのがもっとも重要なのですが、それに入らないような機能もたくさんありまして、そういう部分の性能を求められない機能に関して、今運用・開発・保守をしている同期サーバーから別のサーバーに移動するなどして非同期化対応をしたり、あとはCircuit Breakerを導入して、一時的にそのメインの機能に影響がないように、ある機能へのリクエストのブレーカーを落とすようなかたちにして、メインの機能を守るような対策を実施しています。
あとはどうしてもいろいろなユーザーがいる中で、悪意の持った方もいるんですね。そういう方の対策として、スパム検出の仕組みを導入したり、その一部のユーザーが非常にアクセスが多かったりする場合もあるので、そういう場合にも、HotSpot Issueと私たちは呼んでいますが、そういうボトルネックになっている部分に関してキャッシュを導入したり、RxJavaやKotlinのコルーチンを使ってノンブロッキング化を進めたりしています。
その他ですが、こちらはどちらかというと自身が所属していないZ PartやIMF Partでやっていることになるんですが、カオステスティングですね。実際に機能開発や新しい機能を追加する時に、実際に本番環境で問題が起きてみないとどうなるのかわからないことがありますので、1つノードを落としてみたりして、実際の影響を確かめてみるであったり、そういうこともやっています。
今は、どうしても1つのサーバーに集中してしまったり、ストレージ側に関しても1つのクラスタに多くのデータが混在してしまったりしているので、そういう単一障害リスクの低減を考えて、そのサーバーの分割を持つように進行しています。
こちらがもっとも重要になりますが、LINEはどうしても年末年始に発生するトラフィックが非常に多くて、その時にユーザーにも非常に多く使ってもらえるということで、私たちとしては非常に重要視しています。毎年年末前から始まりますが、サーバーの増強の準備をしたり、去年の結果を見直したり、毎年そういう改善を実施して、継続的に年末年始に影響がないように努力しています。
こちらは、今後やりたいことで、すでにやっていたりするんですが、いくつか書いています。やはり10年運営している中で、ストレージの統合・改善であったり、機能の部分でも統合・改善が必要だなというのがありまして、そのバックエンドのシステムが同じような機能なのに、別々に点在していたりすることもあるので、それをコストであったり今後のメンテナンス性を向上するために、統合や改善を進めているところです。
そのストレージやサーバーまわりに関しても、1つのIDCが落ちた時でもちゃんとサービスが継続することは、LINEにおいては非常に重要ですので、Multi IDCやHA構成の推進も進めています。マイクロサービス化においては、今どうしても一極集中してしまっている、先ほどのメッセージングバックエンドをできるだけ分割して、他の部署でもできているようなマイクロサービス化を推進していきたいと思っています。
2019年に弊社の井出が、マイクロサービス化に関してのセッションをやっていますので、よかったらご覧ください。2019年から長い道のりということになっているんですが、今でもなかなか長い道のりとなっています。
今後やりたいことその2は、Social Graphと言いまして、具体的には友だち関係を構成するシステムで、友だちと友だちの関係をSocial Graphと呼んでいます。そのバックエンドにシステムがあるんですが、こちらも非常に拡張性に問題がありまして、信頼性もさておき、新しい機能を追加する時であったり、何か問題が起きた時を考えると、現状では改善が必要だなというところがありまして。現在のチームでは注力しようとしているところです。
サーバー、クライアント間のプロトコルの改善に関しても、これは具体的に言うと、LINEクライアントとサーバー間で使っているプロトコルにThriftというものがありまして、これはオープンソースでもありますが、こちらをLINE社内において一部カスタマイズして使っていまして、この部分に関して、今後10年間見据えて本当にこのまま使っていいのかであったり、今のメンテナンス性のままでやっていけるのかの議論を始めています。
こういうところが、今の、どちらかというと自身が属しているN Partによった内容にはなりますが、今後やりたいこととなっています。
次に、サーバーエンジニアとしてのやりがい、求める人物像ですが、サーバーチームと、クライアントチーム、企画チームがあって、開発する時というのは基本的にこの3つのチーム+UI/UXを見ているところであったり、QAチームとコミュニケーションを取りながら開発していくことになります。
今のチームは開発のチームで、サーバーのみを見ているチームになるんですが、何か新しい機能開発が必要になった時に、プロジェクトが作られまして、それぞれのチームから何人かが選ばれて担当するようになっています。
やりがいというところなんですが、やはり社会的インフラになっていることで、インパクトが非常に高いので、そこの部分のプロダクト開発経験がやはり大きなやりがいになっているかなと思います。それに伴って、トラフィックに関しては非常に大きいので、1日数百億単位のメッセージを処理するようなサーバー開発ができるところが、なかなかできない経験だなと思います。
自分自身、何社か今まで経験していますが、なかなかこれぐらいの規模感で日本内で開発できることはないなと、日々実感しています。Z Partに関しては、メッセージングのサービスレベルの開発運用からストレージの奥深い所まで関われるため、エンジニアとして非常にやりがいを感じられると思います。
それ以外に、日本以外でも、LINE自体はグローバルにやっていまして、台湾、タイ、インドネシアでは非常にユーザーが多いので、そういう部分でグローバルなサービス開発にも参加できる、というところ。
現在の開発室の中では非常に多種多様なバックグラウンドを持つエンジニアが多くて、国籍もそうですし、そのそれぞれの経験が非常にバラエティに富んでいて、かつそれぞれでOSSのコミッターであったり、そういう貢献も多くあるようなメンバーも多く在籍しているので、そういう部分で刺激が多いのかなと思っています。
求める人物像ですが、やはり社会インフラとして使われていますので、そういうプロダクトを運営している責任感が重要なのかなと思っています。365日24時間運用していますので、深夜であってもやはりユーザーのために、責任を持って対応しないといけないこともあります。
そういうところと、今のチームですと、アーキテクトというポジションは特に持っていないので、エンジニア、サーバーエンジニアがそれぞれ開発に設計段階から開発して、企画チームとClientチームと話をしながら、イチからサービスを設計できるところもあります。
どちらかというと、今のN Partだと、APIの開発が主になりますので、APIの信頼性であったり、可能性、一貫性を、すでにあるものも含めて改善に興味がある方。それと、こちらはストレージに関して非常に思入れが深い方々が多いチームなので、特にHBase、Redis、Kafkaという部分への興味が非常に高い方が多く、分散ストレージまたはミドルウェア関連にすごい興味があれば、HBase、Redis、Kafkaに関係なく、いいのかなと思っています。
あとは、やはりネイティブアプリの開発になるので、ネイティブアプリの開発経験というところ。わりと担当範囲が広いチームなので、新しいものをイチから作る人であったり、すでにあるものを改善していくであったり、そういう部分の、わりと得意分野に合わせて活躍している人が多いのかなと思っています。
技術スタックです。基本的には他のチームと同じように、コアの部分ではKafka、Redis、HBaseとなっています。基本的には、オンプレでやっているので、監視システム自体もインターナルなものになっていますが、わりとOSSを使うことが多いのかなと思っています。Javaに関しても、今だいたい11になっているのと、直近は新しい部分に関しては、Kotlinのコルーチンを多用して、ノンブロッキングで作ることが多いです。
プロトコルに関しては、ThriftであったりgRPCを使うことが最近は多いです。以上となります。
最後になりますが、Messaging Platform 開発室では、主に2つのポジションを絶賛募集しています。1つ目は、先ほどのN Part側の開発で、APIの開発をしたり新機能の開発をしたりすることが多いですが、そういうサーバーサイドエンジニアになります。
もう1つは、Z PartであったりIMF Partで、分散ストレージとかミドルウェア関連のポジションになりまして、こちらも非常におもしろいモチベーションを維持できるような仕事になっていますので、よろしくお願いします。
ご応募お待ちしています。以上となります。
LINE株式会社
2025.03.21
マネージャーの「自分でやったほうが早い」という行動で失うもの 効率・スピード重視の職場に足りていない考え方
2025.03.25
減点を恐れてモチベ低下、果ては離職も… あらゆる“会社の害虫”を大繁殖させる「ラスボス」の正体
2025.03.24
最悪の場合、組織を死に至らせる“会社の害虫”とは 誤った意思決定や品質不祥事を招く要因
2025.03.19
組織をダメにする“害虫”の正体は間違った思い込み AIやDXなど手段のみにこだわるダメ上司の見極め方
2025.03.25
ムダな仕事がなくならない“マッチョな職場”を変えるには 近年の過度な「KPI主義」が組織に与えた影響
2025.03.24
気づけばモラル崩壊……人材育成に無頓着な企業の末路 業績アップや採用にもつながる“人への投資”の重要性
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
2025.03.24
AIの進化が行き着く先は「イノベーター」へ ChatGPT開発者サム・アルトマン氏 × 孫正義氏が語る、人工知能変革期の未来
2025.03.21
査定時期に上司から1年前の失敗を指摘される理不尽 変えられない過去を議論する「成果主義」の弊害
2025.03.19
フェデラー氏が語る「ただの1ポイント」の哲学 ウィンブルドン敗北から学んだ失敗からの立ち直り方
2025.03.21
マネージャーの「自分でやったほうが早い」という行動で失うもの 効率・スピード重視の職場に足りていない考え方
2025.03.25
減点を恐れてモチベ低下、果ては離職も… あらゆる“会社の害虫”を大繁殖させる「ラスボス」の正体
2025.03.24
最悪の場合、組織を死に至らせる“会社の害虫”とは 誤った意思決定や品質不祥事を招く要因
2025.03.19
組織をダメにする“害虫”の正体は間違った思い込み AIやDXなど手段のみにこだわるダメ上司の見極め方
2025.03.25
ムダな仕事がなくならない“マッチョな職場”を変えるには 近年の過度な「KPI主義」が組織に与えた影響
2025.03.24
気づけばモラル崩壊……人材育成に無頓着な企業の末路 業績アップや採用にもつながる“人への投資”の重要性
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
2025.03.24
AIの進化が行き着く先は「イノベーター」へ ChatGPT開発者サム・アルトマン氏 × 孫正義氏が語る、人工知能変革期の未来
2025.03.21
査定時期に上司から1年前の失敗を指摘される理不尽 変えられない過去を議論する「成果主義」の弊害
2025.03.19
フェデラー氏が語る「ただの1ポイント」の哲学 ウィンブルドン敗北から学んだ失敗からの立ち直り方
【仕事に直結】頭がいいとは?|知見の幅と高さで決まる。【東大卒 ベンチャー企業社長が語る】
2025.01.18 - 2025.01.18
退職をチャンスに捉える企業文化のつくり方
2025.03.10 - 2025.03.10
青木耕平さんとザッソウ(#156〜158)
2025.02.05 - 2025.03.19
片付けパパ対談【特別編】豊かな人生を過ごすための「投資」&「交渉術」 ~チャンスを逃さず信頼関係も育むコツ~
2025.02.10 - 2025.02.10
グローバルの経営理論に学ぶ、企業アルムナイ成功への示唆〜中央大学ビジネススクール 犬飼知徳教授
2025.02.18 - 2025.02.18