Interviews/

大塚 知亮 / データベース

自己紹介をお願いします。
ITサービスセンター Database室 MySQL1チームの大塚知亮です。大学時代にはコンピューターサイエンスについて学んでいました。そして、アルバイトやインターンでソフトウェア開発の仕事に携わる中で、データベースの仕組みに興味を持つようになりました。

アルバイトやインターンではWebアプリケーションを開発していたのですが、そうしたシステムではデータ量が増えるにつれて、サービスのレスポンスが徐々に遅くなってしまうケースがあります。対応策について調べると、データベースのインデックスを変更したり、データベースに割り当てるメモリ量を調整したりするとパフォーマンスが改善することがわかってきました。こういった工夫によってデータベースをチューニングできることにおもしろさを感じ、この領域をより深く学びたいと思うようになりました。

就職活動では、データベース関連のオペレーションや、データベースそのものの開発などに携われる会社をメインに探しました。そんな中、LINEはデータベース関連の部署が独立して存在しており、かつデータベースエンジニアの職種が設けられている稀有な会社でした。

一般的なIT企業では「エンジニアとして採用選考を受けた後、希望する部署に配属されるかどうかはわからない」というケースもあるのですが、LINEのインフラ部門の採用は新卒採用でも、データベース、プライベートクラウド、ネットワーク、システムといった大まかな部署で分かれています。部署ごとの基準を満たせば、応募者の希望した部署に配属されます。さらに、パブリッククラウドを使うのではなく、自社でオンプレの環境からプライベートクラウドを構築していることも魅力的でした。

採用面接では、データベースのどういった技術に興味があるかや内部構造について深掘りしたことがあるかを問われる場面もあり、現場ではそれらがどのように活かされるかを議論でき、よりLINEでの業務に興味を持ちました。この会社ならばデータベース領域を突き詰められると思い、2018年に新卒入社しました。
業務内容や具体的な流れを教えてください
私たちMySQL1チームは、主に日本国内のLINEサービスで利用されるMySQLインスタンスを運用しています。運用の業務としては、新規インスタンスのサイジングやテーブル設計についての相談にのったり、データベースのチューニングやクエリのレビューをしたり。それから、キャンペーンなどが実施される際には負荷分散の方法についてコンサルティングを行うこともありますし、負荷軽減のためのオペレーションを実施することもあります。

さらに、データベース運用に関連する各種オペレーションの自動化も行っています。現在、LINE社内のMySQLインスタンスは合計で約6,000台まで増加しています。それほどの規模のデータベースを10名弱ほどの人数で管理しているため、自動化せずに運用を回すことは不可能です。そこで私たちは、各種モニタリングツールや運用負荷軽減のためのSlack Bot、アップグレード支援ツールなど多種多様なシステムを開発し、自動化を推進しています。

何か障害が起きたときなどに、MySQL本体やその周辺ツールのソースコードを読んで原因究明することもあります。
たとえば最近の事例として、メンテナンス作業中に不要なテーブルのDROP DATABASEを別のスキーマに対するバッチ処理と同時に行うオペレーションを実施しました。基本的に、MySQL内部のロックはスキーマをまたいで影響が出ることはありません。しかしこの時は、DROP DATABASEの操作とは別のスキーマへの操作にロックがかかってしまいました。この影響がHAシステムの関しにも及び、予期しないフェイルオーバーが発生する事態になりました。

この原因究明のために、再現実験やコードレベルでの挙動確認を実施しました。すると、Semisync(準同期)レプリケーションという仕組みを導入するためのプラグインがデータディクショナリというメタデータのロックをとっており、別のスキーマに対する操作もロックされてしまうことを突き止めました。この調査内容と対策は「バッファープールが大きいMySQL v5.7でDROP TABLEが詰まった原因と対策」として「LINE Developer Meetup #73 - MySQL」で紹介しています。

この事例のように、障害などの原因究明を行う際にはMySQLの内部仕様のかなり詳細な部分まで調査を行うこともあります。こうした業務を通じて、データベースへの理解度がより向上し、エンジニアとして成長できた実感があります。
仕事を進める上で、意識していることはありますか
公式のドキュメントやリファレンスマニュアルなど、一次情報を参考にすることを大事にしています。二次情報や三次情報はとても参考になりますが、信憑性が怪しいケースもあるため、一次情報も確認するようにしています。また、先ほどの話にも通じますが、より詳細にデータベースの挙動を把握したい場合は、MySQL本体やその周辺ツールのソースコードを読むケースもあります。

また私たちMySQL1チームは、データベースに関してなんらかの問題が起きそうな場合に、それを事前に検知し各サービスの担当者に対して改善のための提案を行います。その際には、根本原因が何なのかをできるだけわかりやすく伝える、解決策のパターンを複数用意するなどの方法をとることで、円滑なコミュニケーションができるように工夫しています。

