14
WEB 時代の 大富豪的プログラミング のススメ @chimerast たけうちひでゆき

Web時代の大富豪的プログラミングのススメ

Embed Size (px)

DESCRIPTION

社内勉強会のLTで当たり前なことを大まじめに話してみました。

Citation preview

Page 1: Web時代の大富豪的プログラミングのススメ

WEB時代の大富豪的プログラミング

のススメchimerast

たけうちひでゆき

自己紹介

bull たけうちひでゆき

bull 肩書き 永遠のNEET

bull Twitter chimerast

富豪的プログラミング

bull メモリや実行効率を気にしないでお気楽にプログラムを作る

bull 条件が変わる度にすべての計算や表示を行なう

by 増井俊之 (富豪化理論研究家)

19961014httpwwwpitecancomfugohtml

memcachedの功罪

bull 猫も194780子もmemcached

bull キャッシュが欲しい

じゃあmemcachedで

bull そんな装備で大丈夫か

じゃあ何使えばいいの

In-Process Cache

In-Process Cache

bull MapltString Tgt cache = new HashMapltString Tgt()

bull var cache =

bull cache = ()

In-Process Cacheの利点

bull ネットワークコストがかからない

bull Serializationコストがかからない

bull 注 ちゃんとキャッシュ用途で使うならLRUアルゴリズム等による破棄を実装したモジュールを使うこと

bull あとThread-safeかどうかも重要

データ数による速度の違い

0ms

200ms

400ms

600ms

800ms

1 10 100 1000 10000

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb loop=1000 thread=1

同時アクセス数による速度の違い

0ms

1750ms

3500ms

5250ms

7000ms

1 10 20 50 100

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb count=10000 loop=1000

同時アクセス数による速度の違い

単位 ms 1 10 20 50 100

Nop

LocalMemcachd

RemoteMemcachd

InProcessCache

0518 2243 0397 0406 2884

454321 907012 1582445 3896407 6626150

664972 737439 1168138 2866942 5642771

5846 63923 99005 168975 180256

get() size=64kb count=10000 loop=1000

実験環境

bull Java In-Memory CacheはGuavaのCacheBuilderを使用

bull MacBook ProRetina Mid 2012

bull 23 GHz Intel Core i7

bull 8 GB 1600 MHz DDR3

bull httpsgithubcomchimerastcachebench

In-Process Cacheでできないこと

bull 本当に大規模なキャッシュ(数TBとか)

bull セッションオブジェクトの共有

bull forkするようなcgiとかphpとか

まとめ

bull それほんとにmemcachedがマッチしてるの

bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない

Page 2: Web時代の大富豪的プログラミングのススメ

自己紹介

bull たけうちひでゆき

bull 肩書き 永遠のNEET

bull Twitter chimerast

富豪的プログラミング

bull メモリや実行効率を気にしないでお気楽にプログラムを作る

bull 条件が変わる度にすべての計算や表示を行なう

by 増井俊之 (富豪化理論研究家)

19961014httpwwwpitecancomfugohtml

memcachedの功罪

bull 猫も194780子もmemcached

bull キャッシュが欲しい

じゃあmemcachedで

bull そんな装備で大丈夫か

じゃあ何使えばいいの

In-Process Cache

In-Process Cache

bull MapltString Tgt cache = new HashMapltString Tgt()

bull var cache =

bull cache = ()

In-Process Cacheの利点

bull ネットワークコストがかからない

bull Serializationコストがかからない

bull 注 ちゃんとキャッシュ用途で使うならLRUアルゴリズム等による破棄を実装したモジュールを使うこと

bull あとThread-safeかどうかも重要

データ数による速度の違い

0ms

200ms

400ms

600ms

800ms

1 10 100 1000 10000

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb loop=1000 thread=1

同時アクセス数による速度の違い

0ms

1750ms

3500ms

5250ms

7000ms

1 10 20 50 100

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb count=10000 loop=1000

