OpenStreetMapデータを効率的にスケールアウトする方法


9

1年以上の間、OSMデータで満たされた社内PostGISサーバーを実行しています。これは、Mapnikベースのタイル生成とNominatimベースのジオコーディングの両方に使用され、日ごとの複製で更新されます。これはかなりうまくいきます。

ただし、使用量が飛躍的に増加しているので、PostgreSQLサーバーを追加して、信頼性とパフォーマンスを向上させたいと考えています。そして、私はちょっと迷っています。

PostgreSQLはそれ自体ではレプリケーションを処理しないようなので、PgPool-IIなどのミドルウェアを使用して、サーバーの同期を維持することを検討します。しかし、私はそれがこの使用法に必要なものに過ぎないと思います:すべての書き込みが毎日正確に同じ時間に行われる非常に高い読み取りと書き込みの比率。

私の質問は単純です。これらのサーバーの同期を保つにはどうしますか?そして、OpenStreetMap Foundation、MapQuest、Mapbox、またはCloudMadeでこれのために何が行われますか?

ありがとう。

回答:


13

まず、Postgres 9以降には組み込みのレプリケーションサポートがあり、これが私たち(OpenStreetMap運用チーム)がメインデータベースのPostgres 9.1で実行している(約90分前の)現在の使用を検討しているものです。

OSMが何をするのかという質問に答えるために、現在のところ、いかなる種類のレプリケーションも行っていません。Webサイトの背後でマスターデータベースとして機能し、生データを保持する1つの大きなPostgresデータベースがあります。次に、レンダリング用とジオコーディング用の2次Postgres + Postgisデータベースがあり、どちらも惑星のダンプとdiffを使用して更新されます。


Postgresの組み込みレプリケーションについては知りませんでした。これはおそらく仕事をします。ありがとう!
ピエール

1
また、Postgresのストリーミングレプリケーション機能を使用し、スレーブをマスターに自動的にフォールバックできるように機能を拡張するREPMGR(repmgr.org)をチェックアウトします。
Shyam Sundar CS

4

ここには2つのオプションがあります。

  1. データベースプーリング-レプリケーションhttp://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling、私はそれが同期であり、負荷分散を可能にするので、PGクラスターです。マスター-スレーブアーキテクチャを使用することもできますが、接続プーリングと非同期を使用しない場合、それはすべて、達成したいアーキテクチャとレプリケーション速度に依存します。pgpol-2の詳細はこちら-small FAQ(http://www.dalibo .org / _media / pgpool.pdf
  2. WebOptimization-私が知る限り、MapquestおよびOSFの場合、サーバーレベル+接続プールでWebキャッシュを使用します。つまり、Postgres / Postgisからのリクエストでは、データをキャッシュするほど多くのリクエストは行われません。3.Postgisの最適化-DBレベルでのクエリの説教、インデックス付け、データベースの正規化。「PostGis in action」(http://manning.com/obe/)でpostgis データ型の詳細を学び、サーバーをそれらに適合させる

1
ありがとう。最初のオプションは間違いなく推奨されます。2番目は部分的に行われ、配信にはCDNを使用し、フロントサーバーではローカルのNginx / Memcachedキャッシュを使用します。
ピエール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.