44
Copyright ©crispy, Inc. All Rights Reserved. スタートアップの インフラ選び(仮) 株式会社crispy 高丸 翔英

20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Embed Size (px)

Citation preview

Page 1: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

スタートアップのインフラ選び(仮)

株式会社crispy

高丸翔英

Page 2: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

目次

• 自己紹介

• Herokuを選んだワケ

• インフラ選び

• まとめ

2

Page 3: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

自己紹介

Page 4: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

自己紹介

• 高丸翔英 (たかまるしょうえい、@takamario)

• (株) crispy 共同創業取締役 CTO

• 職歴

– 赤R (某ポータルサービスでEL、某国際EC立ち上げとTM) /

PHP Perl Node.js, Ruby

– 黃P (某note 立ち上げ) Ruby / Angular.js

– 青R (某キュレーション、某サロン予約サービス TL) Java / Go

– シンガポールで起業

– 事業都合で東京へ戻る ← イマココ

4

Page 5: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

サービス紹介(1つ目)

• Botmart

• 簡単にFacebook Messenger上にチャットボットECサイトを作れるサービス

• Ruby on Rails

+ Heroku

5

Page 6: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

サービス紹介(2つ目)

• 絶賛開発中!!

6

Page 7: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

スタートアップの開発

Page 8: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

スタートアップの開発は

• Done is better than Perfect

• 売上が立つまでは、インフラコストは抑えなければならない

• エンジニアが少ない、1人のカバー範囲が大きい

• ある程度の自動化も必要だし、ある程度やらないことも決めなければいけない

• ローカル環境でもりもり開発する

8

Page 9: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

Herokuを選んだワケ

Page 10: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

Herokuを選んだワケ

• Botmart開発時

• Ruby (Rails) との相性が良い、ハマるところが少ない

• Gitへのプッシュでデプロイ完了するので、コマンドを忘れていることが少ない

• ダッシュボードのUIがシンプルでわかりやすい

• Hobbyならほぼタダのようなもの(高すぎないサービスレベル、必要があればStdプランにしてスケールできる)

• Heroku Postgres等のアドオンが大体イケている、違和感なく使える

10

→ どちらかというと、気分的なところが大きいかも

Page 11: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

話は逸れますが

Page 12: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

あなたがスタートアップ(not 社内新サービス)ならどの言語で開発しますか?

Page 13: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

スタートアップの言語選び

• 頭のスイッチングコストはできるだけ少なく

• Ruby(Web) ⇔ Go(クローラー)でも結構きつかった

• ましてや、マイクロサービスアーキテクチャで別々の言語なんて…

• DBの変更が容易なもの (例: winebarrel/ridgepole)

• ルール(DSL等)がしっかりしているもの

13

コードの品質を保ちやすいもの

Page 14: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

私の言語選び

• Ruby or Go を基準に

• FWは、機能の大きさに応じて、Rails or Padrino/Sinatra

• どうしてもパフォーマンス優先しなければいけないときがある

• Python?

• 使えるけど、普段Webアプリを書いてないので、機械学習以外なら使わない

• node?

• npmのモジュール群は便利だけど、nodeは言語仕様的に好きじゃない

• もちろん、開発人数にもよる

14

Page 15: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

私の言語選び

• 極力JSを使わないw

• もちろん、jQueryも使わない(Rails 5.1〜)

• ちょい使いなら、今はVue.js

• 使うんなら、がっちりJSに寄せる

• サーバー(API)⇔クライアント(React or Vue など)

• モバイルアプリ開発にも対応しやすい

• noteがこのアーキテクチャ

15

Page 16: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

ちなみに

• 某ベンチャー系フロントエンジニアの知人

• node(API)+ React + Redux

• 「サーバ側は面倒だったけど、JSに寄せて良かった」

• 現在はAndroidアプリも作成中

16

• 某大手Web系のエンジニア (リプレイスPRJ)

• 「Railsは意外とRenderが遅かった、Java はやっぱり速い」

• Google Next Tokyoで聞こえた話

• A「AppEngineとか使ってます?」

• B「使ってみようかなぐらい、だいたいはさくらのVPSで行けるんだよねぇ」

Page 17: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

Heroku対応言語

• Ruby / Java / PHP が選択肢として堅い

17

↑ちなみに、これって何順??

Page 18: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

さて、インフラ選び

Page 19: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

インフラ選び (PaaS全盛期 2013年〜)

• コードだけ書いてPushすればOKなんて、サイコーじゃん

• え?なんでSSHなんかしてるの?(^q^)

• 当時は、各PFで対応言語に差あり

19

Page 20: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

インフラ選び (Infra as Code時代 2014年〜)

• やっぱ、Infra as Codeだな

• Ansible、CloudFormation、Terraform!

• PaaS、楽だけど自由度低いもん

• 常に同じ環境作れるし、壊しても問題ないし

• ただ、VM起動に時間が…

• 同時期にDockerも流行っていた(アプローチの違い)

• 大規模な会社なら、現在も選択肢となりうる

20

Page 21: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

インフラ選び (2015年〜)

• Dockerコンテナ化は必至 (デファクトスタンダード)

• PFを選ばない(PFによってコマンド違えど、同じようにデプロイできる、後の移行がしやすい)

• PaaSとIaCのいいとこ取り

• k8sを使うとなると、GCPが一番有利か

• かつ、GCPだと、その他サービスにつなげやすい(AppEngine, CloudStorage, CloudFunctions,

PubSub)

21

Page 22: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

Heroku Docker

• 2015/05〜 Dockerコンテナのデプロイが可能に!

• 2016/07〜 Dockerイメージの登録が可能に(β)!

• [deprecated] heroku-docker

