実践的インフラ監視&運用 - 4000万人以上のユーザーに快適なサービスを提供するピクシブの裏側

大規模サービスを安定運用するコツってなに?実運用に基づく知見をピクシブ株式会社のインフラエンジニア、末吉さんと小出さんに聞きました。

実践的インフラ監視&運用 - 4000万人以上のユーザーに快適なサービスを提供するピクシブの裏側

システム運用は、生き物です。
人気が出ればリクエスト数は急上昇。経年劣化でサーバーが壊れることもある一方で、次々と新しいサービスも展開しなければなりません。規模が大きくなると、システムを障害なく運用することは至難のワザです。

大規模サービスを安定運用するコツは何か──その秘訣を探るべく、ピクシブ株式会社のインフラチームで活躍する2人に疑問をぶつけてみました。ユーザー数が4,000万人を超えた「pixiv」を、運用・監視する現場のノウハウとは。

1
末吉剛(すえよし・ごう/ 2@sue445 /写真左)さん
ピクシブ株式会社インフラ部所属。2018年7月入社。アプリからインフラまで、サーバーサイドを幅広く手がける。rubicure、Itamae、chatwork-rubyなど、多数のOSSを公開している。
小出周之(こいで・ちかし/ 3@dekovoko /写真右)さん
ピクシブ株式会社インフラ部所属。2018年8月入社。サーバー構築・運用、システム改善など、オンプレミス環境メインで、さまざまなインフラ運用を手がける。

ピクシブのサービスを支えるサーバーは大部分がオンプレミス

──ピクシブ社と言えば、pixivをはじめBOOTHVRoidなどさまざまな人気サービスを展開しておられます。まずは、これらのサービスを支える「インフラの全体的な構成」を簡単に教えていただけますか。

小出 フロントサーバー(ロードバランサー)、AP(アプリケーション)サーバー、DBサーバーというベーシックな3層構造が基本です。

4

ユーザーからのリクエストは、まず、DNSラウンドロビンで、それぞれのフロントサーバーに分散され、Nginxロードバランサーで受けます。ロードバランサーには、配下のAPサーバー群がアップストリームとして定義してあり、それぞれのAPサーバーに負荷分散しています。APサーバーは、基本的に1サーバー1機能になっており、台数としては AP > フロントサーバーで構成されています。

DBサーバーはマスタースレーブ構成で、前段にLVSを配置して負荷分散しています。DBサーバーは全サーバーの中で最も台数が多く、役割に応じて細かく系統を分けて構築しています。また、DBとは別にセッション情報の管理として、KVSのRedisサーバーを使っています。

末吉 画像のキャッシュには、ピクシブとさくらインターネットさんで共同開発しているImageFluxという画像変換サービスのオンプレミス版を利用しています。これが、いわゆるプライベートCDNとして機能しています。

──サービスが大きいですから、サーバーの台数も多くなりそうですよね。運用はクラウドですか?

小出 サーバーは全部で300台ほどありますが、その9割がオンプレミスです。サービス環境ではコンテナや仮想化技術を使っておらず、まさに物理的なサーバーとして構成しています。クラウドはPawooなどの一部サービスや、短期的なイベント系など、突発的に負荷が高まるサービスや新規サービス立ち上げ時に利用しています。

──9割がオンプレミスなんですね! 運用は大変ではありませんか?

小出 大変ですね(笑)。ディスクやサーバーが故障するリスクもありますし……。もちろん故障リスクを前提にして横に並べているので、同一の系統内で数台は壊れても問題ない設計にしてあります。

なお、データセンターとはマネージド契約をしているので、故障時の対応はデータセンターに任せておける体制があります。僕らが直接ディスクを交換することはありませんし、サーバーのキッティングについても、依頼事項をまとめて申請すればデータセンター側で対応してもらえます。

末吉 そこから先は、僕らの作業です。と言っても、Ansibleを使って自動化しているので、一発でサーバーを構築できます。システムの構成変更が生じたときも、AnsibleのPlaybookを修正して適用するという流れになります。OSやミドルウェアのアップデートも同様です。

5

──データベースのバックアップは、どのようにされていますか?

小出 DBサーバーは、マスタースレーブによるレプリケーション構成をとっており、そのうちの1台を、ユーザーのリクエストを受け付けないスレーブサーバーとしています。このサーバーのデータを定期的にハードディスクに書き出すことでバックアップとしています。バックアップには、創業以来10年分のデータがぎっしり詰まっています。

──いままでデータベースが壊れたことはありますか?

小出 幸い、自分が入社してからはデータが壊れたことはありません。DBサーバーが落ちたということもありませんが、重いクエリが発行され詰まるということがまれにあります。しかし、仮に特定サーバーで詰まったりDBが落ちたとしても、障害が発生しているDBをLVSから切り離す独自スクリプトが動いているので、ユーザーに影響が出ることはありません。

──相当なアクセスがあると思うのですが、どれくらいの規模なのでしょう。

小出 あまり詳しくは言えませんが、DBサーバーの場合、平均すると大体秒間6万クエリで、ピーク時は秒間10万クエリ以上まで増えます。これはDBサーバー1系統分なので、システム全体で言えば、もっともっと大きな値になります。

──やはりすごい数字ですね……。安定して動かすのも大変そうです。

末吉 システムは安定していますが、Twitterなど外部でバズったりした場合ユーザーリクエストが急増しアラートが上がってくる、という全く予想がつかない局面もやはりあります。そういった場合でも迅速に対処し、そのフィードバックを随時行うことで日々運用を改善しています。  

監視はNagiosとMuninでシンプルに

エンジニアHubに会員登録すると
続きをお読みいただけます(無料)。
登録のメリット
  • すべての過去記事を読める
  • 過去のウェビナー動画を
    視聴できる
  • 企業やエージェントから
    スカウトが届く