狠狠撸

狠狠撸Share a Scribd company logo
common-api
篠原航

13年11月1日金曜日
自己紹介
? サーバーサイドエンジニア
? Java, Scala, Haskell, Javascript

13年11月1日金曜日
なにをするもの

13年11月1日金曜日
ファイル渡し問題
? 台数増やすごとにスクリプト改修
? 送ってる?もらってる?
? そもそもどこからきてるファイルかわ
からない

? DC移設が地獄
13年11月1日金曜日
やめましょう

13年11月1日金曜日
どっから使う?
? フロントでも使えるといい
? JSONにしよう
? JSONPでも返せるようにしよう

13年11月1日金曜日
構成図
WAP

x4
KVS

BCH

DB

13年11月1日金曜日

x2

x1

x 2(MHA)
使ってるもの
? Play Framework 2.1.x(2.1.3)
? Memcached
? MySQL 5.5.x

13年11月1日金曜日
Scala
? JVM言語
? 簡潔
? 優れたコンパイラ
? Javaの資産が使えます
13年11月1日金曜日
def	
 ?report(date:	
 ?DateTime)	
 ?=	
 ?{
	
 ?	
 ?MatomeBaseModel.withSession	
 ?{
	
 ?	
 ?	
 ?	
 ?implicit	
 ?ses	
 ?=>
	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?val	
 ?ra	
 ?=	
 ?ReportArticles.findByDate(date)
	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?ra.groupBy(_.uniqueId).map	
 ?{
	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?x	
 ?=>
	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?val	
 ?id	
 ?=	
 ?x._1
	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?val	
 ?pv	
 ?=	
 ?(for	
 ?(l	
 ?<-?‐	
 ?x._2)	
 ?yield	
 ?l.pv).sum
	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?ReportResponse(id,	
 ?pv)
	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?}
	
 ?	
 ?}
}

すっきり

13年11月1日金曜日
Play
? C10K
? CoC
? Stateless
? Non-blocking
? Scala or Java
13年11月1日金曜日
Slick
? ORM
? Scalaのコレクションのようにかける
? かっこいい
? 23カラム以上が使いづらい
13年11月1日金曜日
?	
 ?def	
 ?findByPage(page:	
 ?Int,	
 ?quantity:	
 ?Int)(implicit	
 ?session:	
 ?
Session)	
 ?=	
 ?{
	
 ?	
 ?	
 ?	
 ?val	
 ?q	
 ?=	
 ?query.sortBy(_.updatedAt.desc).
	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?filter(_.display	
 ?===	
 ?DisplayType.TRUE.id).
	
 ?	
 ?	
 ?	
 ?	
 ?	
 ?drop((page	
 ?-?‐	
 ?1)	
 ?*	
 ?quantity).take(quantity)
	
 ?	
 ?	
 ?	
 ?q.list
	
 ?	
 ?}

Scalaのコレクションみたい

13年11月1日金曜日
Akka
? Play内部のキモ
? Jobスケジューラで利用
? 外部APIを非同期に利用

13年11月1日金曜日
設計

13年11月1日金曜日
modules
? core <- 永続モデルとレスポンスモデル
? api <- コントローラ
? batch <- ジョブフック

13年11月1日金曜日
core

? ドメイン駆動設計しようとして志半ば

13年11月1日金曜日
api
? ただのコントローラ
? 型によるパターンマッチでエラー軽減

13年11月1日金曜日
batch
? クラス名で手動実行
? http://common-api-batch/batch/
job.SampleJob

? フルリカバリーも
13年11月1日金曜日
パフォーマンス
? リクエストされてから3秒以内に返す
? 120M req/day (2013/10/6)

13年11月1日金曜日
課題

13年11月1日金曜日
Playのチューニング
? Akkaが鍵
? actorを増やせばCPU使用率が上がる
? そんなことなかった

13年11月1日金曜日
ブロッキング問題
? Frameworkはノンブロッキング
? でもJDBCは
? コネクションで詰まる(のをキャッシュ
で回避)

13年11月1日金曜日
解決策?

13年11月1日金曜日
mysql-async
? Netty-based
? written in Scala 2.10
? まだ怖い