• [deprecated] heroku-container-tools

• [now] heroku-container-registry

• コンテナの登録に異様に時間がかかるときがある。。?

• 独自のコンテナをデプロイできるが、1 Dynoにできあがるだけなので、Herokuである意味はあまりない

22

Page 23: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

Heroku Docker

• 参考資料

• Local Development with Docker Compose

• Container Registry and Runtime

• Heroku Dockerの使いどころ (Heroku Meetup

#15)

23

• For local development: use official Docker images, such as Postgres and Redis.

• For staging and production: use Heroku add-ons, such as Heroku Postgres and

Heroku Redis.

Page 24: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

dockerを使うと

Page 25: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

構成が管理しやすい、テストしやすい

25

version: "2"

services:

web:

command: bundle exec rails s -p 3000 -b '0.0.0.0'

links:

- db

- mail

- redis

...

db:

image: mysql:5.7

...

mail:

image: schickling/mailcatcher

...

redis:

image: redis:3.0.7

...

docker-compose.yml

Page 26: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

構成が管理しやすい、テストしやすい

26

FROM ruby:2.3.4

RUN apt-get update -qq \

&& apt-get install -y \

build-essential \

libpq-dev \

vim \

mysql-client \

postgresql-client \

apt-transport-https

FROM ruby:2.4.1

RUN apt-get update -qq \

&& apt-get install -y \

build-essential \

libpq-dev \

vim \

mysql-client \

postgresql-client \

apt-transport-https

Ruby 2.3.4 Ruby 2.4.1

Dockerfile

Page 27: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

構成が管理しやすい、テストしやすい

27

version: "2"

services:

db:

image: mysql:5.7

ports:

- "3306:3306"

web:

build: .

command: ...(snip)...

version: "2"

services:

db:

image: postgres:9.6

ports:

- "5432:5432"

web:

build: .

command: ...(snip)...

MySQL PostgreSQL

docker-compose.yml

Page 28: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

mailcatcherでのメール確認時も

• https://hub.docker.com/r/schickling/mailcatcher/

28

mail:

image: schickling/mailcatcher

ports:

- "1080:1080"

- "1025:1025"

docker-compose.yml

Page 29: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

できれば、無料でいたい

Page 30: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

一時期

• [qiita] Herokuでbotを運用する時代は終わった。これからはIBM Bluemixを使って無料で運用する

• 2016/06〜 Freeは 1000 dyno hoursまで

30

Page 31: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

Heroku以外のPaaS選択肢

• IBM Bluemix (Cloud Foundry)

• Microsoft Azure (Web Apps)

• Google Cloud Platform (App Engine Flex

Environment)

• など

31

Page 32: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

料金面(無料枠)

• IBM Bluemix

• 512MBのインスタンスなら無料、1ヶ月目は無料

• Microsoft Azure Web Apps

• CPU60分/日、ストレージ1GBまでは無料

• Google App Engine

• 28インスタンス時間 / 日=> 868 インスタンス時間 / 月

• Heroku

• 32 dyno 時間 / 日=> 1,000 dyno 時間 / 月

32

1インスタンス/日が目安

Page 33: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

料金面(有料枠 -基本プラン)

33

IBM

Bluemix

Microsoft

Azure

Web Apps

Google

App

Engine

Heroku

プラン名 (Ruby) B1 Flex B1 Standard

CPU 1 1 1 1

メモリ(GB) 1 1.75 1 0.5

ストレージ 20GB 10GB 10GB 300MB?

料金/日 ¥89.36 ¥183.60 ¥160.95 ¥92.5

1ヶ月でも数千円程度の差

Page 34: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

Herokuのアドオン

• Heroku Postgres (DB) ← これだけたまに厄介かも

• Heroku Redis (セッション・キャッシュ・キュー用)

• SendGrid (メール)

• New Relic (パフォーマンス監視)

• Papertrail (ログ監視)

• Librato (メトリクス監視)

• Fastly (CDN)

34

非同期処理を楽に導入できるかも重要

Page 35: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

地味にうれしいことも

Page 36: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

地味にありがたい

• [2016/09〜] Heroku SSL、有料dynoなら無料!

• [2017/05〜] さらに自動更新までしてくれる!(Let’s encrypt)

– https://blog.heroku.com/ssl-is-now-included-on-

all-paid-dynos

– https://blog.heroku.com/announcing-automated-

certificate-management

36

Page 37: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

じゃ、いつ大規模開発となる?

Page 38: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

大規模とは?

• データが肥大化

• デフォルトのRDBMSでは捌ききれなくなってきた場合

• Amazon RDS / Google Cloud Spanner など

• データ解析にパワーが必要

• BigQuery / RedShift

• 機械学習 (GPU)

38

Page 39: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

大規模とは?2

• 分業できる (チーム)

• マイクロサービス化

• k8s

• Rancher

• コンテナ化しておいた方が楽

39

Page 40: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

つらいときが来る

40

https://martinfowler.com/bliki/MicroservicePremium.html

生産性

複雑度

Page 41: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

まとめ

Page 42: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

まとめ

• スタートアップの開発は早さ一番、料金はそんなに変わらないので気分が乗るような開発にするべき

• 「RubyならHeroku」はやっぱり変わらず

• いろいろPFの状況は変化するので、常にちぇきすること、でも細かく差を気にしすぎないこと

• Herokuの料金体制は今後も変わる可能性大だけど、最近でもどんどん機能追加があるからうれしい(Enterpriseに力入れるんですかね?w)

42

Page 43: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

失敗を恐れずに楽しく開発しましょう!

Page 44: 20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture in startup

Copyright ©crispy, Inc. All Rights Reserved.

Thanks!