Heroku add-on
Bounscaleで
Play2/Scalaを
オートスケールする
Shota Onishi
13年10月21日月曜日
はじめに

13年10月21日月曜日
About this LT
• DTSでBounscaleというオートスケール
するHerokuのadd-onを作っています。
紹介させてください。

• Play2/Scalaに対応してます。(Experimental)
対応した時に得たトピ...
About me
•
•
•
•
•
•

大西 正太 @shouta_dev
(株)DTS
2005年位からRailsやってます
ScalaもPlayも初心者です!
マイブームは重力
お酒が大好き!クズ居酒屋が大好き!吉田類
の酒場放浪記が大...
Bounscaleの機能

13年10月21日月曜日
Heroku?
• いろいろ動くPaaS (Play/Scalaも)
• スライダずらすとスケールアウト
• Rubyの有名人が社員

13年10月21日月曜日
Bounscale?
Heroku上の
サービス運営者が

四六時中
手作業で
スケールアウト
をせずに

13年10月21日月曜日

突如の高負荷時に一定
のレスポンスタイムを
維持できる
Install
$ heroku addons:add bounscale

OR
https://addons.heroku.com/bounscale/

13年10月21日月曜日
Adding the agent to your app
# Rails (Rack)
gem ’bounscale’ #Gemfile

:Gem

# node.js/express:npm [EXPERIMENTAL]
”dependen...
Open dashboard

13年10月21日月曜日
Settings

13年10月21日月曜日
Auto-scaling config
•

レスポンスタイム+別指標値
で負荷を測定

•

•

ビジー率 / スループット / cpu / memory

グラフ上でスケールアウトの
閾値を指定

13年10月21日月曜日
Dyno History

13年10月21日月曜日
Bounscale Inside
(Play/Scala対応の話)

13年10月21日月曜日
トピック
(1)agentの実装
(2)ライブラリの公開
13年10月21日月曜日
Architecture
Bounscale Architecture

Application

Heroku

Service Appliction

User

Rack Server

Use this service

agent
b...
agent?
• agentとは
•

リクエストの事前・事後処理でメトリクス
情報を収集してログに書きだすライブラリ

•

CPU情報とか、スループットとか

• Zabbixでそのログを見てオートスケール
の判断をしている

• フレーム...
Rails => Rack Middleware
HTTP req

HTTP res

Rack Server (Unicorn/Passenger)
Rack Middleware
Framework(Rails)
Application
...
Play! =>Filter
HTTP req

HTTP res

Web Server (Netty)
Filter (after Play 2.1.1)
Framework(Play!2)
Application

cpu
memory
...
Agent’s source code
class BounscaleFilter extends Filter {
def apply(next: (RequestHeader) => Result)(rh: RequestHeader) =...
Publishing agents
gem push
npm publish

Published
Published

Create JIRA Ticket
Ack (operator 2-3days?)
Upload library
Upd...
Publish to Github pages
• 今回はGithub Pages使って野良Mavenリ
ポジトリを作って公開しました

• やり方公開してます
•
•

13年10月21日月曜日

Play2/Scala向けライブラリを公開す...
Try it out !!
$ heroku addons:add bounscale

現在Public Betaで利用は無料です!

13年10月21日月曜日
Resources
• https://devcenter.heroku.com/articles/
bounscale

• https://github.com/bounscale
• http://qiita.com/bounscale/...
Upcoming SlideShare
Loading in …5
×

Heroku add-on BounscaleでPlay2/Scalaをオートスケールする

1,017 views

Published on

2013/10/19に開催された「怖くないScala勉強会」で発表したLTの資料です。
http://connpass.com/event/3420/

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,017
On SlideShare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Heroku add-on BounscaleでPlay2/Scalaをオートスケールする

