Jak skutecznie skalować dane OpenStreetMap

9

Od ponad roku pracuję na wewnętrznym serwerze PostGIS wypełnionym danymi OSM, używanym zarówno do generowania kafelków opartych na Mapniku, jak i geokodowania opartego na Nominatim, aktualizowanych za pomocą replik dziennych. To działa całkiem dobrze.

Ponieważ jednak użycie rośnie w postępie geometrycznym, chciałbym uzyskać lepszą niezawodność i wydajność poprzez dodanie dodatkowych serwerów PostgreSQL. I jestem trochę zagubiony.

Ponieważ PostgreSQL nie wydaje się samodzielnie obsługiwać replikacji, pomyślałbym o użyciu oprogramowania pośredniego, takiego jak PgPool-II, aby utrzymać synchronizację serwerów. Ale obawiam się, że do tego użycia nie byłoby nic innego: bardzo wysoki współczynnik odczytu do zapisu, w którym wszystkie zapisy są wykonywane o tej samej godzinie każdego dnia.

Moje pytania są proste: co byś zrobił, aby synchronizować te serwery? I co się z tym dzieje w OpenStreetMap Foundation, MapQuest, Mapbox lub CloudMade?

Dzięki.

Pierre
źródło

Odpowiedzi:

13

Po pierwsze, Postgres 9 i późniejsze mają wbudowaną obsługę replikacji i właśnie tego my (zespół operacyjny OpenStreetMap) oczekujemy przy użyciu teraz, gdy (około 90 minut temu) działamy na Postgres 9.1 dla głównej bazy danych.

Aby odpowiedzieć na pytanie, co robi OSM, do tej pory nie wykonujemy żadnej replikacji - istnieje jedna duża baza danych Postgres działająca jako główna baza danych za witryną i przechowująca surowe dane. Istnieją następnie dodatkowe bazy danych Postgres + Postgis do renderowania i geokodowania, które są zapełniane przy użyciu zrzutów planety i różnic do aktualizacji.

TomH
źródło
Nie wiedziałem o wbudowanej replikacji Postgres. To prawdopodobnie wykona zadanie. Dzięki!
Pierre
1
Zapoznaj się również z REPMGR ( repmgr.org ), który korzysta z możliwości replikacji strumieniowej Postgres i rozszerza funkcjonalność, aby umożliwić automatyczne przywrócenie urządzenia podrzędnego do urządzenia nadrzędnego.
Shyam Sundar CS
4

Widzę tutaj dwie opcje:

  1. Pula danych - replikacja http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling , chciałbym PG klastra, ponieważ jest synchroniczny i pozwala na równoważenie obciążenia. Możesz także korzystać z architektury master-slave, ale bez puli połączeń i asynchronizacji, wszystko zależy od architektury i szybkości replikacji, którą chcesz osiągnąć. Więcej informacji na temat pgpoll-2 tutaj - małe FAQ ( http: //www.dalibo .org / _media / pgpool.pdf )
  2. WebOptimization - dla Mapquest i OSF, o ile wiem, używają buforowania internetowego na poziomie serwera + pula połączeń. Oznacza to, że nie zażąda od Postgres / Postgis tylu żądań, ile buforuję niektóre dane. 3. Optymalizacje Postgis - głoszenie zapytań na poziomie DB, indeksowanie i normalizacja bazy danych. Wybrałbym „PostGis w akcji” ( http://manning.com/obe/ ), aby dowiedzieć się więcej o typach danych Postgis i dostosować do nich serwer
Alex H.
źródło
1
Dzięki. Pierwsza opcja jest zdecydowanie preferowana. Drugi etap został częściowo wykonany przy użyciu CDN do dostarczania i lokalnej pamięci podręcznej Nginx / Memcached na serwerach frontowych.
Pierre