655 Views
December 03, 19
スライド概要
「Bonfire#4 Kubernetesで課題解決」で使用した資料になります。
https://yj-meetup.connpass.com/event/153658/
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
ヤフーのナビゲーション系の バックエンドサービスの課題を k8sで解決した話 2019年12⽉3⽇ メディアカンパニー 検索統括本部 ⾼⽊ 克彰 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
⾃⼰紹介 ■名前 ⾼⽊ 克彰(たかぎ かつあき) 18新卒⼊社 @tkgtransit ■ヤフーでの仕事 ■⼊社〜 Yahoo!地図、Yahoo!カーナビ、 DevRelアソシエイト ■今期〜 Yahoo!動画検索、Yahoo!画像検索、 DevRelアソシエイト ■趣味 ガジェット、ダーツ、写真、 ゲーム(FPS、PRG、レース) Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 2
アジェンダ ・ヤフーのナビゲーション機能について ・従来のアーキテクチャ ・抱えていた課題 ・改善後のアーキテクチャー ・改善により解決されたこと ・まとめ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 3
ヤフーのナビゲーション機能 ・Yahoo!マップ ・Yahoo!カーナビ ・Yahoo!乗換案内 ・徒歩ナビ機能 ・カーナビ機能 ・乗換ナビ機能 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 4
ヤフーのナビゲーション機能 ・Yahoo!マップ ・Yahoo!カーナビ ・Yahoo!乗換案内 ・徒歩ナビ機能 ・カーナビ機能 ・乗換ナビ機能 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 5
従来のアーキテクチャー ・アプリ⽤仮想サーバー ・エンジンデータ更新は1台ずつ ・Web⽤に⽐べてIFが異なる ・C++, Apache Module ※簡易イメージ ・Web⽤仮想サーバー ・エンジンデータ更新は1台ずつ ・アプリ⽤に⽐べてIFが異なる ・ C++, Apache Module ・YOLP API ・仮想サーバーからPaaSに移⾏ ・その他 ・社内オブジェクトストレージ等 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 6
従来のアーキテクチャー ・アプリ⽤仮想サーバー ・エンジンデータ更新は1台ずつ ・Web⽤に⽐べてIFが異なる ・C++, Apache Module ※簡易イメージ ・Web⽤仮想サーバー ・エンジンデータ更新は1台ずつ ・アプリ⽤に⽐べてIFが異なる ・ C++, Apache Module ・YOLP API ・仮想サーバーからPaaSに移⾏ ・その他 ・社内オブジェクトストレージ等 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 7
従来のアーキテクチャー ・アプリ⽤仮想サーバー ・エンジンデータ更新は1台ずつ ・Web⽤に⽐べてIFが異なる ・C++, Apache Module ※簡易イメージ ・Web⽤仮想サーバー ・エンジンデータ更新は1台ずつ ・アプリ⽤に⽐べてIFが異なる ・ C++, Apache Module ・YOLP API ・仮想サーバーからPaaSに移⾏ ・その他 ・社内オブジェクトストレージ等 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 8
従来のアーキテクチャー ・アプリ⽤仮想サーバー ・エンジンデータ更新は1台ずつ ・Web⽤に⽐べてIFが異なる ・C++, Apache Module ※簡易イメージ ・Web⽤仮想サーバー ・エンジンデータ更新は1台ずつ ・アプリ⽤に⽐べてIFが異なる ・ C++, Apache Module ・YOLP API ・仮想サーバーからPaaSに移⾏ ・その他 ・社内オブジェクトストレージ等 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 9
抱えていた課題 ・IFが異なるだけで基本ロジック はほぼ同じだった ※簡易イメージ ・エンジンデータ更新は1台ずつ シェルスクリプトを起動していた →時間が半⽇かかっていた ・脆弱性対応などが多く、 新規開発に割くリソースが少ない ・ヒューマンエラーによる事故 ・障害発⽣時は⼿動オペレーション ・⾃動でスケールしない Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 10
抱えていた課題 ・IFが異なるだけで基本ロジック はほぼ同じだった ※簡易イメージ ・エンジンデータ更新は1台ずつ シェルスクリプトを起動していた →時間が半⽇かかっていた ・脆弱性対応などが多く、 新規開発に割くリソースが少ない ・ヒューマンエラーによる事故 ・障害発⽣時は⼿動オペレーション ・⾃動でスケールしない Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 11
抱えていた課題 ・IFが異なるだけで基本ロジック はほぼ同じだった ※簡易イメージ ・エンジンデータ更新は1台ずつ シェルスクリプトを起動していた →時間が半⽇かかっていた ・脆弱性対応などが多く、 新規開発に割くリソースが少ない ・ヒューマンエラーによる事故 ・障害発⽣時は⼿動オペレーション ・⾃動でスケールしない Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 12
抱えていた課題 ・IFが異なるだけで基本ロジック はほぼ同じだった ※簡易イメージ ・エンジンデータ更新は1台ずつ シェルスクリプトを起動していた →時間が半⽇かかっていた ・脆弱性対応などが多く、 新規開発に割くリソースが少ない ・ヒューマンエラーによる事故 ・障害発⽣時は⼿動オペレーション ・⾃動でスケールしない Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 13
抱えていた課題 ・IFが異なるだけで基本ロジック はほぼ同じだった ※簡易イメージ ・エンジンデータ更新は1台ずつ シェルスクリプトを起動していた →時間が半⽇かかっていた ・脆弱性対応などが多く、 新規開発に割くリソースが少ない ・ヒューマンエラーによる事故 ・障害発⽣時は⼿動オペレーション ・⾃動でスケールしない Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 14
抱えていた課題 ・IFが異なるだけで基本ロジック はほぼ同じだった ※簡易イメージ ・エンジンデータ更新は1台ずつ シェルスクリプトを起動していた →時間が半⽇かかっていた ・脆弱性対応などが多く、 新規開発に割くリソースが少ない ・ヒューマンエラーによる事故 ・障害発⽣時は⼿動オペレーション ・⾃動でスケールしない Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 15
改善後のアーキテクチャー ・API層 ・アプリとWebで統合 ・Spring Boot + Java ・社内PaaSに移⾏ ※簡易イメージ ・エンジン層 ・社内CaaSに移⾏ ・構成は Apache + C++ ・バイナリーデータは init containerで取得し、 オンメモリーに展開 ・データは⼊稿したらk8sの Cronを実⾏させるように変更 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 16
改善後のアーキテクチャー ・API層 ・アプリとWebで統合 ・Spring Boot + Java ・社内PaaSに移⾏ ※簡易イメージ ・エンジン層 ・社内CaaSに移⾏ ・構成は Apache + C++ ・バイナリーデータは init containerで取得し、 オンメモリーに展開 ・データは⼊稿したらk8sの Cronを実⾏させるように変更 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 17
改善後のアーキテクチャー ・API層 ・アプリとWebで統合 ・Spring Boot + Java ・社内PaaSに移⾏ ※簡易イメージ ・エンジン層 ・社内CaaSに移⾏ ・構成は Apache + C++ ・バイナリーデータは init containerで取得し、 オンメモリーに展開 ・データは⼊稿したらk8sの Cronを実⾏させるように変更 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 18
改善後のアーキテクチャー ・API層 ・アプリとWebで統合 ・Spring Boot + Java ・社内PaaSに移⾏ ※簡易イメージ ・エンジン層 ・社内CaaSに移⾏ ・構成は Apache + C++ ・バイナリーデータは init containerで取得し、 オンメモリーに展開 ・データは⼊稿したらk8sの Cronを実⾏させるように変更 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 19
改善により解決されたこと ・API層とエンジン層は 基本的に切り離すように変更 →修正時の検証範囲が少なく ※簡易イメージ ・エントリーポイントの統合 →保守コストの削減 ・速度が特に重要なエンジン層は kubernetesへ移⾏ →急なアクセス負荷向上時でも すぐにスケールできるように ・⼊稿データからバイナリーデータ の⽣成はk8sのCron機能を使⽤ →作業コストが削減 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 20
改善により解決されたこと ・API層とエンジン層は 基本的に切り離すように変更 →修正時の検証範囲が少なく ※簡易イメージ ・エントリーポイントの統合 →保守コストの削減 ・速度が特に重要なエンジン層は kubernetesへ移⾏ →急なアクセス負荷向上時でも すぐにスケールできるように ・⼊稿データからバイナリーデータ の⽣成はk8sのCron機能を使⽤ →作業コストが削減 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 21
改善により解決されたこと ・API層とエンジン層は 基本的に切り離すように変更 →修正時の検証範囲が少なく ※簡易イメージ ・エントリーポイントの統合 →保守コストの削減 ・速度が特に重要なエンジン層は kubernetesへ移⾏ →急なアクセス負荷向上時でも すぐにスケールできるように ・⼊稿データからバイナリーデータ の⽣成はk8sのCron機能を使⽤ →作業コストが削減 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 22
改善により解決されたこと ・API層とエンジン層は 基本的に切り離すように変更 →修正時の検証範囲が少なく ※簡易イメージ ・エントリーポイントの統合 →保守コストの削減 ・速度が特に重要なエンジン層は kubernetesへ移⾏ →急なアクセス負荷向上時でも すぐにスケールできるように ・⼊稿データからバイナリーデータ の⽣成はk8sのCron機能を使⽤ →作業コストが削減 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 23
改善により解決されたこと ・API層とエンジン層は 基本的に切り離すように変更 →修正時の検証範囲が少なく ※簡易イメージ ・エントリーポイントの統合 →保守コストの削減 ・速度が特に重要なエンジン層は kubernetesへ移⾏ →急なアクセス負荷向上時でも すぐにスケールできるように ・⼊稿データからバイナリーデータ の⽣成はk8sのCron機能を使⽤ →作業コストが削減 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 24
まとめ ・デプロイから本番投⼊までの作業時間が短縮 ・ミドルウェアの更新に伴う作業時間も短縮 ・障害発⽣時も⾃動復旧 ・アクセス数増加時のスケールも⾃動化 新規開発などに集中できるように︕︕ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 25
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.