同時アクセス数による速度の違い

単位 ms 1 10 20 50 100

Nop

LocalMemcachd

RemoteMemcachd

InProcessCache

0518 2243 0397 0406 2884

454321 907012 1582445 3896407 6626150

664972 737439 1168138 2866942 5642771

5846 63923 99005 168975 180256

get() size=64kb count=10000 loop=1000

実験環境

bull Java In-Memory CacheはGuavaのCacheBuilderを使用

bull MacBook ProRetina Mid 2012

bull 23 GHz Intel Core i7

bull 8 GB 1600 MHz DDR3

bull httpsgithubcomchimerastcachebench

In-Process Cacheでできないこと

bull 本当に大規模なキャッシュ(数TBとか)

bull セッションオブジェクトの共有

bull forkするようなcgiとかphpとか

まとめ

bull それほんとにmemcachedがマッチしてるの

bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない

Page 3: Web時代の大富豪的プログラミングのススメ

富豪的プログラミング

bull メモリや実行効率を気にしないでお気楽にプログラムを作る

bull 条件が変わる度にすべての計算や表示を行なう

by 増井俊之 (富豪化理論研究家)

19961014httpwwwpitecancomfugohtml

memcachedの功罪

bull 猫も194780子もmemcached

bull キャッシュが欲しい

じゃあmemcachedで

bull そんな装備で大丈夫か

じゃあ何使えばいいの

In-Process Cache

In-Process Cache

bull MapltString Tgt cache = new HashMapltString Tgt()

bull var cache =

bull cache = ()

In-Process Cacheの利点

bull ネットワークコストがかからない

bull Serializationコストがかからない

bull 注 ちゃんとキャッシュ用途で使うならLRUアルゴリズム等による破棄を実装したモジュールを使うこと

bull あとThread-safeかどうかも重要

データ数による速度の違い

0ms

200ms

400ms

600ms

800ms

1 10 100 1000 10000

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb loop=1000 thread=1

同時アクセス数による速度の違い

0ms

1750ms

3500ms

5250ms

7000ms

1 10 20 50 100

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb count=10000 loop=1000

同時アクセス数による速度の違い

単位 ms 1 10 20 50 100

Nop

LocalMemcachd

RemoteMemcachd

InProcessCache

0518 2243 0397 0406 2884

454321 907012 1582445 3896407 6626150

664972 737439 1168138 2866942 5642771

5846 63923 99005 168975 180256

get() size=64kb count=10000 loop=1000

実験環境

bull Java In-Memory CacheはGuavaのCacheBuilderを使用

bull MacBook ProRetina Mid 2012

bull 23 GHz Intel Core i7

bull 8 GB 1600 MHz DDR3

bull httpsgithubcomchimerastcachebench

In-Process Cacheでできないこと

bull 本当に大規模なキャッシュ(数TBとか)

bull セッションオブジェクトの共有

bull forkするようなcgiとかphpとか

まとめ

bull それほんとにmemcachedがマッチしてるの

bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない

Page 4: Web時代の大富豪的プログラミングのススメ

memcachedの功罪

bull 猫も194780子もmemcached

bull キャッシュが欲しい

じゃあmemcachedで

bull そんな装備で大丈夫か

じゃあ何使えばいいの

In-Process Cache

In-Process Cache

bull MapltString Tgt cache = new HashMapltString Tgt()

bull var cache =

bull cache = ()

In-Process Cacheの利点

bull ネットワークコストがかからない

bull Serializationコストがかからない

bull 注 ちゃんとキャッシュ用途で使うならLRUアルゴリズム等による破棄を実装したモジュールを使うこと

bull あとThread-safeかどうかも重要

データ数による速度の違い

0ms

200ms

400ms

600ms

800ms

1 10 100 1000 10000

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb loop=1000 thread=1

同時アクセス数による速度の違い

0ms

1750ms

3500ms

5250ms

7000ms

1 10 20 50 100

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb count=10000 loop=1000