13年11月1日金曜日
Scala導入
? いい言語だけどできる人が少ない
? 言語としての歴史が浅い
? Javaエンジニアのカタルシスを感じる
? コンパイルが遅い
13年11月1日金曜日
コンパイラ...
? implicit parameter
? implicit conversion
? macro
? code generate
? trait
13年11月1日金曜日
解決策?
? Javaと同じように書けばいい
? 新しい技術は責任を担保できるところ
で積極的に使っていくべき

? いざとなれば不安なところはJavaで書
けばいい

? いいマシンを用意しよう
13年11月1日金曜日
Playが枯れてない
? 絶賛開発中
? 毎月次バージョンが出てる
? レポジトリを追いかけよう

13年11月1日金曜日
おしまい

13年11月1日金曜日
Ad

Recommended

狈驳颈苍虫を使ったオレオレ颁顿狈の构筑
狈驳颈苍虫を使ったオレオレ颁顿狈の构筑
ichikaway
?
翱颁补尘濒と鲍苍颈肠辞诲别
翱颁补尘濒と鲍苍颈肠辞诲别
Yamagata Yoriyuki
?
テンプレートエンジンの話 #jjug
テンプレートエンジンの話 #jjug
Yusuke Yamamoto
?
通信プロトコルから見る艦隊これくしょん on 第十回 カーネル/VM探検隊
通信プロトコルから見る艦隊これくしょん on 第十回 カーネル/VM探検隊
Kazuhiro Fujieda
?
本番环境で使いたい笔贬笔
本番环境で使いたい笔贬笔
Takuya Sato
?
serverless
serverless
Kohei Misu
?
20140930 anything as_code
20140930 anything as_code
Sugawara Genki
?
続マスタ狈対スレーブ1レプリケーションの作り方
続マスタ狈対スレーブ1レプリケーションの作り方
do_aki
?
Closure Compiler Updates for ES6
Closure Compiler Updates for ES6
Teppei Sato
?
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
Takeuchi Yuichi
?
ニフクラとヤマハルーターで作るセキュアなオフィス环境
ニフクラとヤマハルーターで作るセキュアなオフィス环境
Yasutaka Hamada
?
顿测苍补尘辞顿叠のまえにキャッシュおく奴
顿测苍补尘辞顿叠のまえにキャッシュおく奴
Sugawara Genki
?
础苍蝉颈产濒别ハンズオン勉强会
础苍蝉颈产濒别ハンズオン勉强会
Takahisa Iwamoto
?
Simplest API Server "miq"
Simplest API Server "miq"
Yuki Ito
?
Presentation on your terminal
Presentation on your terminal
Takuya ASADA
?
顿辞肠办别谤フ?レセ?ン
顿辞肠办别谤フ?レセ?ン
よしだ あつし
?
笔贬笔という概念か?存在しない退屈な世界
笔贬笔という概念か?存在しない退屈な世界
Yoshihiro Ohsuka
?
200k/sec
200k/sec
Sugawara Genki
?
尝补尘产诲补によるクラウド型言语の実装
尝补尘产诲补によるクラウド型言语の実装
Sugawara Genki
?
apachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin Serverっぽいやつをつくった
Junichi Ishida
?
Rust で簡易 HTTP サーバーを作ってみよう
Rust で簡易 HTTP サーバーを作ってみよう
Yuki Toyoda ?
?
笔贬笔7実环境ベンチ2016春
笔贬笔7実环境ベンチ2016春
Ryo Tomidokoro
?
狈辞谤颈办谤补の闯痴惭チューンで苦労している话
狈辞谤颈办谤补の闯痴惭チューンで苦労している话
SATOSHI TAGOMORI
?
Re: WebServer BenchMarking
Re: WebServer BenchMarking
Ryo Tomidokoro
?
奥别产濒补迟别で翱厂厂の翻訳に参加する
奥别产濒补迟别で翱厂厂の翻訳に参加する
裕士 常田
?
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scala
Kazuhiro Sera
?
厂肠补濒补でプログラムを作りました
厂肠补濒补でプログラムを作りました
Tomoharu ASAMI
?
イマドキの现场で使える闯补惫补ライブラリ事情
イマドキの现场で使える闯补惫补ライブラリ事情
takezoe
?

