Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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(ベイト)と名付けられま...
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など、メジャーなフレー
ムワークで簡単に使...
http://flysystem.thephpleague.com/api/
めっちゃ便利そう!!
あ、、、
https://github.
com/thephpleague/flysystem/blob/master/comp
PHPのバージョンの壁
● サービスでメインで動いているPHPのバージョンは5.3系
● とはいえ、今からPHPのバージョンアップに時間は裂けな
い。。
● 他にもあったけど、機能が足りなかった
● 最初は、このライブラリの実装を参考に5.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互換サーバにあるファ
イル...
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
● ユーザさんとしては全く普段と変わらない
● しかし、裏側の仕組みはガラリと変わっている
● というのがなんか面白かった
● 大きな障害もなく、無事移行が完了出来たのが
一番よかった!!!
ありがとうございまし
た!!!
以上です!!
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
Upcoming SlideShare
Loading in …5
×

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

22,031 views

Published on

PHPカンファレンスでの発表資料です

Published in: Technology
  • Be the first to comment

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

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

×