[レポート] Inside of Blog; 15年熟成されたサービスの光と影、カオスとレガシーへの挑戦 #linedevday_report

2019年11月20日(水)・21日(木)にLINEのデベロッパーカンファレンス「LINE DEVELOPER DAY 2019」が開催されました。本記事ではセッション「【セッションタイトル】」をレポートします。

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

【Inside of Blog; 15年熟成されたサービスの光と影、カオスとレガシーへの挑戦】

2019年11月20日(水)・21日(木)にグランドニッコー東京 台場でLINEのデベロッパーカンファレンス「LINE DEVELOPER DAY 2019」が開催されました。

本記事は、セッション「Inside of Blog; 15年熟成されたサービスの光と影、カオスとレガシーへの挑戦)」をレポートします。

スピーカー

大森 貴博氏 LINE 開発Bチーム

セッション概要

LINEに現存するサービスで最も古いもののひとつであるlivedoor Blog。また、2014年からLINEが提供を開始したLINE BLOG。この2つのブログサービスを題材に、15年以上の歴史をもつ巨大コンテンツを開発しながらいかに安定運用を続けるか。そのテクニックと苦難の歴史を、現在進行中のプロジェクトと過去のエピソードを交えながら紹介します。

スライド

レポート

2つのブログサービス

  • 現在LINEでは2つのBlogサービスがある
  • livedoor Blog
  • LINE Blog

1.livedoor Blog

  • 日本最大級のブログサービス
  • 構成はLAMP
    • Linux
    • Apache
    • MySQL
    • Perl
  • 前段にCDN
  • 裏側にblog、CMP、Portal、image
  • 後方にDBやキャッシュ
  • サブシステムが30ほどある
  • 全てが合わさってlivedoor Blogを形成している

数字で見るlivedoor Blog

  • 歴代の開発者数:70名以上
  • 入れ替わり含む
  • サーバー台数:750台以上
  • 記事クラスタDBが120台
  • テーブル数:550テーブル
  • ファイル数:43,500以上
  • git上で管理されているファイル数
  • ProgramFiles:3800以上
  • コード行数:41万行

進行中のプロジェクト

  • Server Migration
    • 2017年から3年目
    • 750台以上のサーバーの移行
  • HTTPS化対応
    • 2018年から2年目
  • 本来、この2つだけなら、ここまでの期間はかからない
  • 何故かかるのか?

Case Study

1.Docment Not Found

  • 30近いサブシステムがあるがドキュメントが無い
  • 期待を持ってクリックしたドキュメントの先に何も無い
  • 古いドキュメントだと嘘も書いてある

2.Development Server Not Found

  • 開発サーバーがない
  • チェックフロー
    • 開発サーバーは存在するか?
    • 正常に動作するか?
    • 本番環境と差分が無いか?
    • 本番環境のデータを使っていないか?
  • Easyモード:本番環境との差分がないか、本番環境のデータを使っていないかであれば比較的容易
  • Hardモード:開発サーバーが存在しない、正常に動作しない場合
  • Nightmareモード:過去に開発サーバーがない。どうやって開発していたのかも謎
  • 実際に開発サーバーが無いこともあり、移転に時間がかかっている

3.Test Not Found

  • テストが無い

4.TooMany DNS Records

  • 300以上のドメインがあった
  • 230が不要なレコード
  • キャンペーンなどが終わり、そのままの不要なレコードが沢山あった
  • 調査、削除で数ヶ月かかった

5.Too Many Function

  • 古く、不要な機能が多い
    • ガラケーページ
    • トラックバック
    • 古いCMS
    • FTP
    • moblog
    • etc...

6.Perl

  • Perl自体がレガシーという訳ではない
    • バージョンが古い 未だに5.8、最新は5.30
    • mod_perl 1.3が現役のため
    • さらにmod_perl 1.3が動くApacheが ver 1.3
  • 新しいバージョンのPerl5.16も使っている
    • 管理コストが2倍になる
    • 新旧の互換を考える必要がある

7.MySQL

  • MySQL4.0を使っている
  • 120台あるDBが全て4.0
  • テーブル構造の変更が大変
    • Online DDL:v5.6から
    • Fast Index Creation:v5.1から
    • Trigger:v5.0から
  • テーブル変更をするのに数ヶ月かかる
  • MySQL 4.0のServer Migration
    • 理想は4.0 → 5.7
    • そのままバージョンアップできないため計画は断念
    • 4.0 → 4.0
    • DB基盤が4.0で対応していないので、移行することができない
    • DB基盤にすることはできないけどAppサーバーにして移転した

なぜマイグレーションできないか?

  • character setが混在している
  • 一つのテーブルにeuc-jpとutf8が混在している
  • これが原因で正攻法のver upができない

MYySQL 4.0 DEALINE

  • MySQL Clinetからアクセスできない

LINE Blog

  • 2014年リリース
  • LINE アカウントがあれば誰でも使える

LINE Blogの歴史

  • 2014/11:サービス開始(限定的)
  • 2016/11:一般公開
  • 最初は、livedoor BlogのASPを利用して立ち上げた
  • 2016/04に開発がスタート
  • 半年後に独立したブログサービスとなった
  • 元々livedoore Blogだったのを分離した
  • Forkしたということはlivedoore Blogの環境から置き換えた
    • MySQL 4.0 → MySQL 5.6
    • Perl 5.8 → Perl5.16
    • mod_perl → PSGI
    • Mixed character set → utf-8
    • Apache → nginx
    • Low code coverage → High code coverage
    • Legacy subsystem → LINE platform
    • HTTP → HTTPS
  • LINE Blogで活かされたノウハウをlivedoore Blogに還元している
  • システム分離後も密接な関係を持って開発している

次の15年に向けて

  • 今最先端の技術を使っていても15年後には古くなっている
  • 負債を作らないのは難しいが、負債を小さくする努力はできる
  • 小さく始める
  • 不要なファイルはすぐ捨てる
  • ドキュメントが大変ならコードにコメント残す
  • 雑談レベルから始める
  • 目を背けると風化する

まとめ

livedoor Blogの歴史が非常に赤裸々に語られており非常に参考になりました。歴史の長いサービスを継続していくこと、そしてそれを次の15年に向けてく努力、負債を残さないためにも今できることを小さくてもいいから始めていくという言葉が非常に心に刺さりました。