SlideShare a Scribd company logo
1 of 16
Download to read offline
「世界一速い他人のふんどし」を

「使った」タイルサーバ
田渕 直 (@n_tabee)

株式会社トレック
2015/10/51
「世界一速い他人のふんどしを」

「使ったタイルサーバ
田渕 直 (@n_tabee)

株式会社トレック
2015/10/52
「世界一速い他人のふんどし」を

「使った」タイルサーバ
田渕 直 (@n_tabee)

株式会社トレック
2015/10/53
お前誰?
田渕 直 (たぶち なおし), @n_tabee
お勤め先: (株) トレック - 仙台の小さなシステム屋さん –
「うぇるなび」という送迎プランニングサービスを開発
2015/10/54
ベース地図が
OSM
何の話?
H2O: DeNA が開発・公開している httpd
https://github.com/h2o/h2o
をフォークして、タイルサーバに改造した:
https://github.com/ntabee/h2o-tile
※ DeNA社・大元の H2O コミッタの方々は無関係です
2015/10/55
既存のタイル実装で (たぶん) 最速 (の一つ)
「うぇるなび」というOSMベースのサービスを作っている
最初はApache/mod_tile
! パフォーマンスに不満があった
! スタイルも古いままで

置き換えがつらかった
なんとかしましょう!
背景
2015/10/56
なぜ H2O で?
! tileman (osm.jp のタイルサーバ, nginx) がうまく動かせなかった

(Ubuntu 14, 15 and Debian 8, 詳しい方教えてください)
! せっかくなので
! 新鮮で
! コードベースが小さくて
! HTTP2 対応のものを
いじってみよう!
! ○年ぶりにC言語で遊んでみたい
2015/10/57
デモ
http://a.tile.michisuji.com:8080/
サーバ: GCE スモール・インスタンス (1コア!)
2015/10/68
無線繋がってる方は

開いてみてください
実装の工夫
以上。
2015/10/69
「メタタイル」を使わない!
実装の工夫
以上。
H2O は「独立の小さなコンテンツを大量に配信する」モノ:

メタタイルは足をひっぱる

(& 実装めんどくさい)
2015/10/610
「メタタイル」を使わない!
運用の注意
ので、ファイルシステムを選ぶ:
高ズームのタイル数 ≒ 1億∼1兆個 (理論上は):
! このファイル数を扱えるファイルシステム

ext4 や XFS
! 条件: ファイル数の上限が決め打ちされないモノ
! Btrfs や ZFS など
! 個人的には Btrfs を使っている
2015/10/611
「メタタイル」を使わない!
ベンチマーク
wrk を使って簡単なベンチマーク:
! i4770K 上の VM, 仮想4コア
! あらかじめ用意した約77万個のタイルを10秒間 GET
! クライアントとサーバは同ホスト (分けると LAN がボトルネック)
2015/10/612
Running 10s test @ http://localhost:8080/
4 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 4.08ms 4.70ms 210.40ms 91.20%
Req/Sec 38.46k 12.43k 99.92k 77.72%
(中略)
1535421 requests in 10.07s, 7.11GB read
Requests/sec: 152439.26
Transfer/sec: 722.99MB
Running 10s test @ http://localhost:8080/
4 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 4.08ms 4.70ms 210.40ms 91.20%
Req/Sec 38.46k 12.43k 99.92k 77.72%
中略)
1535421 requests in 10.07s, 7.11GB read
Requests/sec: 152439.26
Transfer/sec: 722.99MB
Running 10s test @ http://localhost/
4 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 92.52ms 232.91ms 1.75s 91.27%
Req/Sec 11.69k 5.73k 28.45k 67.00%
(中略)
466463 requests in 10.03s, 3.20GB read
Socket errors: connect 0, read 0, write 0, timeout 271
Requests/sec: 46499.53
Transfer/sec: 327.15MB
nginxとの比較
「nginx + URL書き換えの Lua スクリプト」を、同条件で測定
2015/10/613
H2O-tile nginx (+ Lua)
チューニングなしだと3倍ぐらい違う
Running 10s test @ http://localhost:8080/
4 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 4.08ms 4.70ms 210.40ms 91.20%
Req/Sec 38.46k 12.43k 99.92k 77.72%
中略)
1535421 requests in 10.07s, 7.11GB read
Requests/sec: 152439.26
Transfer/sec: 722.99MB
「nginx + URL書き換えの Lua スクリプト」を、同条件で測定
H2O-tile
Running 10s test @ http://localhost/
4 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 92.52ms 232.91ms 1.75s 91.27%
Req/Sec 11.69k 5.73k 28.45k 67.00%
(中略)
466463 requests in 10.03s, 3.20GB read
Socket errors: connect 0, read 0, write 0, timeout 271
Requests/sec: 46499.53
Transfer/sec: 327.15MB
nginx (+ Lua)
nginxとの比較
2015/10/614
nginx (+ Lua)
チューニングなしだと3倍ぐらい違う
※ チューニング次第で 差になるはず (たぶん)
H2O-tile の強み: ほぼノーチューンでも速い
使ってください
http://a.tile.michisuji.com:8080/tiles/{z}/{x}/{y}.png

