mod-geocache / mapcache - A fast tiling solution for the apache web server

26
14 / 09 / 2011 Thomas Bonfort (Terriscope) Stephen Woodbridge (iMaptools) MapServer MapCache (f.k.a mod-geocache) A Fast Tile-Caching Solution for the Apache HTTP Server

description

MapServer MapCache (formerly known as mod-geocache) is a new member in the family of tile caching servers. It aims to be simple to install and configure (no need for the intermediate glue such as mod-python, mod-wsgi or fastcgi), to be (very) fast (written in c and running as a native module under apache), and to be capable (services WMTS, googlemaps, virtualearth, KML, TMS, WMS). When acting as a WMS server, it will also respond to untiled requests, by merging its cached tiles vertically (multiple layers) and/or horizontally.

Transcript of mod-geocache / mapcache - A fast tiling solution for the apache web server

Page 1: mod-geocache / mapcache - A fast tiling solution for the apache web server

14 / 09 / 2011 Thomas Bonfort (Terriscope) Stephen Woodbridge (iMaptools)

MapServer MapCache (f.k.a mod-geocache)

A Fast Tile-Caching Solution for the Apache HTTP Server

Page 2: mod-geocache / mapcache - A fast tiling solution for the apache web server

What’s a tile cache?

Services

Cache

Tileset

Source

Grids requests

Page 3: mod-geocache / mapcache - A fast tiling solution for the apache web server

Yet Another Tile Cache ?

•  Mature / feature-full solutions already out •  High performance needed •  Started out as a small project, to validate the

concept •  Integrated into the MapServer stack for next

release

Page 4: mod-geocache / mapcache - A fast tiling solution for the apache web server

Apache module

•  Module = code run by the apache processes that treat requests

•  Native code •  No overhead (e.g. CGI, FastCGI) •  Does not require spawning an interpreter per

concurrent request •  Caveats:

– Thread/process synchronization – Memory management – Security

Page 5: mod-geocache / mapcache - A fast tiling solution for the apache web server

Features

•  Metatiling – Cross process/thread locking ensures you

can enable metatiling on an unseeded tileset

•  Image recompression / optimization –  JPEG quality – PNG compression level – PNG quantization –  “Mixed” format: PNG+JPEG

Page 6: mod-geocache / mapcache - A fast tiling solution for the apache web server

Features (cont)

•  Expiration handling – HTTP cache controlling headers – Last-Modified, If-Modified-Since – Automatically regenerate stale tiles

•  Custom error reporting – Message – Empty image – Status code (+optional HTTP header)

•  Watermarking

Page 7: mod-geocache / mapcache - A fast tiling solution for the apache web server

Features (cont)

•  Dimensions – Single values –  Intervals – Regular Expressions

•  FeatureInfo forwarding •  FastCGI / CGI option for use outside of apache

Page 8: mod-geocache / mapcache - A fast tiling solution for the apache web server

Services

•  TMS •  WMTS •  WMS / WMS-C •  Google Maps XYZ •  VirtualEarth Quadkeys •  KML SuperOverlays

Page 9: mod-geocache / mapcache - A fast tiling solution for the apache web server

“Demo” Interface

•  Lists all active services •  Easy way to check configured caches •  Simple OpenLayers slippy-map •  Cut-and-paste definitions for Layers •  http://localhost:8081/mapcache/demo

Page 10: mod-geocache / mapcache - A fast tiling solution for the apache web server

Grids

•  Extent •  Projection •  Resolution per level •  Tile size

•  Comes preconfigured with popular grids •  Supports grid aliases •  For limited areas, use grid subsets, not your

own grid!

Page 11: mod-geocache / mapcache - A fast tiling solution for the apache web server

Data Sources

•  Extensible, anything able to provide an image for given: – Width, Height – Extent – SRS – Optionally dimension

•  WMS is the only implemented source – Custom query parameters – Custom headers

Page 12: mod-geocache / mapcache - A fast tiling solution for the apache web server

Caches

•  Extensible mechanism, backend must provide api to get/set a tile for a given grid, x, y, z (+dimension)

•  Higher level locking mechanism allows on-demand cache generation

•  Backends provide different performance / manageability tradeoffs

•  Currently implemented: filesystem, sqlite, memcached

Page 13: mod-geocache / mapcache - A fast tiling solution for the apache web server

Disk based caches

•  Tilecache hierarchy: –  /tmp/osm/g/17/000/027/304/000/081/334.png