More Related Content

What's hot (18)

続マスタ狈対スレーブ1レプリケーションの作り方
続マスタ狈対スレーブ1レプリケーションの作り方
do_aki
?
Closure Compiler Updates for ES6
Closure Compiler Updates for ES6
Teppei Sato
?
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
Takeuchi Yuichi
?
ニフクラとヤマハルーターで作るセキュアなオフィス环境
ニフクラとヤマハルーターで作るセキュアなオフィス环境
Yasutaka Hamada
?
顿测苍补尘辞顿叠のまえにキャッシュおく奴
顿测苍补尘辞顿叠のまえにキャッシュおく奴
Sugawara Genki
?
础苍蝉颈产濒别ハンズオン勉强会
础苍蝉颈产濒别ハンズオン勉强会
Takahisa Iwamoto
?
Simplest API Server "miq"
Simplest API Server "miq"
Yuki Ito
?
Presentation on your terminal
Presentation on your terminal
Takuya ASADA
?
顿辞肠办别谤フ?レセ?ン
顿辞肠办别谤フ?レセ?ン
よしだ あつし
?
笔贬笔という概念か?存在しない退屈な世界
笔贬笔という概念か?存在しない退屈な世界
Yoshihiro Ohsuka
?
200k/sec
200k/sec
Sugawara Genki
?
尝补尘产诲补によるクラウド型言语の実装
尝补尘产诲补によるクラウド型言语の実装
Sugawara Genki
?
apachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin Serverっぽいやつをつくった
Junichi Ishida
?
Rust で簡易 HTTP サーバーを作ってみよう
Rust で簡易 HTTP サーバーを作ってみよう
Yuki Toyoda ?
?
笔贬笔7実环境ベンチ2016春
笔贬笔7実环境ベンチ2016春
Ryo Tomidokoro
?
狈辞谤颈办谤补の闯痴惭チューンで苦労している话
狈辞谤颈办谤补の闯痴惭チューンで苦労している话
SATOSHI TAGOMORI
?
Re: WebServer BenchMarking
Re: WebServer BenchMarking
Ryo Tomidokoro
?
奥别产濒补迟别で翱厂厂の翻訳に参加する
奥别产濒补迟别で翱厂厂の翻訳に参加する
裕士 常田
?
続マスタ狈対スレーブ1レプリケーションの作り方
続マスタ狈対スレーブ1レプリケーションの作り方
do_aki
?
Closure Compiler Updates for ES6
Closure Compiler Updates for ES6
Teppei Sato
?
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
Takeuchi Yuichi
?
ニフクラとヤマハルーターで作るセキュアなオフィス环境
ニフクラとヤマハルーターで作るセキュアなオフィス环境
Yasutaka Hamada
?
顿测苍补尘辞顿叠のまえにキャッシュおく奴
顿测苍补尘辞顿叠のまえにキャッシュおく奴
Sugawara Genki
?
础苍蝉颈产濒别ハンズオン勉强会
础苍蝉颈产濒别ハンズオン勉强会
Takahisa Iwamoto
?
Simplest API Server "miq"
Simplest API Server "miq"
Yuki Ito
?
Presentation on your terminal
Presentation on your terminal
Takuya ASADA
?
笔贬笔という概念か?存在しない退屈な世界
笔贬笔という概念か?存在しない退屈な世界
Yoshihiro Ohsuka
?
尝补尘产诲补によるクラウド型言语の実装
尝补尘产诲补によるクラウド型言语の実装
Sugawara Genki
?
apachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin Serverっぽいやつをつくった
Junichi Ishida
?
Rust で簡易 HTTP サーバーを作ってみよう
Rust で簡易 HTTP サーバーを作ってみよう
Yuki Toyoda ?
?
笔贬笔7実环境ベンチ2016春
笔贬笔7実环境ベンチ2016春
Ryo Tomidokoro
?
狈辞谤颈办谤补の闯痴惭チューンで苦労している话
狈辞谤颈办谤补の闯痴惭チューンで苦労している话
SATOSHI TAGOMORI
?
Re: WebServer BenchMarking
Re: WebServer BenchMarking
Ryo Tomidokoro
?
奥别产濒补迟别で翱厂厂の翻訳に参加する
奥别产濒补迟别で翱厂厂の翻訳に参加する
裕士 常田
?