https://a.tile.michisuji.com:8081/...
皆さんのアプリに使ってOKです。ただし、
必ず:
! キャッシュの上流としてください (自前のキャッシュサーバを立ててください)
! 止まっても泣かない (一時停止でも・永久に廃止でも)

代替サーバ (tile.openstreetmap.jp など) をあらかじめ決めてください
できれば:
! 立てたキャッシュサーバを、類似の条件で「上流」として公開してください
! H2O-tile を使ってください
2015/10/615
まとめ
! H2O を改造してタイルサーバをつくった
! チューニングなしならば nginx より速い
! 稼働ホストを (条件付きで) オープンにします:
http://a.tile.michisuji.com:8080/tiles/{z}/{x}/{y}.png
https://a.tile.michisuji.com:8081/...
2015/10/616

More Related Content

What's hot

initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動Takashi Takizawa
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみるairtoxin Ishii
 
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようmax747
 
軽量高機能webサーバーnginx
軽量高機能webサーバーnginx軽量高機能webサーバーnginx
軽量高機能webサーバーnginxngi group.
 
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DOWebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DOKohei Noda
 
処理概要図&構築手順書1124
処理概要図&構築手順書1124処理概要図&構築手順書1124
処理概要図&構築手順書1124Kazuki Miura
 
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2azumakuniyuki 🐈
 
import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28th0x0472
 
ParliamentでGeoSPARQL
ParliamentでGeoSPARQLParliamentでGeoSPARQL
ParliamentでGeoSPARQLTeppei Inaba
 
20101220 pixiv tech_meeting
20101220 pixiv tech_meeting20101220 pixiv tech_meeting
20101220 pixiv tech_meetingsemind
 
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークSeastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークTakuya ASADA
 
クックパッドのスケーリング
クックパッドのスケーリングクックパッドのスケーリング
クックパッドのスケーリングSatoshi Takada
 
Unboundの最適化(OSC2011 Tokyo/Spring)
Unboundの最適化(OSC2011 Tokyo/Spring)Unboundの最適化(OSC2011 Tokyo/Spring)
Unboundの最適化(OSC2011 Tokyo/Spring)Takashi Takizawa
 
Mongo dbのgridfsについて
Mongo dbのgridfsについてMongo dbのgridfsについて
Mongo dbのgridfsについてMasahiro Saito
 
Openstack calendar20141222
Openstack calendar20141222Openstack calendar20141222
Openstack calendar20141222samemoon
 
CometPub20070223
CometPub20070223CometPub20070223
CometPub20070223Hiroshi Ono
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケットTakaaki Hoyo
 

What's hot (20)

initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動
 
Vector
VectorVector
Vector
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる
 
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしよう
 
軽量高機能webサーバーnginx
軽量高機能webサーバーnginx軽量高機能webサーバーnginx
軽量高機能webサーバーnginx
 
Fabric Essentials
Fabric EssentialsFabric Essentials
Fabric Essentials
 
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DOWebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
 
処理概要図&構築手順書1124
処理概要図&構築手順書1124処理概要図&構築手順書1124
処理概要図&構築手順書1124
 
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
 
import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28
 
ParliamentでGeoSPARQL
ParliamentでGeoSPARQLParliamentでGeoSPARQL
ParliamentでGeoSPARQL
 
