Ph perがawsと出会ってdev opsを目指した話

  • View
    3.680

  • Download
    1

  • Category

    Software

Preview:

DESCRIPTION

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

Citation preview

PHPerがAWSと 出会って

DevOpsを目指した話!

2014/10/11 php conference2014

Retty, Inc 梅田昌太 @ebisusurf

1

本日のお品書き

• 前菜 ご挨拶

• メイン サービスの成長とインフラの成長

• デザート AWSを使ってDevOpsを目指す

2

サービスの成長とインフラの成長

AWSを使ってDevOpsを目指す

ご挨拶

3

4

Rettyという恵比寿にある会社から来ました

Rettyって?

5

Rettyって?

• 食を通じて世界中の人々をHappyに

• グルメサービスです!

• AppStore Google PlayへGo!

6

About me@ebisusurf 梅田昌太

AWS &

プリンタ7

About me担当

炒飯

8

炒飯な理由

• 皆に愛される平和なメニュー

• ラーメンに対するマイノリティ感

• ラーメンの話は殴り合いになるからNG

9

About me

• SoftwareDesign

• 2014年5月号~7月号

• 短期集中連載

• Rettyのサービス拡大を支えた“たたき上げ”DevOps

10

Career

• 渋谷でPerl,六本木でPHP

• アプリケーションエンジニアです

• Vim好き

11

PerlとPHPのキャリアが が長い&好きなので

12

13

本題

14

サービスの成長とインフラの成長AWSを使ってDevOpsを目指す

ご挨拶

15

まずは今の構成をご紹介

• retty.me(メインサービス)

• news.retty.me(ニュース配信)

• owner.retty.me(店舗様向けサービス)

16

CloudFront

RDS

EC2ELB

EB

S3

retty.me

RDS

EC2ELB

RDS

EC2ELB

Nginx Nginx

EMR

MongoDB

ELCmemcached

ELCRedis

Route 53

17

Route 53CloudFront

RDS

EC2ELB

EB

S3

news.retty.me

ELCmemcached

18

Route 53CloudFront

RDS

EC2ELB

EB

S3

owner.retty.me

RDS

EC2ELB

EMR

ELCRedis

EC2development

19

いきなりこうなった訳ではありません

20

サービス総明記

21

UU ~10万

22

retty.me 信頼と安定の某VPS

MySQL

Apache

Linux

PHP

23

サブドメイン 信頼と安定のレンタルサーバ

Wordpress

24

10万~

25

AWS移行 構成は変わらず(EC2)

MySQL

Apache

Linux

PHP

26

50万~ AWSアーキテクチャに

乗ってみる

27

retty.me

AWSアーキテクチャに少し乗ってみる

28

100万~

29

何かよく解らんけど 様子がおかしいぞ?

30

スケールアウトしてみたretty.me

31

監視もしてみた SotfwareDesign 6月号

Nagios Monit

cloud watch オプションでディスクも監視retty.me

32

なんとかなった

33

200万~400万