•  Custom hierarchy: –  /tmp/{tileset}/{grid}/{x}-{y}-{z}.{ext}

•  Support for symlinking blank tiles •  Watch out for filesystem limitations !

–  Max files per directory –  Max number of inodes –  Blocksize

Page 14: mod-geocache / mapcache - A fast tiling solution for the apache web server

Sqlite caches

•  Store tile data as blobs in sqlite db •  Slower than disk caches, but prevents

filesytem headaches •  Flexible storage options:

–  Provided custom schema –  MBTiles schema –  Custom schema, provide your own queries:

•  select tile_data from tiles where tile_column=:x and tile_row=:y and zoom_level=:z");

•  insert or replace into tiles(tile_column,tile_row,zoom_level,tile_data) values (:x,:y,:z,:data)"

Page 15: mod-geocache / mapcache - A fast tiling solution for the apache web server

Vertical Assembling

Save bandwidth, request a single tiled layer !

&LAYERS=OSM&… &LAYERS=NEXRAD&… &LAYERS=OSM,NEXRAD&…

Page 16: mod-geocache / mapcache - A fast tiling solution for the apache web server

Horizontal Assembling

Support non-tiled clients

Page 17: mod-geocache / mapcache - A fast tiling solution for the apache web server

Tile Assembling

•  CPU bound operation: image format (PNG/JPEG) encoding and decoding

•  CPU acceleration (MMX,SSE,…) of pixel manipulation operations (scaling, blending)

•  Configurable resampling •  No reprojection support •  Missing spec for TMS and WMTS support

Page 18: mod-geocache / mapcache - A fast tiling solution for the apache web server

Proxying support

•  Transparently add tiling / fast WMS support to existing services

•  Intercepts GetTile / GetMap requests •  Configurable forwarding to other services

based on request parameters

Page 19: mod-geocache / mapcache - A fast tiling solution for the apache web server

Seeder

•  Use multiple threads to load the source WMS •  Reseed tiles older than a specified date •  Seed only tiles inside given geometry

– OGR for data access: filter based on SQL queries, e.g. FIPS_A1=’USA’ , pop_density>1000

– GEOS Prepared Geometries for fast intersection calculation

•  Delete mode •  Specify dimension values

Page 20: mod-geocache / mapcache - A fast tiling solution for the apache web server

Benchmarks

•  Server: 4-core, 8GB ram, SSD storage •  ab tool used over Gigabit Ethernet •  “warm” filesystem •  All requests on exact same image data

Page 21: mod-geocache / mapcache - A fast tiling solution for the apache web server

TMS requests / sec

Throughput very dependent on image size

Concurrent requests Geowebcache MapProxy

wsgi MapCache

1 1 280 800 1 780

10 17 000 9 000 30 000

20 18 000 8 000 40 000

100 17 000 7 100 40 000

250 16 500 6 800 40 000

Page 22: mod-geocache / mapcache - A fast tiling solution for the apache web server

SQLite backend, TMS

•  MBTiles backend •  10 threads:

– TileStream: 900 – MapCache: 8300

Page 23: mod-geocache / mapcache - A fast tiling solution for the apache web server

Horizontal assembling

•  Workload: ~20 png decompressions + 1 jpg compression

•  10 threads •  With bilinear resampling

–  MapProxy: 29 –  MapCache: 43

•  With nearest neighbor resampling –  Geowebcache: 35 –  MapProxy: 40 –  MapCache: 48

Page 24: mod-geocache / mapcache - A fast tiling solution for the apache web server

Vertical assembling

•  Workload: 2 png decompressions, 1 jpeg compression

•  10 threads: – Geowebcache: unsupported – MapProxy: 435 – MapCache: 640

Page 25: mod-geocache / mapcache - A fast tiling solution for the apache web server

What’s next?

•  MapServer Stack integration –  Docs –  Code sharing (image I/O, build tools)

•  Ideas: –  Source assembling at the tileset level –  OGC ServiceExceptions –  HTTP options:

• HTTPS •  Authentication •  POST

Page 26: mod-geocache / mapcache - A fast tiling solution for the apache web server

Want More?

•  Soon up to date project page: http://www.mapserver.org/trunk/mapcache/index.html

•  Soon defunct project page: http://code.google.com/p/mod-geocache/

•  Get the code: – Mapserver trunk svn – Mapserver 6.2

•  Contribute ! •  Twitter: @tbonfort