20101220 pixiv tech_meeting
20101220 pixiv tech_meeting20101220 pixiv tech_meeting
20101220 pixiv tech_meeting
 
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークSeastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
 
クックパッドのスケーリング
クックパッドのスケーリングクックパッドのスケーリング
クックパッドのスケーリング
 
Unboundの最適化(OSC2011 Tokyo/Spring)
Unboundの最適化(OSC2011 Tokyo/Spring)Unboundの最適化(OSC2011 Tokyo/Spring)
Unboundの最適化(OSC2011 Tokyo/Spring)
 
Mongo dbのgridfsについて
Mongo dbのgridfsについてMongo dbのgridfsについて
Mongo dbのgridfsについて
 
Openstack calendar20141222
Openstack calendar20141222Openstack calendar20141222
Openstack calendar20141222
 
about Tcpreplay
about Tcpreplayabout Tcpreplay
about Tcpreplay
 
CometPub20070223
CometPub20070223CometPub20070223
CometPub20070223
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 

Similar to 世界一速い他人のふんどしを使ったタイルサーバ

Webrtc最新動向
Webrtc最新動向Webrtc最新動向
Webrtc最新動向Yusuke Naka
 
第43回HTML5とか勉強会 最新webプロトコル傾向と対策
第43回HTML5とか勉強会 最新webプロトコル傾向と対策第43回HTML5とか勉強会 最新webプロトコル傾向と対策
第43回HTML5とか勉強会 最新webプロトコル傾向と対策Kensaku Komatsu
 
HTML5と WebSocket / WebRTC / Web Audio API / WebGL 技術解説
HTML5と WebSocket / WebRTC / Web Audio API / WebGL 技術解説HTML5と WebSocket / WebRTC / Web Audio API / WebGL 技術解説
HTML5と WebSocket / WebRTC / Web Audio API / WebGL 技術解説You_Kinjoh
 
WebSocketプロトコル
WebSocketプロトコルWebSocketプロトコル
WebSocketプロトコルDaniel Perez
 
JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要Shumpei Shiraishi
 
Docker Machineを始めるには?
Docker Machineを始めるには?Docker Machineを始めるには?
Docker Machineを始めるには?Masahito Zembutsu
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1mganeko
 
2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet ServicesNaoto Gohko
 
Gluster fs and_swiftapi_20120429
Gluster fs and_swiftapi_20120429Gluster fs and_swiftapi_20120429
Gluster fs and_swiftapi_20120429Etsuji Nakai
 
QUIC標準化動向 〜2017/7
QUIC標準化動向 〜2017/7QUIC標準化動向 〜2017/7
QUIC標準化動向 〜2017/7Kazuho Oku
 
Data channelの活用方法とその可能性 - WebRTC Conference Japan
Data channelの活用方法とその可能性 - WebRTC Conference JapanData channelの活用方法とその可能性 - WebRTC Conference Japan
Data channelの活用方法とその可能性 - WebRTC Conference JapanShintaro Tanaka
 
AWSとmod_pagespeedで 楽々サクサク高速化!!
AWSとmod_pagespeedで楽々サクサク高速化!!AWSとmod_pagespeedで楽々サクサク高速化!!
AWSとmod_pagespeedで 楽々サクサク高速化!!aasakawa
 
Aw svs trifortクラウド選びのポイント
Aw svs trifortクラウド選びのポイントAw svs trifortクラウド選びのポイント
Aw svs trifortクラウド選びのポイントTaimei Omata
 
20150101勉強会 dokku alt
20150101勉強会 dokku alt20150101勉強会 dokku alt
20150101勉強会 dokku altShugo Numano
 
Kubernetes で実践するクラウドネイティブ DevOps "監視とオブザーバビリティ"編 / Cloud Native DevOps with K...
Kubernetes で実践するクラウドネイティブ DevOps "監視とオブザーバビリティ"編 / Cloud Native DevOps with K...Kubernetes で実践するクラウドネイティブ DevOps "監視とオブザーバビリティ"編 / Cloud Native DevOps with K...
Kubernetes で実践するクラウドネイティブ DevOps "監視とオブザーバビリティ"編 / Cloud Native DevOps with K...Preferred Networks
 