それから、各種のオペレーションを徹底的に自動化・効率化することも大切です。私たちDatabase室のメンバーは少人数のメンバーで大規模なデータベースを管理しています。そのため属人的な作業が増えてしまうと、今後さらにデータベースの規模を大きくすることが難しくなってしまいます。だからこそ、「いまエンジニアが手作業でやっている仕事をスクリプト化できないか」とか「この仕組みを他のシステムにも横展開できないか」と常に考えるようにしています。
おもしろいことや難しいことなど、働く中でこれまでに得た感触を教えてください
LINEで取り扱っているサービスは多岐にわたります。コミュニケーションアプリ「LINE」やエンターテインメント領域の「LINE MUSIC」「LINE LIVE」、Fintech領域の「LINE Pay」「LINE証券」など、他にも幅広い領域に数多くのサービスがあります。それらのサービスが持つ特性が、テーブル設計や発行されるクエリの種類などに如実にあらわれることがおもしろいです。データベースの活用方法が幅広いことを実感できます。

それから新しいサービスをリリースする際には、該当サービスの開発を担当するチームから事前に負荷量や想定ユーザー数などをヒアリングして、その数値に合わせてデータベースの設定を行います。サービスのリリース後、データベースが想定通りにアクセスをさばいているのを目にしたときは、いつも誇らしい気持ちになります。

その反面、チームとして課題だと感じる部分もあります。LINE社内のMySQLインスタンスはかなりのペースで増え続けており、年間あたり1,000台近い増加量です。これらを適切に管理・運用するための方法を、私たちは常に模索し続けています。

たとえば、サービスチームごとにデータベースの利用方法や運用の仕方、監視したいメトリクスなどが異なるため「(サービスチーム単位で)個別の設定を入れてほしい」とリクエストされることがあります。ですが、それらの個別設定にすべて対応すると、私たちDBAの作業量が非常に膨大になってしまうのです。データベース運用の全体的な効率を鑑みつつ、各サービスチームの要望をどこまで拾い上げるのかを判断してバランスをとる難しさを感じられること自体もLINEでの運用ならではのおもしろさだと思います。
LINEに入社して良かったと感じることはなんですか
LINEには、すべてのメンバーの意見は平等であり、相手がマネージャーやチーム長であってもそれは変わらないという文化があります。たとえ新卒のメンバーだとしても、社内では積極的に意見を出すことができます。

また、何か課題に感じていることを他のメンバーに伝えた上で、その解決策について本人が一番理解しているのならば、積極的に仕事を任せてもらえます。仕事の中で自発的に課題を見つけて、それを解決していくことがやりやすい環境です。それに、その活動を周囲の人々もサポートしてくれます。特にDatabase室は「困っている人を助けたい」というマインドの人が多く、その傾向がより顕著だと感じます。

それから、LINE社内にはエンジニアとしてプロフェッショナルな人が多いです。Database室にも、データベースの内部の仕組みについて深い知識を持つ人がたくさんいます。それに、各種ツールやアプリケーションをより良い設計や実装にしようと考え、レビューなどで良い意見をくれるメンバーが多く、仕事をする上で心強い環境です。

私自身、LINEを選んで本当に良かったと感じます。社内でプライベートクラウドの構築・運用をしており、かつデータベース専門のチームがあることによって、かなり深い専門知識を身につけることができています。加えて、業務の中で数多くのチャンスを与えてもらえました。入社してからこれまで約4年間働いてきましたが、エンジニアが成長できる会社という印象は今も変わりませんし、今でも成長を実感し続けています。

データベース内部の仕組みについてある程度理解できてきたため、最近ではLINEに合ったデータベースを自分の力で作りたいと考えるようになりました。データベースの定例やプロトコルを解釈して運用に活かしたり、OSSに手を入れてLINE独自のパッチを当てたシステムを開発したりしています。こういった業務は、まさに入社前から取り組んでみたいと思っていた自分の夢でした。
最後にメッセージを
データベースを使わないアプリケーションは、世の中にほぼありません。データベースはシステムの根幹を支えており、その改善を行うことでアプリケーションそのものの抜本的な改善を実現できます。多くの人に、ぜひデータベースという分野に興味を持ってほしいです。

もしかしたら、このインタビューを読んで「スキルの高い人でなければLINEのDatabase室には入れない」と思われた方もいるかもしれませんが、決してそんなことはありません。データベースに興味があるけれどスキルがまだまだ成長過程にある人も、ぜひ応募していただけたら嬉しいです。私自身もデータベースに興味があるというところから、業務を通して今も学んでいく過程です。

私たちのチームでは、さまざまなタイプのエンジニアが活躍していると思います。私のようにデータベースの内部構造を深堀りするのが好きなタイプもいれば、各種のオペレーションを自動化・効率化するためのスクリプトやWebアプリケーションを作るのが好きなタイプもいます。多種多様なメンバーが所属する環境で、ともに切磋琢磨しましょう。