同時アクセス数による速度の違い

単位 ms 1 10 20 50 100

Nop

LocalMemcachd

RemoteMemcachd

InProcessCache

0518 2243 0397 0406 2884

454321 907012 1582445 3896407 6626150

664972 737439 1168138 2866942 5642771

5846 63923 99005 168975 180256

get() size=64kb count=10000 loop=1000

実験環境

bull Java In-Memory CacheはGuavaのCacheBuilderを使用

bull MacBook ProRetina Mid 2012

bull 23 GHz Intel Core i7

bull 8 GB 1600 MHz DDR3

bull httpsgithubcomchimerastcachebench

In-Process Cacheでできないこと

bull 本当に大規模なキャッシュ(数TBとか)

bull セッションオブジェクトの共有

bull forkするようなcgiとかphpとか

まとめ

bull それほんとにmemcachedがマッチしてるの

bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない

Page 5: Web時代の大富豪的プログラミングのススメ

じゃあ何使えばいいの

In-Process Cache

In-Process Cache

bull MapltString Tgt cache = new HashMapltString Tgt()

bull var cache =

bull cache = ()

In-Process Cacheの利点

bull ネットワークコストがかからない

bull Serializationコストがかからない

bull 注 ちゃんとキャッシュ用途で使うならLRUアルゴリズム等による破棄を実装したモジュールを使うこと

bull あとThread-safeかどうかも重要

データ数による速度の違い

0ms

200ms

400ms

600ms

800ms

1 10 100 1000 10000

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb loop=1000 thread=1

同時アクセス数による速度の違い

0ms

1750ms

3500ms

5250ms

7000ms

1 10 20 50 100

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb count=10000 loop=1000

同時アクセス数による速度の違い

単位 ms 1 10 20 50 100

Nop

LocalMemcachd

RemoteMemcachd

InProcessCache

0518 2243 0397 0406 2884

454321 907012 1582445 3896407 6626150

664972 737439 1168138 2866942 5642771

5846 63923 99005 168975 180256

get() size=64kb count=10000 loop=1000

実験環境

bull Java In-Memory CacheはGuavaのCacheBuilderを使用

bull MacBook ProRetina Mid 2012

bull 23 GHz Intel Core i7

bull 8 GB 1600 MHz DDR3

bull httpsgithubcomchimerastcachebench

In-Process Cacheでできないこと

bull 本当に大規模なキャッシュ(数TBとか)

bull セッションオブジェクトの共有

bull forkするようなcgiとかphpとか

まとめ

bull それほんとにmemcachedがマッチしてるの

bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない

Page 6: Web時代の大富豪的プログラミングのススメ

In-Process Cache

In-Process Cache

bull MapltString Tgt cache = new HashMapltString Tgt()

bull var cache =

bull cache = ()

In-Process Cacheの利点

bull ネットワークコストがかからない

bull Serializationコストがかからない

bull 注 ちゃんとキャッシュ用途で使うならLRUアルゴリズム等による破棄を実装したモジュールを使うこと

bull あとThread-safeかどうかも重要

データ数による速度の違い

0ms

200ms

400ms

600ms

800ms

1 10 100 1000 10000

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb loop=1000 thread=1

同時アクセス数による速度の違い

0ms

1750ms

3500ms

5250ms

7000ms

1 10 20 50 100

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb count=10000 loop=1000

同時アクセス数による速度の違い

単位 ms 1 10 20 50 100

Nop

LocalMemcachd

RemoteMemcachd

InProcessCache

0518 2243 0397 0406 2884

454321 907012 1582445 3896407 6626150

664972 737439 1168138 2866942 5642771

5846 63923 99005 168975 180256

get() size=64kb count=10000 loop=1000

実験環境

bull Java In-Memory CacheはGuavaのCacheBuilderを使用

bull MacBook ProRetina Mid 2012

bull 23 GHz Intel Core i7

bull 8 GB 1600 MHz DDR3