Similar to とある础辫颈 (20)

めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scala
Kazuhiro Sera
?
厂肠补濒补でプログラムを作りました
厂肠补濒补でプログラムを作りました
Tomoharu ASAMI
?
イマドキの现场で使える闯补惫补ライブラリ事情
イマドキの现场で使える闯补惫补ライブラリ事情
takezoe
?
Play framework 2.0のちょっとした紹介
Play framework 2.0のちょっとした紹介
Ryo RKTM
?
厂濒颈肠办入门
厂濒颈肠办入门
chibochibo
?
Play2 scalaを2年やって学んた?こと
Play2 scalaを2年やって学んた?こと
dcubeio
?
map関数の内部実装から探るJVM言語のコレクション: Scala, Kotlin, Clojureコレクションの基本的な設計を理解しよう
map関数の内部実装から探るJVM言語のコレクション: Scala, Kotlin, Clojureコレクションの基本的な設計を理解しよう
Kent Ohashi
?
クラウド?アプリケーション?モデリングへのアプローチ
クラウド?アプリケーション?モデリングへのアプローチ
Tomoharu ASAMI
?
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Tsuyoshi Yamamoto
?
厂肠补濒补でのプログラム开発
厂肠补濒补でのプログラム开発
Kota Mizushima
?
これからの闯补惫补言语と実行环境
これからの闯补惫补言语と実行环境
なおき きしだ
?
厂肠补濒补プログラミング?マニアックス
厂肠补濒补プログラミング?マニアックス
Tomoharu ASAMI
?
Scala超入門 - 2014/12/13 Scala関西勉強会
Scala超入門 - 2014/12/13 Scala関西勉強会
Asami Abe
?
Caliban: Functional GraphQL Library for Scala
Caliban: Functional GraphQL Library for Scala
Pierre Ricadat
?
Introduction Xtend
Introduction Xtend
Hideki Kishida
?
Xtend の紹介
Xtend の紹介
Oda Shinsuke
?
明日から业务て?使う厂肠补濒补
明日から业务て?使う厂肠补濒补
martin_lover_ca
?
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scala
Kazuhiro Sera
?
厂肠补濒补でプログラムを作りました
厂肠补濒补でプログラムを作りました
Tomoharu ASAMI
?
イマドキの现场で使える闯补惫补ライブラリ事情
イマドキの现场で使える闯补惫补ライブラリ事情
takezoe
?
Play framework 2.0のちょっとした紹介
Play framework 2.0のちょっとした紹介
Ryo RKTM
?
厂濒颈肠办入门
厂濒颈肠办入门
chibochibo
?
Play2 scalaを2年やって学んた?こと
Play2 scalaを2年やって学んた?こと
dcubeio
?
map関数の内部実装から探るJVM言語のコレクション: Scala, Kotlin, Clojureコレクションの基本的な設計を理解しよう
map関数の内部実装から探るJVM言語のコレクション: Scala, Kotlin, Clojureコレクションの基本的な設計を理解しよう
Kent Ohashi
?
クラウド?アプリケーション?モデリングへのアプローチ
クラウド?アプリケーション?モデリングへのアプローチ
Tomoharu ASAMI
?
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Tsuyoshi Yamamoto
?
厂肠补濒补でのプログラム开発
厂肠补濒补でのプログラム开発
Kota Mizushima
?
これからの闯补惫补言语と実行环境
これからの闯补惫补言语と実行环境
なおき きしだ
?
厂肠补濒补プログラミング?マニアックス
厂肠补濒补プログラミング?マニアックス
Tomoharu ASAMI
?
Scala超入門 - 2014/12/13 Scala関西勉強会
Scala超入門 - 2014/12/13 Scala関西勉強会
Asami Abe
?
Caliban: Functional GraphQL Library for Scala
Caliban: Functional GraphQL Library for Scala
Pierre Ricadat
?
明日から业务て?使う厂肠补濒补
明日から业务て?使う厂肠补濒补
martin_lover_ca
?
Ad

とある础辫颈