tile.openstreetmap.jp の更新 2022-12-11
概要
地球惑星規模(planet規模)のタイル地図を配信している
作業の流れ
踏み台から実家内ネットワークにあるIntel PCにsshして、そこでplanet規模のmbtilesを構築する スペック
ストレージ3.6TBのSSD
実メモリ 16GB
Swapメモリ 500GB
えぐいyuiseki.icon
tmuxに作業の状態が残っているので、すぐ再開できる
このドメインは、IPごとの転送量に、40GBくらいの制限が掛けられている
なんと!!yuiseki.icon
OpenStreetMapとしては、torrentとかAWS S3のミラーを使ってね、ということ
そちらが更新されていることを確認する
code:bash
aws s3 ls s3://osm-pds
OpenStreetMapのAWS S3ミラーの最新情報ページ
こっちは古いページらしい
ローカルマシンの作業ディレクトリを削除する
ほぼここに書いてあることをそのまま実行している
特筆すべき差分
--fetch-wikidataはやめた
こいつのせいでエラーになって途中でコケる
最終的には70GBのmbtilesができる
すさまじいyuiseki.icon
ダウンロード時のためのオプション
--download-threads=10とかできる
--download-chunk-size-mb=1000とかできる
10スレッド並列で、1GBごとにRangeリクエストしてダウンロードできる
ビルド時のためのオプション
--nodemap-type=array
--nodemap-storage=mmap
これを指定しないとメモリ不足でエラーになってしまう
lake_centerlines
natural_earth
osm_lakelines
water_polygons
これらは、海や湖などを描画するために必要なデータ
ダウンロードには一時間も掛からない
30分くらいだったかもしれないyuiseki.icon
mbtilesのビルドに最も時間が掛かる
処理はメモリバウンド
メモリが多ければ多いほど速い
誰か @smellman に 32GB * 2 メモリを提供してあげてください!!yuiseki.icon
ビルドのステップにはまず、osm_pass1とosm_pass2がある
nodes -> ways -> relations
OSMのステップが終わったら、mbtilesへ出力するステップが始まる
この処理はファイルIOが発生しているため時間が掛かる
タイルの品質チェックをする
scpで本番サーバーに転送する
dockerを停止する
ファイルをmvする
dockerを起動する
ダウンロードやビルドの待ち時間で質問yuiseki.icon
tile.openstreetmap.jp
大量のサーバーがある…?yuiseki.icon
サーバーは一台
スペックは?yuiseki.icon
さくらのクラウド
10万円/月の支援
20コア
メモリ64GB
強い……!yuiseki.icon
これが10プロセス走っている
リクエストが来たタイミングで、ラスタータイルのレンダリングをしている
maptiler/tileserver-glは、nginxでプロキシして、各タイルをvarnishでcacheしている
varnishはデフォルト設定
おさらい:mbtilesの実体はsqlite
zxyのインデックス構造になっている
y軸が逆順になっているぞ!
pmtilesのために、/staticはnginxでCORSの設定をしている pmtilesは、クライアントサイドで適切にキャッシュコントロールしてくれる世界観yuiseki.icon
OpenDEMはPlanet規模で作れる?yuiseki.icon
作れるはずだがうまく作れなくて困っている
デプロイは無停止?yuiseki.icon
mbtilesがビルドできたら、ビルドサーバーから配信サーバーに、scpで転送している
転送が終わったら、配信サーバーのdockerプロセスを止めて、ファイルをmvしている
実は毎週一瞬止まっているけど誰も気づかない
配信サーバーとビルドサーバーが別な理由は?yuiseki.icon
配信サーバーでビルドすると、負荷が掛かって遅くなってしまう!
なるほど!yuiseki.icon
tilemakerでも、本質的にOpenMapTiles schemeでplanet規模のmbtilesが作れれば同じはず…?yuiseki.icon 同じはずだけど、tilemakerはplanet規模では試したことがない
最近期待していること
3.14で、OpenStreetMapに近づけようとしている
OpenStreetMap本家により近いStyleの地図をつくれるようになるかもしれない
わかる。Makefile内でDockerを呼ぶのはいいとして、複数のDockerイメージを別のリポジトリで管理しているのと、sql schemeを動的に生成してDBを構築しているのがビビったyuiseki.icon