bull httpsgithubcomchimerastcachebench

In-Process Cacheでできないこと

bull 本当に大規模なキャッシュ(数TBとか)

bull セッションオブジェクトの共有

bull forkするようなcgiとかphpとか

まとめ

bull それほんとにmemcachedがマッチしてるの

bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない

Page 7: Web時代の大富豪的プログラミングのススメ

In-Process Cache

bull MapltString Tgt cache = new HashMapltString Tgt()

bull var cache =

bull cache = ()

In-Process Cacheの利点

bull ネットワークコストがかからない

bull Serializationコストがかからない

bull 注 ちゃんとキャッシュ用途で使うならLRUアルゴリズム等による破棄を実装したモジュールを使うこと

bull あとThread-safeかどうかも重要

データ数による速度の違い

0ms

200ms

400ms

600ms

800ms

1 10 100 1000 10000

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb loop=1000 thread=1

同時アクセス数による速度の違い

0ms

1750ms

3500ms

5250ms

7000ms

1 10 20 50 100

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb count=10000 loop=1000

同時アクセス数による速度の違い

単位 ms 1 10 20 50 100

Nop

LocalMemcachd

RemoteMemcachd

InProcessCache

0518 2243 0397 0406 2884

454321 907012 1582445 3896407 6626150

664972 737439 1168138 2866942 5642771

5846 63923 99005 168975 180256

get() size=64kb count=10000 loop=1000

実験環境

bull Java In-Memory CacheはGuavaのCacheBuilderを使用

bull MacBook ProRetina Mid 2012

bull 23 GHz Intel Core i7

bull 8 GB 1600 MHz DDR3

bull httpsgithubcomchimerastcachebench

In-Process Cacheでできないこと

bull 本当に大規模なキャッシュ(数TBとか)

bull セッションオブジェクトの共有

bull forkするようなcgiとかphpとか

まとめ

bull それほんとにmemcachedがマッチしてるの

bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない

Page 8: Web時代の大富豪的プログラミングのススメ

In-Process Cacheの利点

bull ネットワークコストがかからない

bull Serializationコストがかからない

bull 注 ちゃんとキャッシュ用途で使うならLRUアルゴリズム等による破棄を実装したモジュールを使うこと

bull あとThread-safeかどうかも重要

データ数による速度の違い

0ms

200ms

400ms

600ms

800ms

1 10 100 1000 10000

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb loop=1000 thread=1

同時アクセス数による速度の違い

0ms

1750ms

3500ms

5250ms

7000ms

1 10 20 50 100

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb count=10000 loop=1000

同時アクセス数による速度の違い

単位 ms 1 10 20 50 100

Nop

LocalMemcachd

RemoteMemcachd

InProcessCache

0518 2243 0397 0406 2884

454321 907012 1582445 3896407 6626150

664972 737439 1168138 2866942 5642771

5846 63923 99005 168975 180256

get() size=64kb count=10000 loop=1000

実験環境

bull Java In-Memory CacheはGuavaのCacheBuilderを使用

bull MacBook ProRetina Mid 2012

bull 23 GHz Intel Core i7

bull 8 GB 1600 MHz DDR3

bull httpsgithubcomchimerastcachebench

In-Process Cacheでできないこと

bull 本当に大規模なキャッシュ(数TBとか)

bull セッションオブジェクトの共有

bull forkするようなcgiとかphpとか

まとめ

bull それほんとにmemcachedがマッチしてるの

bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない

Page 9: Web時代の大富豪的プログラミングのススメ

データ数による速度の違い

0ms

200ms

400ms

600ms

800ms

1 10 100 1000 10000

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb loop=1000 thread=1

同時アクセス数による速度の違い

0ms

1750ms

3500ms

5250ms

7000ms

1 10 20 50 100

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb count=10000 loop=1000

同時アクセス数による速度の違い

単位 ms 1 10 20 50 100

Nop

LocalMemcachd

