Slide 1

Slide 1 text

State of the Map Japan 2020 松澤太郎(タイル三兄弟) 日本のCommunity向け タイルサーバの現状

Slide 2

Slide 2 text

自己紹介

Slide 3

Slide 3 text

タイル三兄弟の一味 Twitter: @smellman Georepublic シニアデベロッパ、日本UNIXユーザ会理事、OSGeo日本支部理事、 OpenStreetMap Foundation Japanメンバー React NativeとかRuby on RailsとかPythonとかやってる地理系プログラマー ブレイクコアクラスタ 自己紹介

Slide 4

Slide 4 text

A Location Technology Company

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

Open Source GISを得意とする会社 東京、神戸、ミュンヘンにオフィスがあります 神戸オフィスはちょっとエモいので神戸に来たら遊びに来るといいよ さまざまな国や地域のエンジニアが参加 お仕事待ってます(^^ Georepublic

Slide 8

Slide 8 text

弊社社長が政府CIO補佐官に 政府がハックされる事態に 乞うご期待! News

Slide 9

Slide 9 text

現在のコミュニティ向けサーバについて 新しいコミュニティ向けサーバについて 今日のお題

Slide 10

Slide 10 text

Community 向け地図サーバ

Slide 11

Slide 11 text

OpenStreetMapの国内向けサーバ GMO お名前.com VPSを提供してもらっている 日本の単位でアップデートをかけている 日本以外の地域は国際サーバにProxyをしている 竹島対策なんかもしている tile.openstreetmap.jp

Slide 12

Slide 12 text

インフラがかなり古い Ubuntu 12.04 地図のレンダリングスタイルも古いまま CartoCSSに移行できなかった ラスタタイルのみしか提供ができていない 老朽化

Slide 13

Slide 13 text

新しいコミュニティ向け サーバ

Slide 14

Slide 14 text

さくらインターネットから「さくらのクラウド」月10万円分提供してもらっている 2018年から研究を開始 現在は OSM Japan コミュニティサーバは移行済 tile2.openstreetmap.jp が現在構築中 今日はこれの戦いがメイン 新しいインフラ

Slide 15

Slide 15 text

ベクタータイルへのFirst step ダイレクト配信へのチャレンジ 挫折 新しい希望 現在の体制 戦いの歴史

Slide 16

Slide 16 text

元々仕事で「さくらのVPS」とtileserver-glを使ったベクター/ラスタタイル配信は実現済 その構成をそのまま持ってこれた nginx (フロントエンド) Varnish Cache (キャッシュ) tileserver-gl ベクタータイルのFirst Step

Slide 17

Slide 17 text

日本のエリアだけ作成するのであれば問題はない tile.openstreetmap.jp がProxyとはいえ世界中を対応しているので、ベクタータイルでも やりたい Planet(世界中)をインポートするには最低1TBのストレージが必要 PostgreSQLだけで600GB消費! やりたいこと

Slide 18

Slide 18 text

だったら、インポートしたベクタータイルをPostgreSQLから直接配信すればいいのでは? PostServeというプログラムがOpenMapTilesにあってそれがそのまま使えそう Varnish Cache挟めばよくね? PostgreSQLのデータを差分更新すればよくね? やってみた ダイレクト配信へのチャレンジ

Slide 19

Slide 19 text

構成図 Varnish PostgreSQL Postserve Varnish tileserver-gl tileserver-gl tileserver-gl vector.openstreetmap.jp tile2.openstreetmap.jp nginx OpenMapTiles ࠩ෼ߋ৽

Slide 20

Slide 20 text

1TB+差分更新をしようとしたら差分更新が間に合わないというオチが発生 差分更新がどんどん遅れる 差分更新は日本の単位でもギリギリ では、PostgreSQLを2系統用意してスイッチすればいいのでは? 最低2TB必要 挫折(1)

Slide 21

Slide 21 text

構成図 Varnish PostgreSQL Postserve Varnish tileserver-gl tileserver-gl tileserver-gl vector.openstreetmap.jp tile2.openstreetmap.jp nginx OpenMapTiles PostgreSQL Postserve Πϯϙʔτ

Slide 22

Slide 22 text

2TBにしたらその分マシンのスペックが落ちるので破滅 2TB=66,000円 インポートも終わらんようなスペックになって壊滅した 挫折(2)

Slide 23

Slide 23 text

Varnish + PostServe もおかしい動きをする PostServeが変な動きをしていたが、それは途中でupstreamで修正された そもそもスペックがラスタ配信にとって厳しすぎる その他の挫折

Slide 24

Slide 24 text

試行錯誤しているうちにOpenMapTilesのコントリビュータに 夜中3時の打ち合わせとかも出るようになった 気づいたらPostGISとpgRoutingのDockerにパッチ書いてた pgRoutingの方はメンテナーになっていた(いや、社内だけどな!) がんばったんだよ

Slide 25

Slide 25 text

そもそも配信とタイル作成はサーバを分けるべき では、タイル作成サーバをどうやって調達するべきか… 僕が行き着いた先は… 新しい希望

Slide 26

Slide 26 text

AMD Ryzen

Slide 27

Slide 27 text

Ryzen 5 3400G + Deskmini 300A + 32GB Memory + Intel m2 SSD 1TB 実家に置きました 電源をスマートスピーカー経由で操作可能にした Raspberry Pi 4から「自宅」にVPNを貼り、外出先から「自宅」経由で「実家」のサーバにロ グインできるようにした 誤実家サーバ(何 サーバ組みました(てへ

Slide 28

Slide 28 text

PostgreSQL 9.6, 10, 11, 12, 13(リリース前)をテスト postgresql.conf を読み込むように調整 Mapnikベースのtileliveから、OpenMapTiles Tools 5.3で導入予定のpgqueryに変更 OpenMapTilesの最後のタスクであるベクタータイル作成が2倍以上パフォーマンスアップ チューニング

Slide 29

Slide 29 text

tile2.openstreetmap.jp Spec: 20Core CPU / 64GB Memory / 500GB SSD 現在は日本地域に対応、Planet単位は現在実家サーバで構築中 nginxのログをfluentd+elasticsearch+grafanaで可視化してる 現在の体制

Slide 30

Slide 30 text

構成図 Varnish tileserver-gl tileserver-gl tileserver-gl tile2.openstreetmap.jp nginx OpenMapTiles ࣮Ոαʔό

Slide 31

Slide 31 text

ਐḿͲ͏Ͱ͔͢ʁ

Slide 32

Slide 32 text

だめでした

Slide 33

Slide 33 text

Planetの構築が無事できたら正式公開 失敗してるのでまた一ヶ月ぐらいスケジュールが遅れます(てへ 構築手順などは公開予定 Planetのタイル自体も公開する予定なので自分たちでタイルサーバ作れますよ ログとかはさくらインターネットさんに共有しようと思っている 正式公開

Slide 34

Slide 34 text

ՄࢹԽͯ͠ΔΑʂ

Slide 35

Slide 35 text

とりあえず作ってるけど遅れてるよ>< 日本の範囲だけなら公開できるけどする? Planet単位じゃないと竹島及び北方領土対策できなそうなんだよなぁ(汗 Ryzenの新しいやつでないかなぁ(何 まとめ