Upload
shoei-takamaru
View
1.079
Download
0
Embed Size (px)
Citation preview
Copyright ©crispy, Inc. All Rights Reserved.
スタートアップのインフラ選び(仮)
株式会社crispy
高丸翔英
Copyright ©crispy, Inc. All Rights Reserved.
目次
• 自己紹介
• Herokuを選んだワケ
• インフラ選び
• まとめ
2
Copyright ©crispy, Inc. All Rights Reserved.
自己紹介
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
Copyright ©crispy, Inc. All Rights Reserved.
サービス紹介(1つ目)
• Botmart
• 簡単にFacebook Messenger上にチャットボットECサイトを作れるサービス
• Ruby on Rails
+ Heroku
5
Copyright ©crispy, Inc. All Rights Reserved.
サービス紹介(2つ目)
• 絶賛開発中!!
6
Copyright ©crispy, Inc. All Rights Reserved.
スタートアップの開発
Copyright ©crispy, Inc. All Rights Reserved.
スタートアップの開発は
• Done is better than Perfect
• 売上が立つまでは、インフラコストは抑えなければならない
• エンジニアが少ない、1人のカバー範囲が大きい
• ある程度の自動化も必要だし、ある程度やらないことも決めなければいけない
• ローカル環境でもりもり開発する
8
Copyright ©crispy, Inc. All Rights Reserved.
Herokuを選んだワケ
Copyright ©crispy, Inc. All Rights Reserved.
Herokuを選んだワケ
• Botmart開発時
• Ruby (Rails) との相性が良い、ハマるところが少ない
• Gitへのプッシュでデプロイ完了するので、コマンドを忘れていることが少ない
• ダッシュボードのUIがシンプルでわかりやすい
• Hobbyならほぼタダのようなもの(高すぎないサービスレベル、必要があればStdプランにしてスケールできる)
• Heroku Postgres等のアドオンが大体イケている、違和感なく使える
10
→ どちらかというと、気分的なところが大きいかも
Copyright ©crispy, Inc. All Rights Reserved.
話は逸れますが
Copyright ©crispy, Inc. All Rights Reserved.
あなたがスタートアップ(not 社内新サービス)ならどの言語で開発しますか?
Copyright ©crispy, Inc. All Rights Reserved.
スタートアップの言語選び
• 頭のスイッチングコストはできるだけ少なく
• Ruby(Web) ⇔ Go(クローラー)でも結構きつかった
• ましてや、マイクロサービスアーキテクチャで別々の言語なんて…
• DBの変更が容易なもの (例: winebarrel/ridgepole)
• ルール(DSL等)がしっかりしているもの
13
コードの品質を保ちやすいもの
Copyright ©crispy, Inc. All Rights Reserved.
私の言語選び
• Ruby or Go を基準に
• FWは、機能の大きさに応じて、Rails or Padrino/Sinatra
• どうしてもパフォーマンス優先しなければいけないときがある
• Python?
• 使えるけど、普段Webアプリを書いてないので、機械学習以外なら使わない
• node?
• npmのモジュール群は便利だけど、nodeは言語仕様的に好きじゃない
• もちろん、開発人数にもよる
14
Copyright ©crispy, Inc. All Rights Reserved.
私の言語選び
• 極力JSを使わないw
• もちろん、jQueryも使わない(Rails 5.1〜)
• ちょい使いなら、今はVue.js
• 使うんなら、がっちりJSに寄せる
• サーバー(API)⇔クライアント(React or Vue など)
• モバイルアプリ開発にも対応しやすい
• noteがこのアーキテクチャ
15
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で行けるんだよねぇ」
Copyright ©crispy, Inc. All Rights Reserved.
Heroku対応言語
• Ruby / Java / PHP が選択肢として堅い
17
↑ちなみに、これって何順??
Copyright ©crispy, Inc. All Rights Reserved.
さて、インフラ選び
Copyright ©crispy, Inc. All Rights Reserved.
インフラ選び (PaaS全盛期 2013年〜)
• コードだけ書いてPushすればOKなんて、サイコーじゃん
• え?なんでSSHなんかしてるの?(^q^)
• 当時は、各PFで対応言語に差あり
19
Copyright ©crispy, Inc. All Rights Reserved.
インフラ選び (Infra as Code時代 2014年〜)
• やっぱ、Infra as Codeだな
• Ansible、CloudFormation、Terraform!
• PaaS、楽だけど自由度低いもん
• 常に同じ環境作れるし、壊しても問題ないし
• ただ、VM起動に時間が…
• 同時期にDockerも流行っていた(アプローチの違い)
• 大規模な会社なら、現在も選択肢となりうる
20
Copyright ©crispy, Inc. All Rights Reserved.
インフラ選び (2015年〜)
• Dockerコンテナ化は必至 (デファクトスタンダード)
• PFを選ばない(PFによってコマンド違えど、同じようにデプロイできる、後の移行がしやすい)
• PaaSとIaCのいいとこ取り
• k8sを使うとなると、GCPが一番有利か
• かつ、GCPだと、その他サービスにつなげやすい(AppEngine, CloudStorage, CloudFunctions,
PubSub)
21
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
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.
Copyright ©crispy, Inc. All Rights Reserved.
dockerを使うと
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
- redis
...
db:
image: mysql:5.7
...
mail:
image: schickling/mailcatcher
...
redis:
image: redis:3.0.7
...
docker-compose.yml
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
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
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
Copyright ©crispy, Inc. All Rights Reserved.
できれば、無料でいたい
Copyright ©crispy, Inc. All Rights Reserved.
一時期
• [qiita] Herokuでbotを運用する時代は終わった。これからはIBM Bluemixを使って無料で運用する
• 2016/06〜 Freeは 1000 dyno hoursまで
30
Copyright ©crispy, Inc. All Rights Reserved.
Heroku以外のPaaS選択肢
• IBM Bluemix (Cloud Foundry)
• Microsoft Azure (Web Apps)
• Google Cloud Platform (App Engine Flex
Environment)
• など
31
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インスタンス/日が目安
Copyright ©crispy, Inc. All Rights Reserved.
料金面(有料枠 -基本プラン)
33
IBM
Bluemix
Microsoft
Azure
Web Apps
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ヶ月でも数千円程度の差
Copyright ©crispy, Inc. All Rights Reserved.
Herokuのアドオン
• Heroku Postgres (DB) ← これだけたまに厄介かも
• Heroku Redis (セッション・キャッシュ・キュー用)
• SendGrid (メール)
• New Relic (パフォーマンス監視)
• Papertrail (ログ監視)
• Librato (メトリクス監視)
• Fastly (CDN)
34
非同期処理を楽に導入できるかも重要
Copyright ©crispy, Inc. All Rights Reserved.
地味にうれしいことも
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
Copyright ©crispy, Inc. All Rights Reserved.
じゃ、いつ大規模開発となる?
Copyright ©crispy, Inc. All Rights Reserved.
大規模とは?
• データが肥大化
• デフォルトのRDBMSでは捌ききれなくなってきた場合
• Amazon RDS / Google Cloud Spanner など
• データ解析にパワーが必要
• BigQuery / RedShift
• 機械学習 (GPU)
38
Copyright ©crispy, Inc. All Rights Reserved.
大規模とは?2
• 分業できる (チーム)
• マイクロサービス化
• k8s
• Rancher
• コンテナ化しておいた方が楽
39
Copyright ©crispy, Inc. All Rights Reserved.
つらいときが来る
40
https://martinfowler.com/bliki/MicroservicePremium.html
生産性
複雑度
Copyright ©crispy, Inc. All Rights Reserved.
まとめ
Copyright ©crispy, Inc. All Rights Reserved.
まとめ
• スタートアップの開発は早さ一番、料金はそんなに変わらないので気分が乗るような開発にするべき
• 「RubyならHeroku」はやっぱり変わらず
• いろいろPFの状況は変化するので、常にちぇきすること、でも細かく差を気にしすぎないこと
• Herokuの料金体制は今後も変わる可能性大だけど、最近でもどんどん機能追加があるからうれしい(Enterpriseに力入れるんですかね?w)
42
Copyright ©crispy, Inc. All Rights Reserved.
失敗を恐れずに楽しく開発しましょう!
Copyright ©crispy, Inc. All Rights Reserved.
Thanks!