大規模運用で見えるWebプロトコルの理想と現実、そして今後 #html5j #html5j_b
大規模運用で見えるWebプロトコルの理想と現実、そして今後  #html5j #html5j_b大規模運用で見えるWebプロトコルの理想と現実、そして今後  #html5j #html5j_b
大規模運用で見えるWebプロトコルの理想と現実、そして今後 #html5j #html5j_bYahoo!デベロッパーネットワーク
 
20110622 haruyama webso]cket
20110622 haruyama webso]cket20110622 haruyama webso]cket
20110622 haruyama webso]cketMakoto Haruyama
 

Similar to 世界一速い他人のふんどしを使ったタイルサーバ (20)

20120525 mt websocket
20120525 mt websocket20120525 mt websocket
20120525 mt websocket
 
Webrtc最新動向
Webrtc最新動向Webrtc最新動向
Webrtc最新動向
 
Protocol2018
Protocol2018Protocol2018
Protocol2018
 
第43回HTML5とか勉強会 最新webプロトコル傾向と対策
第43回HTML5とか勉強会 最新webプロトコル傾向と対策第43回HTML5とか勉強会 最新webプロトコル傾向と対策
第43回HTML5とか勉強会 最新webプロトコル傾向と対策
 
HTML5と WebSocket / WebRTC / Web Audio API / WebGL 技術解説
HTML5と WebSocket / WebRTC / Web Audio API / WebGL 技術解説HTML5と WebSocket / WebRTC / Web Audio API / WebGL 技術解説
HTML5と WebSocket / WebRTC / Web Audio API / WebGL 技術解説
 
WebSocketプロトコル
WebSocketプロトコルWebSocketプロトコル
WebSocketプロトコル
 
JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要
 
Docker Machineを始めるには?
Docker Machineを始めるには?Docker Machineを始めるには?
Docker Machineを始めるには?
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1
 
2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services
 
Open stackceilometer
Open stackceilometerOpen stackceilometer
Open stackceilometer
 
Gluster fs and_swiftapi_20120429
Gluster fs and_swiftapi_20120429Gluster fs and_swiftapi_20120429
Gluster fs and_swiftapi_20120429
 
QUIC標準化動向 〜2017/7
QUIC標準化動向 〜2017/7QUIC標準化動向 〜2017/7
QUIC標準化動向 〜2017/7
 
Data channelの活用方法とその可能性 - WebRTC Conference Japan
Data channelの活用方法とその可能性 - WebRTC Conference JapanData channelの活用方法とその可能性 - WebRTC Conference Japan
Data channelの活用方法とその可能性 - WebRTC Conference Japan
 
AWSとmod_pagespeedで 楽々サクサク高速化!!
AWSとmod_pagespeedで楽々サクサク高速化!!AWSとmod_pagespeedで楽々サクサク高速化!!
AWSとmod_pagespeedで 楽々サクサク高速化!!
 
Aw svs trifortクラウド選びのポイント
Aw svs trifortクラウド選びのポイントAw svs trifortクラウド選びのポイント
Aw svs trifortクラウド選びのポイント
 
20150101勉強会 dokku alt
20150101勉強会 dokku alt20150101勉強会 dokku alt
20150101勉強会 dokku alt
 
Kubernetes で実践するクラウドネイティブ DevOps "監視とオブザーバビリティ"編 / Cloud Native DevOps with K...
Kubernetes で実践するクラウドネイティブ DevOps "監視とオブザーバビリティ"編 / Cloud Native DevOps with K...Kubernetes で実践するクラウドネイティブ DevOps "監視とオブザーバビリティ"編 / Cloud Native DevOps with K...
Kubernetes で実践するクラウドネイティブ DevOps "監視とオブザーバビリティ"編 / Cloud Native DevOps with K...
 
大規模運用で見えるWebプロトコルの理想と現実、そして今後 #html5j #html5j_b
大規模運用で見えるWebプロトコルの理想と現実、そして今後  #html5j #html5j_b大規模運用で見えるWebプロトコルの理想と現実、そして今後  #html5j #html5j_b
大規模運用で見えるWebプロトコルの理想と現実、そして今後 #html5j #html5j_b
 
20110622 haruyama webso]cket
20110622 haruyama webso]cket20110622 haruyama webso]cket
20110622 haruyama webso]cket
 

世界一速い他人のふんどしを使ったタイルサーバ