Upgrade to Pro — share decks privately, control downloads, hide ads and more …

pixivを支える技術 / 技育CAMPアカデミア

pixivを支える技術 / 技育CAMPアカデミア

世界から使われるサービスのつくりかた
〜pixivを支える技術〜

技育CAMPアカデミア
2024-07-04

Harukasan

July 02, 2024
Tweet

More Decks by Harukasan

Other Decks in Technology

Transcript

  1. © pixiv Inc. 2 Harukasan 道井 俊介 福岡県 久留⽶市 ⽣まれ

    イラストSNS pixiv がサービス開始 ピクシブ株式会社 ⼊社 • 新卒でインフラエンジニアとして⼊社 • 画像配信やデータ基盤の構築を担当 画像変換クラウドサービス ImageFlux リリース ピクシブ株式会社 執⾏役員 CTO (現任) 1988 2007 2012 2016 2020
  2. © pixiv Inc. ピクシブ株式会社 設⽴    2005年7⽉ 従業員数  585名 (正社員: 367名)

    (2024年6⽉現在) うちエンジニアがだいたい150⼈くらい 所在地 東京オフィス (東京都渋⾕区千駄ヶ⾕) 福岡オフィス (福岡県福岡市博多区) 3
  3. © pixiv Inc. 5 ⽇本 中国⼤陸 アメリカ 韓国 台湾‧マカオ ‧⾹港

    その他 利⽤ユーザーの割合 主な国‧地域 アジア 84% ヨーロッパ 4% その他 1% 北⽶中南⽶ 11% 52% 8% 出典:pixiv ユーザー情報⾃社調べ(2023年5⽉) 8% 7% 6% 18% 世界で愛されるサービスへ
  4. © pixiv Inc. 世界から使われるサービスをつくるには たとえば…… • Clodflare Workers を使うと最速なのでは •

    なんか Rust ってやつで書くと速そう • なんとなく AWS や Google Cloud をつかってつくればいいのでは? 6
  5. © pixiv Inc. いかにして世界から使われるサービスをつくるか 結局のところそれぞれのサービスの性質に依る • pixiv と Amazon と

    NETFLIX ではおなじ Web サービスでも根本から異なる • それぞれのサービスの特徴を把握して、サービスを成⻑させていくしかない • 重要になるのはサービスをどう拡張していくか、拡張できるようにするか • 基本を抑えつつ、 pixiv の特に特徴的な部分について紹介 9
  6. © pixiv Inc. 今⽇のアジェンダ 1. Web サービスにおける拡張性 (Scalability) の考え⽅ 2.

    pixiv のアーキテクチャとスケーラビリティ • データベース • コンテンツ配信 3. pixiv のインフラストラクチャ 10
  7. © pixiv Inc. Scalability スケーラビリティ システムの拡張性の⾼さを表現したいとき、ウリにしたいときに なにかと便利に使われている⽤語のひとつ • システムの能⼒を測る基準のひとつ •

    負荷にあわせてリソースを増やしたり減らしたりできること (Load Scalability) • システムを作ったあとに変更できること • お⾦をかければどうにかできる、どうにかなること 12
  8. © pixiv Inc. Scalability におけるポイント • スループット (Throughput) • 帯域幅

    (Bandwidth) • レイテンシー (Latency) • 拡張 (Scaling) 13
  9. © pixiv Inc. Processing Time / Latency 処理時間 / レイテンシー

    単⼀の処理にかかる時間、転送にかかる時間 • 並列数をいくら増やしても遅延は⼩さくならない • 遅延を解消するには処理速度をはやくするしかない たとえば⾶⾏機で運ぶ 17 5 min elapsed Throughput: 12 box / hour
  10. © pixiv Inc. Scaling システムのスループットを⾼めるには: • 並列数を⼤きくする • 処理時間を短くし、遅延を⼩さくする そのためには

    • スケールアップ/スケールアウトする • 処理を最適化する、設定をチューニングする 19
  11. © pixiv Inc. — Rob Pike, 1989, "Notes on Programming

    in C". http://www.literateprogramming.com/pikestyle.pdf 20 Rule 1. プログラムがどこで時間を消費することになるかはわからない。ボトルネッ クは思いがけない場所でおきる。したがって、どこがボトルネックかわかるまで、 推測したり、スピードハックを⾏ってはならない。 Rule 2. 計測せよ。計測するまで⾼速化のためにチューニングしてはいけない。コー ドの⼀部が他を圧倒していないのであればなおさらしてはいけない。 “
  12. © pixiv Inc. 複雑性 (Complexity) と拡張性 (Scalability) • プログラムやアーキテクチャが複雑になって良いことはなにもない •

    Web サービスのどこにボトルネックがあるか簡単にわかる⽅法はない • スケーラビリティを⾼めようとしてシステムを容易に変更できなくなって しまっては本末転倒 • そのためにはどこを改善すべきか計測すること。システムのメトリクスは継 続的に計測する。最適化する前にはより詳細なプロファイルを取得する 21
  13. © pixiv Inc. 世界から使われるサービスをつくるには Web サービスは⽣まれた瞬間から世界中から使われることはない • スケールアップ‧スケールアウトが必要になるまでシステムを複雑にしすぎ てはいけない。複雑であるほどスケーラビリティは低下する •

    どのように動いているか計測し、拡張し続けられるように改善し続けなけれ ばスケールアップ‧スケールアウトすることは難しくなってしまう • 無駄な処理を省くことはもっとも簡単なスケールアップのひとつ。システム を分散させて複雑になる前に、プログラムに改善することはないか⼗分に検 討する 22
  14. © pixiv Inc. pixiv におけるデータストレージ • RDB: MySQL • KVS:

    Redis • Search Engine: Solr • Object Storage: Ceph, Amazon S3, GCS • Image Storage: Infinity Store • DWH: Google BigQuery 25
  15. © pixiv Inc. pixiv における RDB 役割毎に複数のデータベースに分割 • イラスト、ユーザー情報 •

    ⼩説 • 評価履歴、過去ランキング • 作品のブックマーク、ユーザーのフォロー情報 • ブックマーク統計情報 • ユーザー向けアクセス解析⽤閲覧履歴 • などなど…… 26
  16. © pixiv Inc. なぜ複数のデータベースに分割するか データ構造によって性質が異なるので分割したほうが最適化しやすい • データベースによってデータ増加速度にばらつきがある • データの性質によってアクセスパターンが異なる ◦

    イラストや⼩説の本⽂: 更新より参照が圧倒的に多い ◦ ブックマーク: 更新が⾮常に多く、テーブルの⾏数も多い ◦ 閲覧履歴: 追記しか発⽣しない • 同時に更新する必要がなければ同時にロックをとる必要がない 27
  17. © pixiv Inc. 垂直分割と⽔平分割 • pixiv では Sharding によるデータベースの分割をしていない •

    現代においては TiDB や CockroachDB といった選択肢がある • AWSのAmazon AuroraやGoogle CloudのAlloyDBも選択肢になる 30
  18. © pixiv Inc. 適切なインデックスを張る スケールアウトだけで性能を改善するには限界がある • CPUやメモリのアクセス速度は大幅に改善していない • たくさんのデータを処理すればそれだけ時間がかかる •

    計算時間を小さくするにはデータ量を少なくするのが手っ取り早い 適切なインデックスをはることでスキャンするデータ量を小さくできる 31
  19. © pixiv Inc. 検索エンジンを活用する Elasticsearch や Solr といった検索エンジンは全文検索に特化したインデックスを分散 処理できる。 •

    ピクシブでは N-gram や Unigram のインデックスも活用している • 一般的な自然文検索では新しく登場するキャラクターには対応できない • Unigramがないと1文字キャラクターを検索できない • ユーザーの検索クエリにあわせてインデックスを使い分ける • 巨大な検索には Google BigQuery を用いる 32
  20. © pixiv Inc. DWHを活⽤する 複数のサービスから⽬的ごとに統合して時系列ごとに保存した構造化データを溜 め込む先を DWH と呼ぶ。現代では⼤量の時系列データを格納して SQL でクエリ

    を書けるところ、ぐらいのイメージで捉えられている ピクシブでは全社のDWHとして Google BigQuery を採⽤している • RDB では複数の DB やサービスを横断するクエリを書くのが難しい • 例えば、 pixiv と BOOTH と pixivFANBOX を横断して使っているユーザーの数 を数えるには……? 33
  21. © pixiv Inc. pixiv の Google BigQuery 全社のさまざまな機能、BIの基盤として BigQuery を活⽤している

    • 2013年頃から全社の基盤として採⽤ • データ量: 約 7.8PiB • アップロード: 約 6.9TiB / day • テーブル数: 約 180,000 テーブル • ジョブ数: 約 52,000 件 / day 参考: 【PIXIV MEETUP 2023】ピクシブのデータインフラと組織構造 https://speakerdeck.com/kashira/pixiv-meetup-2023-pikusibunodeta-inhuratozu-zhi-gou-zao 34
  22. © pixiv Inc. pixiv のデータベース: まとめ • 適切なサイズにデータベースを分割する • 分割するほど複雑性が⾼まるので分割しすぎない

    • 適切にインデックスをはり、適切にクエリをチューニングする • クエリをチューニングしすぎて複雑にしない • 検索エンジンを活⽤する • Google BigQuery を活⽤して横断的な分析を実現する 35
  23. © pixiv Inc. 光は遅い ⽇本からアメリカの⻄海岸 (ロサンゼルス) までだいたい 8,800km 光の速度は真空中で約 300,000

    km/s 、光ファイバーだと 200,000km/s ぐらい ∴ 理論上のレイテンシーは 44ms TCPでは3回のRTTが必要なので⽇本とアメリカで通信すると 264ms 以降のパケットも 44ms 遅れて届く 60fps のゲームだと2.5フレームぐらい遅れてしまう 39
  24. © pixiv Inc. CDNを活用する 光より速く通信することは現代ではまだ難しいので、コンテンツを物理的に ユーザーの近くに配置するしかない CDN は事業者によってそれぞれアーキテクチャが異なる • POPの数と配置のしかた

    • キャッシュ容量と機能 • セキュリティ機能 (DDoS Protection、WAF、Bot protection) の有無 • エッジコンピューティング pixiv では CDN として Cloudflare Enterprise を選択 40
  25. © pixiv Inc. エッジコンピューティングの活⽤ pixiv ではいまのところエッジコンピューティングをうまく活⽤できていない • SSR を⾏うにはコンテンツやユーザーの情報が必要になる •

    DB に保存されているコンテンツ/ユーザー情報はリージョン分散が難しい • データが遠い場所にあるとエッジで処理しても応答時間は短くならない 41 PHP Cloudflare Node.js MySQL Redis
  26. © pixiv Inc. pixiv における画像配信 pixiv のメインコンテンツは画像なので、画像が表⽰されないとユーザー体験が ⼤きく低下する pixiv における画像配信の特徴:

    • ⼤量の画像ファイル • 1枚ごとのサイズのばらつき: 平均60KB 最⼤15MB (95%tileで 300KB) • ⼤量のリクエストと転送量 42
  27. © pixiv Inc. pixiv の画像配信クラスタ 国内の画像配信にはCDNではなく独⾃のコンテンツ配信クラスターをオンプレミ スに構築している • ネットワーク費⽤はクラウドよりもオンプレミスの⽅が圧倒的に安い →

    100Gbpsの回線を複数本利⽤し帯域コストを削減 • CDNでは⼤量の画像ファイルをキャッシュ出来ずキャッシュヒット率が低い → SSDを⼤量に搭載したキャッシュクラスタを構築し運⽤ そのためには今のところ地理的なスケーラビリティを諦めている 43
  28. © pixiv Inc. 44 Webサービスの画像の悩みを解決する画像変換‧配信のクラウドサービス 開発した画像変換機能をサービスとして販売する • pixivのサービスの中核は画像を中⼼としたUGCで⾼品質な画像配信は最重要機能のひとつ • 画像変換⾃体をビジネスにすることで、画像変換技術⾃体に継続的に投資できる

    • ピクシブだけだとノウハウがないので、⼀般向けのSaaSとしてさくらインターネットと共同開発 • ⼀⾔に画像ファイルといってもUGCでは多数の種類があり、世の中にはこれまでに⾒たこともない (変な)画像ファイルがたくさんあるので、お客様が増えるほど画像変換の品質を改善できる • 実際に ImageFlux のユーザー要望で実装した機能を取り込んだ例がいくつもある
  29. © pixiv Inc. pixiv のコンテンツ配信: まとめ CDNを活⽤し世界中にコンテンツを配信できるようにする • 光は遅いのでユーザーの近くからコンテンツを配信できるようにする •

    サービスの性質にあわせたCDNを選択する 地理的に限定することで低コストかつ⾼速なコンテンツ配信を実現する • 画像変換‧配信技術に投資し改善しつづける 45
  30. © pixiv Inc. pixiv のインフラストラクチャ 社内の⼀⾓におかれたむき出しのマザーボードPC からはじまった • 会社がはじまったのが 2005年、AWS

    が EC2 をリリースしたのが2006年 • 現在では都内をはじめ複数のデータセンターにホスティングして運⽤ 48
  31. © pixiv Inc. オンプレミスとクラウド pixiv ではインフラストラクチャの基盤としてオンプレミスを活⽤している パブリッククラウドとしては AWS と Google

    Cloud の両⽅を使える なぜいまだにオンプレミスを残しているのか: • 規模が安定したプロダクトにおいてはネットワーク転送量、計算資源の両⽅ でオンプレミスの⽅がまだまだコストが低い • すべてをオンプレミス、すべてをパブリッククラウドにする必然性はない • システムの特徴に応じて最適なアーキテクチャを選択することが重要 49
  32. © pixiv Inc. オンプレミスの良いところ/良くないところ 基本的にいまから採⽤するならパブリッククラウドを採⽤したほうが良い • ピクシブでも新規サービスの多くにパブリッククラウドを採⽤している • パブリッククラウドのほうが考えることが圧倒的に少ない •

    パブリッククラウドとオンプレミスの違いは責任分界点の違い • コンテンツ配信という領域に絞っていえばオンプレミスでやれることは多い • これまでの資産を有効に活⽤するかどうか 50