34

  奇跡のカーニバル   開  幕  だ  n  ___  n  || /___\ ||  || |(゚) (゚)| || 「「「| \‾‾‾/ 「「「| 「‾|  ‾冂‾  「‾| `ヽ |/‾|‾|‾\| ノ

ここら辺で 一気に火を吹きだした

35

起こった事

36

起こった事

• サブドメインサービス開発に火がつく

• 既存サブドメインサービスが落ちる

• メインサービスのアラートが止まらない

37

起こった事

• RDSに書き込んでたロギングが限界

• スケールアウト対応が追いつかない&コスパの良いインスタンスが使えない(EC2が32bitPV、PHP5.3)

• RDSのSlave上限にひっかかる(MySQL5.5)

38

やった事

39

やった事

• サブドメインはレガシーアーキテクチャを捨てた環境で開発, 初期(学習)コストは気合い

• PHP5.5, ZendFramework2

• ElasticBeanstalk <- 後で話します

40

やった事

• サブドメインをAWS + VPCに移行

• VPC移行は視野に入ってたのでちょうど良かった

41

やった事

• 32bit PV amazon linux -> 64bit HVM amazon linux

• SoftwareDesign5月号(Vagrantを使って…)

• ある物から構成を掘り起こす作業は泣ける

42

やった事• retty.meのPHP5.3->PHP5.5

• EBで色々選べる(そもそもサポート切れる)

• MySQL5.5->MySQL5.6

• 多段レプリケーション

• ログをfluentd + S3 + MongoDB運用

43

Route 53CloudFront

RDS

EC2ELB

S3

結果こうなった

RDS

EC2ELB

RDS

EC2ELB

EMR

MongoDB

ELCmemcached

最初の図に少し 近づいてますね

EB

44

ミドルウェアバージョンアップの秘訣は?

45

多分そんなもの無い

• SlaveのMaster昇格を使ってdev,stg環境でひたすら試す

• E_DEPRECATEDとひたすら戦う

• 64bit移行はPHP_INT_MAXにハマって泣きたかった

46

~500万

47

より良い物へ

48

Route 53CloudFront

RDS

EC2ELB

EB

S3

retty.me

RDS

EC2ELB

RDS

EC2ELB

Nginx Nginx

EMR

MongoDB

ELCmemcached

ELCRedis

49

Nginx upstream で安心deploy

upstream retty { server enviroment-1 weight=nnn; server enviroment-1 weight=nnn; server enviroment-1 weight=nnn; }

RDS

EC2ELB

EB

RDS

EC2ELB

RDS

EC2ELB

Nginx Nginx

50

Route 53CloudFront

RDS

EC2ELB

EB

S3

ログをTRESUREDATAへ

RDS

EC2ELB

RDS

EC2ELB

中継

MongoDB

51

Route 53CloudFront

RDS

EC2ELB

EB

S3

CIはCircleで

RDS

EC2ELB

RDS

EC2ELB

52

Route 53CloudFront

RDS

EC2ELB

EB

S3

Jenkins?

RDS

EC2ELB

RDS

EC2ELB

53

Route 53CloudFront

RDS

EC2ELB

EB

S3

Jenkins?

RDS

EC2ELB

RDS

EC2ELB

嫌です

54

サービスの成長とインフラの成長

AWSを使ってDevOpsを目指す

ご挨拶

55

捗るサービスを選んでOpsの仕事を減らす

56

俺的Best3

57

Best3

• Elastic Beanstalk(オートスケール&自動デプロイ)

• RDS(自前でレプリケーション, フェイルオーバとか泣ける)

• S3(EBSを拡張するの避ける)

58

ElasticBeanstalk

59

AWS上のHeroku (そもそもHerokuはry)

60

ElasticBeanstalk

• 一般的な Web アプリケーションに必要 な設定を組んで、Public DNS 名を割り振って URL でアクセスできるようにしてくれます。

61

ElasticBeanstalk

• 作るアプリは Web アプリか? Worker か?

• RDS は必要か? Multi-AZ にする?

• ELBを 使 う か? 1インスタンスで動かすか?

62

ElasticBeanstalk のスタック

Application

Enviroment Enviroment Enviroment

production staging development

63

デプロイは?

64

Application

Enviroment Enviroment Enviroment

git

production staging development

git aws.push

65

git aws.push

• gitのリポジトリをそのままデプロイ

• Enviromentとコミットを指定出来る

• 同一Application内であればブラウザでEnvironment間でデプロイ出来る

66

EBが無いと私の仕事は回らないくらい便利です

67

大事な事• オートスケールを自在に使いこなす

• レガシーアプリケーションの問題は環境変数に押し込む

• インスタンスを使い捨てにする

• .ebextensionでインスタンスを自在に操る

68

使い捨てにするため ログ系はリアルタイムで送る

69

fluentd

Elastic Beanstalk Mongo&中継

S3

S3

70

.ebextensionsで自由自在• デプロイ時のタスクをymlで記述(chefみたいに抽象化はされてない)

• fluentdのインストール, apacheの設定, local memcached, postfix(やめたい)...etc

commands: 01-install-memcached: command: yum install -y memcached

71

RDS

72

ぶっちゃけ高い

73

それを上回るメリット

• 一度でもMySQLの運用をやった事があればMulti-AZの素晴らしさはすぐわかる

• ほぼメンテフリー

• 気軽にスケールアップ

74

S3

75

EBSででかいインスタンスを用意するのは面倒

• Mongoのdiskが溢れてメンテナンス不可能になった

• 因にs3fsはあまりおすすめしないってamazonの人も言ってた

• S3の運用にちゃんと乗った方が楽

76

まとめ

77

Q.AWSを使ってDevOpsを目指す上で

最も重要な事は?

78

immutable infrastructure?

79

infrastructure as

code?

80

A.金81

金で解決する事

• 特にRDSとかRDSとかRDSとか

• 自前でフェイルオーバとか時間食い過ぎ

• 負荷がきつかったらパラメータ一生懸命いじっても余りパフォーマンス上がらない、思い切ってスケールアップ

82

金で解決する事• アプリケーションサーバのような物はEBとかでほったらかすようにする

• データをストアするためにでかいEBSをアタッチするのはやめた方が良いと思う(Mongoとかはどうしてもね。。。

• AWSはインテグレーションする事が大事

83

とにかくAWSが推奨するアーキテクチャに乗る

84

オペレーションコストの削減にコストをかける

85

インフラはAWSに任せて PHP書きましょう!

86

時間があればおまけ

87

88

Rettyでは 仲間を募集してます

89

Rettyでは 仲間を募集してます

90

Rettyでは 仲間を募集してます

91

懇親会の二次会は Rettyで!

92

ステッカー持ってます

93

94

ありがとうございました

95