  1. 1. Heroku add-on Bounscaleで Play2/Scalaを オートスケールする Shota Onishi 13年10月21日月曜日
  2. 2. はじめに 13年10月21日月曜日
  3. 3. About this LT • DTSでBounscaleというオートスケール するHerokuのadd-onを作っています。 紹介させてください。 • Play2/Scalaに対応してます。(Experimental) 対応した時に得たトピックも少し紹介 します。 13年10月21日月曜日
  4. 4. About me • • • • • • 大西 正太 @shouta_dev (株)DTS 2005年位からRailsやってます ScalaもPlayも初心者です! マイブームは重力 お酒が大好き!クズ居酒屋が大好き!吉田類 の酒場放浪記が大好き! 13年10月21日月曜日
  5. 5. Bounscaleの機能 13年10月21日月曜日
  6. 6. Heroku? • いろいろ動くPaaS (Play/Scalaも) • スライダずらすとスケールアウト • Rubyの有名人が社員 13年10月21日月曜日
  7. 7. Bounscale? Heroku上の サービス運営者が 四六時中 手作業で スケールアウト をせずに 13年10月21日月曜日 突如の高負荷時に一定 のレスポンスタイムを 維持できる
  8. 8. Install $ heroku addons:add bounscale OR https://addons.heroku.com/bounscale/ 13年10月21日月曜日
  9. 9. Adding the agent to your app # Rails (Rack) gem ’bounscale’ #Gemfile :Gem # node.js/express:npm [EXPERIMENTAL] ”dependencies” : {”bounscale”, ”*”} // package.json app.use(require(’bounscale’)); // app.js # Play Framework2:sbt [EXPERIMENTAL] /* Build.scala */ "bounscale" % "bounscale_2.10" % "0.0.1"; resolvers += "r" at "http://bounscale.github.io/maven/"; /* Global.scala */ import play.api.GlobalSettings import play.api.mvc.WithFilters import com.bounscale.BounscaleFilter object Global extends WithFilters( new BounscaleFilter) with GlobalSettings more detail: https://devcenter.heroku.com/articles/bounscale 13年10月21日月曜日
  10. 10. Open dashboard 13年10月21日月曜日
  11. 11. Settings 13年10月21日月曜日
  12. 12. Auto-scaling config • レスポンスタイム+別指標値 で負荷を測定 • • ビジー率 / スループット / cpu / memory グラフ上でスケールアウトの 閾値を指定 13年10月21日月曜日
  13. 13. Dyno History 13年10月21日月曜日
  14. 14. Bounscale Inside (Play/Scala対応の話) 13年10月21日月曜日
  15. 15. トピック (1)agentの実装 (2)ライブラリの公開 13年10月21日月曜日
  16. 16. Architecture Bounscale Architecture Application Heroku Service Appliction User Rack Server Use this service agent bounscale gem (middleware) Log Heroku Logs Resource Data Collect and Write Resource Datas Resource Data Heroku API Rails/ Application www.heroku.com (heroku console) Addon Provisioning API Resource Data Request Addon / Request SSO Get Logs (heroku logs) Provisioning Response Zabbix Custom Items ct Apache Update Scale Config Create tenant Multitenant UserA UserA Access Model Tenant Tenant Create Web Console tenant Console Controller Zabbix Access UserA UserA Model Tenant Tenant Update Zabbix Twitter Bootstrap Save Cache Data Get Cache Data Update&Create Items, Triggers, Actions Resource Data MySQL Get cache UserA CacheUserA Model Tenant Tenant Bizca Multitenant Ruby on Rails Tenant Control Tenant database Tenant database Tenant zabbixdatabase cache data Extract resource datas Update/Get Resource Data Scalein Action shell scipt / Ruby Trigger Zabbix (scale condition) Zabbix Server MySQL Conditionally Kick Actions Zabbix database Tenant1 zabbix history data Tenant2 zabbix history data Tenant3 zabbix history data Tenant1 zabbix config data Tenant2 zabbix config data Tenant3 zabbix config data CentOS CentOS AWS 13年10月21日月曜日 Scaleout Action shell scipt / Ruby Return Resource Show Resource Graph Resource Data Throughput Item Periodically Kick Provision Controller CPU Item Cache Collector Zabbix API (Apache/PHP) Provisioning Web Item Collect History Data Heroku Access UserA UserA Model Tenant Tenant Zabbix Custom Action Busyness Item memory Item Save Resource Data re di Heroku SSO Scale in AWS Save Scalein/out hitories Rack Server re Developer Scale out Get Item, Trigger, Action Provisioning Request
  17. 17. agent? • agentとは • リクエストの事前・事後処理でメトリクス 情報を収集してログに書きだすライブラリ • CPU情報とか、スループットとか • Zabbixでそのログを見てオートスケール の判断をしている • フレームワーク毎に作る必要性 13年10月21日月曜日
  18. 18. Rails => Rack Middleware HTTP req HTTP res Rack Server (Unicorn/Passenger) Rack Middleware Framework(Rails) Application cpu memory throuput Log 13年10月21日月曜日
  19. 19. Play! =>Filter HTTP req HTTP res Web Server (Netty) Filter (after Play 2.1.1) Framework(Play!2) Application cpu memory throuput Log 13年10月21日月曜日
  20. 20. Agent’s source code class BounscaleFilter extends Filter { def apply(next: (RequestHeader) => Result)(rh: RequestHeader) = { val collectors = List( new CpuCollector(), new MemoryCollector(), new BusynessCollector(), new ThroughputCollector() ) def post(result: PlainResult): Result = { collectors.foreach(collector => collector.post()) val writer = new HerokuWriter() writer.write(collectors) result } <=post def collectors.foreach(collector => collector.pre()) } } <=pre exe next(rh) match { case plain: PlainResult => post(plain) case async: AsyncResult => async.transform(post) } <=post exe https://github.com/bounscale/bounscale_play2/blob/master/src/main/scala/BounscaleFilter.scala 13年10月21日月曜日
  21. 21. Publishing agents gem push npm publish Published Published Create JIRA Ticket Ack (operator 2-3days?) Upload library Update JIRA Ticket Ack (operator) 至れり尽くせりの重厚さ 13年10月21日月曜日 Published
  22. 22. Publish to Github pages • 今回はGithub Pages使って野良Mavenリ ポジトリを作って公開しました • やり方公開してます • • 13年10月21日月曜日 Play2/Scala向けライブラリを公開する(SBTでGithub上のMavenに) http://qiita.com/bounscale/items/44b1729db39edbb507fd
  23. 23. Try it out !! $ heroku addons:add bounscale 現在Public Betaで利用は無料です! 13年10月21日月曜日
  24. 24. Resources • https://devcenter.heroku.com/articles/ bounscale • https://github.com/bounscale • http://qiita.com/bounscale/ • https://twitter.com/bounscale/ 13年10月21日月曜日

×