Москва, часть 3/3: решение по FDW — обогащение ходит в чужую базу, переезд рвёт связь #3053

Open
opened 2026-08-22 11:24:38 +00:00 by lekss361 · 1 comment
Owner

Разбиение #2996 · эпик #2989 · связано с переездом #3029, #3032

Что не так

Четыре тира обогащения идут через SERVER gendesign_remote в базу Site Finder: gendesign_cad_buildings, gendesign_rosreestr_deals, quarter_price_index, gendesign_osm_poi_ekb, gendesign_ekb_districts_geom.

Две отдельные проблемы.

Покрытие Москвы — три тира из четырёх отсутствуют

Замер 2026-08-22:

Источник Москва
rosreestr_deals есть: 273 854 ДКП по 77
cad_buildings нет — данные начинаются с долготы 39.24, Москва на 37.62
osm_poi_ekb нет — 4 845 записей по ЕКБ
ekb_districts_geom нет — 8 районов ЕКБ

Формулировка в #2996 «для Москвы ни одного из них не существует» неточна: ценовой якорь есть, отсутствуют улучшающие тиры. Это и делает запуск на сделках возможным.

Деградация при этом тихая: estimator.py:1318 логирует warning и продолжает считать цену без квартального индекса. Явная деградация — требование части 1 (#3051).

Связь рвётся при переезде

FDW привязан к docker-сети по имени: host=gendesign-postgres. После переезда приложений на Selectel это имя на другом хосте не разрешается, и сделки перестанут приезжать.

Решение принять до окна переезда. Варианты:

  1. Переезжать обоими стеками — FDW остаётся локальным, ничего не меняется. Противоречит #3030, где Beget сохраняет часть сервисов.
  2. Публичный адрес с TLS — тогда connect_timeout=3 поднять до 15, иначе первый же сетевой всплеск оборвёт обогащение. Требует, чтобы Postgres не смотрел в интернет открыто — см. предложение приватного канала между хостами.
  3. Батч-выгрузка — отказ от FDW: периодическая перекачка нужных срезов в базу Меры. Дороже по месту, но разрывает зависимость от живой связи между машинами.

Третий вариант отдельно привлекателен тем, что rosreestr_deals обновляется квартально, а не постоянно — держать ради него живой FDW между двумя площадками избыточно.

Приёмка

  • Решение по трём вариантам принято и зафиксировано в задаче с обоснованием
  • Отсутствие тира для региона даёт явную деградацию в ответе, а не только warning в лог
  • Если выбран вариант 2 — connect_timeout поднят, канал закрыт от интернета
  • Если выбран вариант 3 — определена периодичность выгрузки и её мониторинг
  • Проверено, что после переезда сделки продолжают приезжать
Разбиение #2996 · эпик #2989 · связано с переездом #3029, #3032 ## Что не так Четыре тира обогащения идут через `SERVER gendesign_remote` в базу Site Finder: `gendesign_cad_buildings`, `gendesign_rosreestr_deals`, `quarter_price_index`, `gendesign_osm_poi_ekb`, `gendesign_ekb_districts_geom`. Две отдельные проблемы. ### Покрытие Москвы — три тира из четырёх отсутствуют Замер 2026-08-22: | Источник | Москва | |---|---| | `rosreestr_deals` | **есть**: 273 854 ДКП по 77 | | `cad_buildings` | нет — данные начинаются с долготы 39.24, Москва на 37.62 | | `osm_poi_ekb` | нет — 4 845 записей по ЕКБ | | `ekb_districts_geom` | нет — 8 районов ЕКБ | Формулировка в #2996 «для Москвы ни одного из них не существует» неточна: ценовой якорь есть, отсутствуют улучшающие тиры. Это и делает запуск на сделках возможным. Деградация при этом **тихая**: `estimator.py:1318` логирует warning и продолжает считать цену без квартального индекса. Явная деградация — требование части 1 (#3051). ### Связь рвётся при переезде FDW привязан к docker-сети по имени: `host=gendesign-postgres`. После переезда приложений на Selectel это имя на другом хосте не разрешается, и сделки перестанут приезжать. Решение принять **до окна переезда**. Варианты: 1. **Переезжать обоими стеками** — FDW остаётся локальным, ничего не меняется. Противоречит #3030, где Beget сохраняет часть сервисов. 2. **Публичный адрес с TLS** — тогда `connect_timeout=3` поднять до 15, иначе первый же сетевой всплеск оборвёт обогащение. Требует, чтобы Postgres не смотрел в интернет открыто — см. предложение приватного канала между хостами. 3. **Батч-выгрузка** — отказ от FDW: периодическая перекачка нужных срезов в базу Меры. Дороже по месту, но разрывает зависимость от живой связи между машинами. Третий вариант отдельно привлекателен тем, что `rosreestr_deals` обновляется квартально, а не постоянно — держать ради него живой FDW между двумя площадками избыточно. ## Приёмка - [ ] Решение по трём вариантам принято и зафиксировано в задаче с обоснованием - [ ] Отсутствие тира для региона даёт явную деградацию в ответе, а не только warning в лог - [ ] Если выбран вариант 2 — `connect_timeout` поднят, канал закрыт от интернета - [ ] Если выбран вариант 3 — определена периодичность выгрузки и её мониторинг - [ ] Проверено, что после переезда сделки продолжают приезжать
lekss361 added the
data
priority/p2
scope/backend
scope/db
tradein
labels 2026-08-22 11:24:57 +00:00
Collaborator

Замер после переезда: половина предпосылок задачи испарилась географией — осталась архитектурная половина

Задача писалась до переезда, когда FDW ходил между хостами. Факты 27.08 (Poincare):

  • gendesign_remotehost=gendesign-postgresсоседний контейнер той же docker-сети, не сеть между площадками; connect_timeout=3, use_remote_estimate=true;
  • 5 foreign-таблиц: quarter_price_index, gendesign_rosreestr_deals, gendesign_cad_buildings, gendesign_ekb_districts_geom, gendesign_osm_poi_ekb;
  • латентность: полный count(*) по quarter_price_index (1 986 строк) — 9.5 мс тёплый; это локальный хоп, а не «межхостовая связь».

Что это меняет для решения: аргументы «латентность/доступность чужого хоста» сняты фактом совместного размещения — cutover-раннбук (#3057) уже вывел «ноль клиентских бэкендов» как критерий, то есть обе БД мигрируют вместе by construction. Остаётся чистая архитектурная половина: связность схем (МЕРА зависит от структуры таблиц ПТИЦЫ; C3-грабли «DROP MV CASCADE теряет FDW-гранты» из этой же серии) и вопрос, где жить московским данным (912 тыс. сделок 77-региона — в ПТИЦА-базу с FDW-доступом или в МЕРА-базу напрямую).

Решение по-прежнему твоё; из замера следует только, что принимать его можно без давления производительности — текущая схема на общем хосте работает в миллисекундах.

## Замер после переезда: половина предпосылок задачи испарилась географией — осталась архитектурная половина Задача писалась до переезда, когда FDW ходил между хостами. Факты 27.08 (Poincare): - `gendesign_remote` → `host=gendesign-postgres` — **соседний контейнер той же docker-сети**, не сеть между площадками; `connect_timeout=3`, `use_remote_estimate=true`; - 5 foreign-таблиц: `quarter_price_index`, `gendesign_rosreestr_deals`, `gendesign_cad_buildings`, `gendesign_ekb_districts_geom`, `gendesign_osm_poi_ekb`; - латентность: полный `count(*)` по `quarter_price_index` (1 986 строк) — **9.5 мс** тёплый; это локальный хоп, а не «межхостовая связь». **Что это меняет для решения**: аргументы «латентность/доступность чужого хоста» сняты фактом совместного размещения — cutover-раннбук (#3057) уже вывел «ноль клиентских бэкендов» как критерий, то есть обе БД мигрируют вместе by construction. Остаётся чистая архитектурная половина: связность схем (МЕРА зависит от структуры таблиц ПТИЦЫ; C3-грабли «DROP MV CASCADE теряет FDW-гранты» из этой же серии) и вопрос, где жить московским данным (912 тыс. сделок 77-региона — в ПТИЦА-базу с FDW-доступом или в МЕРА-базу напрямую). Решение по-прежнему твоё; из замера следует только, что принимать его можно без давления производительности — текущая схема на общем хосте работает в миллисекундах.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#3053
No description provided.