RemoteMemcachd

InProcessCache

0518 2243 0397 0406 2884

454321 907012 1582445 3896407 6626150

664972 737439 1168138 2866942 5642771

5846 63923 99005 168975 180256

get() size=64kb count=10000 loop=1000

実験環境

bull Java In-Memory CacheはGuavaのCacheBuilderを使用

bull MacBook ProRetina Mid 2012

bull 23 GHz Intel Core i7

bull 8 GB 1600 MHz DDR3

bull httpsgithubcomchimerastcachebench

In-Process Cacheでできないこと

bull 本当に大規模なキャッシュ(数TBとか)

bull セッションオブジェクトの共有

bull forkするようなcgiとかphpとか

まとめ

bull それほんとにmemcachedがマッチしてるの

bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない

Page 10: Web時代の大富豪的プログラミングのススメ

同時アクセス数による速度の違い

0ms

1750ms

3500ms

5250ms

7000ms

1 10 20 50 100

Nop LocalMemcached RemoteMemcached InProcessCache

get() size=64kb count=10000 loop=1000

同時アクセス数による速度の違い

単位 ms 1 10 20 50 100

Nop

LocalMemcachd

RemoteMemcachd

InProcessCache

0518 2243 0397 0406 2884

454321 907012 1582445 3896407 6626150

664972 737439 1168138 2866942 5642771

5846 63923 99005 168975 180256

get() size=64kb count=10000 loop=1000

実験環境

bull Java In-Memory CacheはGuavaのCacheBuilderを使用

bull MacBook ProRetina Mid 2012

bull 23 GHz Intel Core i7

bull 8 GB 1600 MHz DDR3

bull httpsgithubcomchimerastcachebench

In-Process Cacheでできないこと

bull 本当に大規模なキャッシュ(数TBとか)

bull セッションオブジェクトの共有

bull forkするようなcgiとかphpとか

まとめ

bull それほんとにmemcachedがマッチしてるの

bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない

Page 11: Web時代の大富豪的プログラミングのススメ

同時アクセス数による速度の違い

単位 ms 1 10 20 50 100

Nop

LocalMemcachd

RemoteMemcachd

InProcessCache

0518 2243 0397 0406 2884

454321 907012 1582445 3896407 6626150

664972 737439 1168138 2866942 5642771

5846 63923 99005 168975 180256

get() size=64kb count=10000 loop=1000

実験環境

bull Java In-Memory CacheはGuavaのCacheBuilderを使用

bull MacBook ProRetina Mid 2012

bull 23 GHz Intel Core i7

bull 8 GB 1600 MHz DDR3

bull httpsgithubcomchimerastcachebench

In-Process Cacheでできないこと

bull 本当に大規模なキャッシュ(数TBとか)

bull セッションオブジェクトの共有

bull forkするようなcgiとかphpとか

まとめ

bull それほんとにmemcachedがマッチしてるの

bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない

Page 12: Web時代の大富豪的プログラミングのススメ

実験環境

bull Java In-Memory CacheはGuavaのCacheBuilderを使用

bull MacBook ProRetina Mid 2012

bull 23 GHz Intel Core i7

bull 8 GB 1600 MHz DDR3

bull httpsgithubcomchimerastcachebench

In-Process Cacheでできないこと

bull 本当に大規模なキャッシュ(数TBとか)

bull セッションオブジェクトの共有

bull forkするようなcgiとかphpとか

まとめ

bull それほんとにmemcachedがマッチしてるの

bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない

Page 13: Web時代の大富豪的プログラミングのススメ

In-Process Cacheでできないこと

bull 本当に大規模なキャッシュ(数TBとか)

bull セッションオブジェクトの共有

bull forkするようなcgiとかphpとか

まとめ

bull それほんとにmemcachedがマッチしてるの

bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない

Page 14: Web時代の大富豪的プログラミングのススメ

まとめ

bull それほんとにmemcachedがマッチしてるの

bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない