SlideShare uma empresa Scribd logo
1 de 47
Baixar para ler offline
10年続いているWebサービスの
画像サーバをノーメンテで
FTPサーバからS3互換のストレー
ジサーバに移行している話
GMO Pepabo, Inc.
Masataka Kono
2015-10-03
PHPカンファレンス
自己紹介
● カラーミーショップのエンジニア
● ペパボに入社して2年9ヶ月
● Webプログラマー歴も2年9ヶ月
● PHPerです
● Twitterは @mapyo です
● みんなからは「ぼいらー」
ぼいらー?
ぼいらー?
ペパボはあだ名で呼び合う文化がある。
入社するとあだ名どうする?という会話がある。
ペパボに入った時に、最初に開かれた飲み会で過去
に半年間ほどボイラーのメンテナンスをしていたという
経験を話したら、次の日から、
ぼいらーと呼ばれるようになってた。
お話させて頂く内容
● 講演のタイトルに出てくる用語の説明
● 移行のイメージ
● ファイルアクセスを抽象化してくれるライブラリを
探したりPHP5.3対応したり
● 画像サーバとのやり取りを共通化
● ひたすらリファクタリング
● 具体的なデータの移行の方法
● ひたすら移行していく
講演のタイトル
10年続いているWebサービスの
画像サーバをノーメンテで
FTPサーバからS3互換のストレー
ジサーバに移行している話
講演のタイトルに出てくる用語の説明
● 10年続いているWebサービスとは?
● 画像サーバ(FTPサーバ)とは?
● S3互換のストレージサーバとは?
10年続いているWeb
サービスとは?
カラーミーショップ
● 10年続くネットショップ運営サービス
● 大部分はPHP
● 独自フレームワーク
● Rails(公開api)
● CoffeeScript
● AngularJS
● エンジニア募集中!
画像サーバ(FTPサーバ)
とは?
画像サーバ(FTPサーバ)の定義
● ブラウザでアップした商品画像などのファイル置き場
● 直接FTPサーバにユーザさんがアクセスする事はない
● 全部で18台。総容量6T弱
● 4ロールでFTPサーバにアクセス
画像サーバの参照方法
CDN経由で全てアクセスされる
S3互換のストレージサー
バとは?
S3互換のストレージサーバ
● 今回の移行プロジェクトと同時に開始
● 社内用の大統一オブジェクトストレージサービス
● APIがS3互換で裏側がMogileFS
● S3のAPIが使用可能(全てではない)
● Bayt(ベイト)と名付けられました
● 今回のお話では一先ずS3と思って頂けると。
※僕は作ってません。
※この細かい話は出てきません
※詳細は第3回ペパボテックカンファレンスで発表されたスライドをご確認ください。
http://www.slideshare.
net/lamanotrama/mogilefsprivate-s3
http://www.slideshare.net/hiboma/mogilefs-
private-s3-api
移行のイメージ
● FTPサーバとやり取りしているロジックを1箇所
に集約
● そのロジックを変更してS3互換サーバに更新が
かかるように
※データの移行方法については後ほど説明します。
※言うのは簡単だけどやるのは大変。。。
ライブラリを探す
● ファイルアクセスを抽象化してくれるライブラリ
● FTPからS3互換サーバに移行した時に同じイン
ターフェースになるように。
● 自作するのはそれなり手間がかかりそうだ
なぁ。
Flysystem
● GitHubのスター数は2000以上!
● FTP, S3だけじゃなくてLocalとかDropboxとか
Azureとかいろいろ
● Laravel, Symfony, Zendなど、メジャーなフレー
ムワークで簡単に使える仕組みも用意されてい
る
https://github.com/thephpleague/flysystem
http://flysystem.thephpleague.com/api/
めっちゃ便利そう!!
あ、、、
https://github.
com/thephpleague/flysystem/blob/master/comp
PHPのバージョンの壁
● サービスでメインで動いているPHPのバージョンは5.3系
● とはいえ、今からPHPのバージョンアップに時間は裂けな
い。。
● 他にもあったけど、機能が足りなかった
● 最初は、このライブラリの実装を参考に5.3でも動くようにし
ていた。
● でも、コピペしてPHP5.3対応してるだけな感じ。。。
FlysystemをPHP5.3で
も動くようにしよう!
よし!
という事で動くようにしました
https://github.com/mapyo/flysystem
https://github.com/mapyo/flysystem-aws-s3-v2
やったこと
● PHP5.3でテストを動かす
● テストコードをPHP5.3対応
● テストを実行
● ひたすら直す!
● []→array()
● traitをよしなに対応
● Travisで一応5.3〜5.6のテストは通っている
画像サーバとのやり取りを共通化!
● Flysystemを使いつつ、画像サーバ特有の処理
を共通化したものを作る
● しかし、4つのロールで画像サーバとやりとりす
る処理がある
● コピペコードにならないように社内用の
Composerライブラリに追加。テストも書いた。
ひたすらリファクタリング!!!
● 画面は50画面近く。細かい修正もいれるともっ
とあった。
● グローバル関数やグローバル変数との戦い
● FTPのコネクションをグローバル変数に入れて
いくつかのグローバル関数で使いまわしてたり
● ある程度まとまったグローバル関数たちをまと
めてクラス化したり
● 移行の話が出てきてから、リファクタリングが一
通り終った期間が4ヶ月間くらい。
● 一人で粛々と仕様を決めてリファクタリングしま
くってた
(こればっかりやってたわけではなくて、作業待ち
の時間もありました)
リファクタリングは無事終了。
ノーメンテで画像データ
を移行する方法
ノーメンテで画像データを移行する方法
1. APPサーバからFTPサーバとS3互換サーバの
両方に更新されるように修正
2. FTPサーバからS3互換サーバへファイルをイン
ポートする
3. FTPサーバになくて、S3互換サーバにあるファ
イルをS3互換サーバから消す。
4. CDNの接続先を切り替える(FTP→S3)
5. FTPとS3両方に更新していた処理をやめる
1.FTPサーバとS3互換サーバ両方に更新
追加、更新、削除
(put, delete)
画像サーバにアップする
処理を共通化しているの
で、変更箇所は共通化し
た部分のみ!
移行を始める時にこの
機能をまずはリリース。
2.FTPからS3サーバにファイルを送る
1. rsyncする
2. インポートする
※一工夫あり
インポートする処理について
● s3cmdを使ってファイルをputする
● 既にファイルがある場合はputをスキップ
● つまり、S3互換サーバにないファイルのみput
する
※ちょっとややこしいのでもう一回戻って説明しま
す。
※1パターンを除いてこれで対応可能
別途対応しないといけないパターン
● rsync〜インポートするまでの時間に、削除され
たファイル。
● S3互換サーバに削除されたファイルが残ってし
まうので消す
※もう一回戻りましょう。
3.余分なファイルの削除とチェック
● S3互換サーバからファイルの一覧取得
● FTPサーバからファイルの一覧取得
● 2つを比較
● S3互換サーバにあって、FTPサーバにないもの
をS3互換サーバから削除
PHPで削除用スクリプトを作って対応
4.CDNの接続先を切り替える
変更前
4.CDNの接続先を切り替える
変更後
5.画像を同時に更新する処理をやめる
以上でノーメンテで切り
替えできました!
やったー!!!
この作業を×18台!
● 1台につき、3日〜4日くらい
● 並列で進められる部分は進めた
● インポートの処理が負荷の関係で並列で出来なかった
● だいたい3ヶ月くらいかかった。
しかし!
先月、無事に全台移行
が完了しました!
やったー!!!1
そして、、、
最後に
● 画像サーバを移行しようという話が出たのが今
年の1月。
● そこからどうしようか考えて共通処理作ってリ
ファクタリングしてデータを移行して終ったのが
9月
● 長かった。。。。
最後に2
● ユーザさんとしては全く普段と変わらない
● しかし、裏側の仕組みはガラリと変わっている
● というのがなんか面白かった
● 大きな障害もなく、無事移行が完了出来たのが
一番よかった!!!
ありがとうございまし
た!!!
以上です!!

Mais conteúdo relacionado

Mais procurados

zval をダイエットしてみた
zval をダイエットしてみたzval をダイエットしてみた
zval をダイエットしてみた
Yoshio Hanawa
 

Mais procurados (20)

PHP-MLを使用して気軽に機械学習にトライしてみる
PHP-MLを使用して気軽に機械学習にトライしてみるPHP-MLを使用して気軽に機械学習にトライしてみる
PHP-MLを使用して気軽に機械学習にトライしてみる
 
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
 
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニックPHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニック
 
ウェブエンジニアとしての1年目を振り返って
ウェブエンジニアとしての1年目を振り返ってウェブエンジニアとしての1年目を振り返って
ウェブエンジニアとしての1年目を振り返って
 
Quercus on gae公開版
Quercus on gae公開版Quercus on gae公開版
Quercus on gae公開版
 
あと一つプログラミング言語を
覚えたら死ぬ! 脳みそがパンクしそうな
あなたのための
nodeJSことはじめ
あと一つプログラミング言語を
覚えたら死ぬ! 脳みそがパンクしそうな
あなたのための
nodeJSことはじめあと一つプログラミング言語を
覚えたら死ぬ! 脳みそがパンクしそうな
あなたのための
nodeJSことはじめ
あと一つプログラミング言語を
覚えたら死ぬ! 脳みそがパンクしそうな
あなたのための
nodeJSことはじめ
 
PHPマニュアルの育て方
PHPマニュアルの育て方PHPマニュアルの育て方
PHPマニュアルの育て方
 
2015年4月ペパボテックカンファレンス資料
2015年4月ペパボテックカンファレンス資料2015年4月ペパボテックカンファレンス資料
2015年4月ペパボテックカンファレンス資料
 
トークイベントいろいろ
トークイベントいろいろトークイベントいろいろ
トークイベントいろいろ
 
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するphp-buildがいかに便利かを力説する
php-buildがいかに便利かを力説する
 
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情PHP7の拡張モジュール事情
PHP7の拡張モジュール事情
 
たのしい独自フレームワーク
たのしい独自フレームワークたのしい独自フレームワーク
たのしい独自フレームワーク
 
bottle.pyをつかったチャットアプリ作成チュートリアル
bottle.pyをつかったチャットアプリ作成チュートリアルbottle.pyをつかったチャットアプリ作成チュートリアル
bottle.pyをつかったチャットアプリ作成チュートリアル
 
Requestsで始める5分前帰社
Requestsで始める5分前帰社Requestsで始める5分前帰社
Requestsで始める5分前帰社
 
PHP7はなぜ速いのか
PHP7はなぜ速いのかPHP7はなぜ速いのか
PHP7はなぜ速いのか
 
PHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイントPHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイント
 
PHPNGの動向
PHPNGの動向PHPNGの動向
PHPNGの動向
 
zval をダイエットしてみた
zval をダイエットしてみたzval をダイエットしてみた
zval をダイエットしてみた
 
2014 1-19
2014 1-192014 1-19
2014 1-19
 
究極のPHP本完成
究極のPHP本完成究極のPHP本完成
究極のPHP本完成
 

Destaque

Destaque (20)

ライブコーディング・Androidのライブラリを作ってみよう
ライブコーディング・Androidのライブラリを作ってみようライブコーディング・Androidのライブラリを作ってみよう
ライブコーディング・Androidのライブラリを作ってみよう
 
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
 
Phpcon2015
Phpcon2015Phpcon2015
Phpcon2015
 
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasiaサンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
 
Behat Driven Development
Behat Driven DevelopmentBehat Driven Development
Behat Driven Development
 
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSDrupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
 
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015
 
営業・運用を支える "気付ける" 管理画面
営業・運用を支える "気付ける" 管理画面営業・運用を支える "気付ける" 管理画面
営業・運用を支える "気付ける" 管理画面
 
Visual Studio Code #phpcon2015
Visual Studio Code #phpcon2015Visual Studio Code #phpcon2015
Visual Studio Code #phpcon2015
 
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
 
PHPデプロイツールの世界
PHPデプロイツールの世界PHPデプロイツールの世界
PHPデプロイツールの世界
 
WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 
Android lint-srp-practice
Android lint-srp-practiceAndroid lint-srp-practice
Android lint-srp-practice
 
ビジュアル構文解析
ビジュアル構文解析ビジュアル構文解析
ビジュアル構文解析
 
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素
 
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
 
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
 

Último

Último (11)

論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話