[OSM-ja] (開発者募集)OSMタイル配信サーバの開発

Hiroshi Miura(@osmf) miurahr @ osmf.jp
2013年 4月 4日 (木) 23:36:09 UTC


マッパーの皆さん

三浦です。

現在、OSMタイルサーバを開発しています。日本のOSMコミュニティとして
独自レンダリングを実現したいと考えています。

開発への参加者を募集したいと思います。

同時に、日本らしい地図表現を行うためのmapnikでのレンダリングスタイルを
研究される方もWelcomeです。

開発は、github.com[*0]で行なっています。

名前は、キャッシュになっていますが、(最初はキャッシュの構築から開始したため)
OSMの独自タイル配信サーバの機能をもたせる計画です。

開発に興味のある方、一緒に研究しませんか。


<アーキテクチャ>

OSMのwikiでは、apacheにmod_tile[*1]を導入し、mapnik[*3]ライブラリを使った
Tirex[*2]がタイル画像を生成する方法が説明されています。
また、DBMSには、PostGISを用いて、 osm2pgsqlツールによって最新データを
取り込むようです。osmosisツールを使うことで、自動更新ができます。

独自タイル配信サーバの開発では、次のアーキテクチャを考えています。

<開発ロードマップ>

Ver 0.8

* nginxサーバで、タイルキャッシュ機能を提供します。(DONE)
* リクエストのx/y/z値のチェックをおこなって不正なアクセスを
  抑止します。(in progress)
* tile.openstreetmap.orgの地域分散プログラム(CDN)へ参加可能な
 機能を備えます。(DONE)

Ver 0.9

* PostGISデータベースに日本地域のOSMデータを日次で
  自動更新できるようにします。(ほぼ完了)
* アクセス元が日本国内かどうかを判定して、独自タイルの配信を
   切り替えます。(done)
* リクエストのx/y/z値をチェックして、レンダリング対象かどうかを
 判定できます。(未実装)
* 一部タイルについて、静的タイルを配信できるようにします。(done)

Ver 1.0

* nginxサーバのLUA拡張を利用して、mod_tile相当を実装します。
* タイル生成は、Tirex[*2]で行います。
* 生成されたタイル画像ファイルは、ファイルシステムに格納されます。
* nginxサーバとTirexは、UDPソケット通信でコマンドをやり取りします。
* mapnikのスタイルを改良します。(アイコンとか、色とか)

mod_tile相当とは
* 独自タイル生成を、リクエストに応じて、on the flyで実施します。
* データベースの更新にあわせて、古くなったタイル画像を削除し、
 再度生成されるようにします。
* タイル画像が古い(expire)の場合でも、レスポンスを確保するため
 古いタイルを返送するが、httpでの画像の有効期間を再生成に
 必要な時間を動的に計算して、設定します。
 ユーザが再度表示しようとすると、新しいタイルになります。 

Ver 1.x

* 日本らしい地図表現のバージョンアップをしていきます。

Ver 2.0

* Redis Key-Value-Storeを活用して、メタ情報を管理します。
* Redis Pub/Subを利用して、コマンドをやり取りします。
* Tirexを拡張して、redis pub/subに対応させます。
* renderd_expireを拡張して、redis pub/subに対応させます。
* nginx-luaから、redis pub/subを利用したコマンド利用させます。

Ver 3.0

* Redis KVSへタイルそのものを格納します。
* Redisリプリケーションやnginxリバースプロキシ、Tirex分散等により
大規模サーバ構築可能にします。
* 更新タイルやアクセスの少ないタイルのRedis自動expire機能によって
 DISK容量を削減可能にします。
* 本家レンダリングのリプレースを狙います(?)

<実行環境>

環境は、Ubuntu 11.10(64bit)です。
Nightly buildのmapnikを使っています。[*5]
nginxは、nginx-extra packageを使います。
luaからredisデータベースへのアクセスは、OpenRestyのLua-redis[*6]
モジュールを使います。
Tirexは、ドキュメントに従ってmake debして、パッケージを導入します。[*7]
redis-server パッケージを導入します。

<インストール>

上記実行環境を整えたあと、
$ git clone git://github.com/osmfj/tilecache.git
$ cd pkgs
$ sudo dpkg -i lua-nginx-redis_0.15-1_all.deb <https://github.com/osmfj/tilecache/blob/master/pkgs/lua-nginx-redis_0.15-1_all.deb>
   これで、redisにアクセスできる環境ができます。このパッケージは
 Ubuntu raringからしか提供されていないので、同梱されています。
$ cd tilecache
$ (cd nginx; sudo ./install.sh)
  これで、nginxの設定が導入されます。サーバ名はtileになっている想定です。
$ cd render_expire
$ make
$ sudo make install
  これで、render_expireが/opt/tileserver/bin に導入されます。


[*0] https://github.com/osmfj/tilecache
[*1] http://wiki.openstreetmap.org/wiki/Mod_tile
[*2] http://wiki.openstreetmap.org/wiki/Tirex
[*3] http://wiki.openstreetmap.org/wiki/Mapnik
[*4] http://nginx.org/ja/
[*5] https://launchpad.net/~mapnik/+archive/nightly-trunk
[*6] https://github.com/agentzh/lua-resty-redis
[*7] http://wiki.openstreetmap.org/wiki/Tirex/Building_and_Installing



--
Hiroshi Miura
OpenStreetMap Foundation Japan
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://lists.openstreetmap.org/pipermail/talk-ja/attachments/20130405/82c8b991/attachment.html>


Talk-ja メーリングリストの案内