Size: a a a

2020 June 15

RT

Renat Tugushev in pro.jvm
Ильдар Садыков
Ребят, может кто сталкивался с разработкой сервиса под след. требования:
1. Декларативно уметь описывать хранимые сущности - тут про метаданные под разные структуры сущностей
2. Уметь создавать/изменять/искать сущности по REST методам
Хочется без доработок кода уметь работать по API с новыми сущностями.

Технические заметки:
1. Ограничения в БД - круто вписывается под эти требования MongoDB, но у нас только PostgreSQL с должным уровнем администрирования.
2. Рассматривали три варианта (остановились на первом, п. 2.1):
      2.1. Генерить таблички и их колонки из кода во время выполнения сервиса, жить будем уже без JPA.
      2.2. Одна партиционированная таблица с колонками под тип сущности и JSONB под данные.
      2.3. Заюзаем фиксированный набор табличек с колонками типа value1, value2 и т.д.
Если речь о клиенте, мы вот как сделали: генерим клиент по сваггеру в отдельную либу, xml-конфигом на гибернейте описываем сущности - чтобы не трогать сгенерированный код, тем же гибернейтом генерим таблицы и потом уже DDL снимаем с них. Таким образом загружаем к себе всё, что приходит из сервиса as is, типа в буферную область, ну а дальше уже раскладываем так, как нам нужно.
источник

RT

Renat Tugushev in pro.jvm
буферная область лежит в отдельной схеме и при обновлении просто грохается целиком вся схема и накатывается новая
источник

RT

Renat Tugushev in pro.jvm
наличие ключей тут уже необязательно - главное данные получить
источник

ИС

Ильдар Садыков... in pro.jvm
Renat Tugushev
Если речь о клиенте, мы вот как сделали: генерим клиент по сваггеру в отдельную либу, xml-конфигом на гибернейте описываем сущности - чтобы не трогать сгенерированный код, тем же гибернейтом генерим таблицы и потом уже DDL снимаем с них. Таким образом загружаем к себе всё, что приходит из сервиса as is, типа в буферную область, ну а дальше уже раскладываем так, как нам нужно.
крутой получился клиент! Спасибо!
У нас задача в рантайме уметь создавать/изменять таблички под новые сущности, на стороне сервера.
источник

RT

Renat Tugushev in pro.jvm
то есть у вас в рантайме меняется протокол? Ну то есть может прийти что-то, чего раньше не было и это нужно просто положить? Логику работы с этими данными всё равно в приложении придётся как-то допиливать...
источник

ИС

Ильдар Садыков... in pro.jvm
у нас сервис под разные сущности, которые можно складывать (простые валидации, на заполнение, по регулярке) туда и получать по id (возможно и по параметрам запроса). Кейс: сотрудник указывает набор полей под новую сущность в админке. Сервис это применяет над БД в виде DDL создания таблицы. API начинает принимать запросы с указание этой сущности и сохраняет в соответсующую табличку. Так же и запросы на поиск отрабатывают, всегда передаётся тип сущности для определения таблички откуда получать данные.
источник

T

Timur in pro.jvm
Ильдар Садыков
у нас сервис под разные сущности, которые можно складывать (простые валидации, на заполнение, по регулярке) туда и получать по id (возможно и по параметрам запроса). Кейс: сотрудник указывает набор полей под новую сущность в админке. Сервис это применяет над БД в виде DDL создания таблицы. API начинает принимать запросы с указание этой сущности и сохраняет в соответсующую табличку. Так же и запросы на поиск отрабатывают, всегда передаётся тип сущности для определения таблички откуда получать данные.
источник

T

Timur in pro.jvm
в рантайме генерить миграции можно через это
источник

ИС

Ильдар Садыков... in pro.jvm
спасибо! гляну
источник

IK

Igor Komarov in pro.jvm
Подскажите пожалуйста, если кто-то делал ротацию прокси под каждый запрос на OkHttp 4:

Первые несколько запросов (1-2, иногда чуть больше) все окей, ProxySelector :: select отрабатывает, выбирает новую прокси, и все хорошо.

Но дальше запросы продолжают идти, а ProxySelector :: select не вызывается.

Мне очень критично ротирование прокси, поэтому прошу вас помочь ;)
источник

AM

Aleksander Melnichni... in pro.jvm
Igor Komarov
Подскажите пожалуйста, если кто-то делал ротацию прокси под каждый запрос на OkHttp 4:

Первые несколько запросов (1-2, иногда чуть больше) все окей, ProxySelector :: select отрабатывает, выбирает новую прокси, и все хорошо.

Но дальше запросы продолжают идти, а ProxySelector :: select не вызывается.

Мне очень критично ротирование прокси, поэтому прошу вас помочь ;)
Дебажить. А вообще, я делал просто на каждую прокси свой okHttpClient в свое время и сам ротировал в сервисе
источник

AM

Aleksander Melnichni... in pro.jvm
Но это было на 3-ем
источник

IK

Igor Komarov in pro.jvm
Aleksander Melnichnikov
Дебажить. А вообще, я делал просто на каждую прокси свой okHttpClient в свое время и сам ротировал в сервисе
Мне 5+к клиентов делать не вариант.
источник

AM

Aleksander Melnichni... in pro.jvm
Igor Komarov
Мне 5+к клиентов делать не вариант.
Кажется, что он разработан не для такого использования. И установив один раз с прокси конекшен запоминает
источник

AM

Aleksander Melnichni... in pro.jvm
1-3 заходит возможно потому, что ты в параллель очень быстро зовешь
источник

AM

Aleksander Melnichni... in pro.jvm
И он не успевает в кеш положить и там гонка
источник

AM

Aleksander Melnichni... in pro.jvm
Ну опять же - возьми поставь дебаг - да отдебажь эту либу.
источник

IK

Igor Komarov in pro.jvm
Aleksander Melnichnikov
Кажется, что он разработан не для такого использования. И установив один раз с прокси конекшен запоминает
А как можно достичь подобного поведения?
источник

AM

Aleksander Melnichni... in pro.jvm
Igor Komarov
А как можно достичь подобного поведения?
Как я сказал - сделать 5к клиентов. Либо расширить поведение HTTP клиента. Отдебажив  и изменив код, например отнаследовавшись.
источник

IK

Igor Komarov in pro.jvm
Aleksander Melnichnikov
Как я сказал - сделать 5к клиентов. Либо расширить поведение HTTP клиента. Отдебажив  и изменив код, например отнаследовавшись.
Проблема была в keep-alive в пуле подключений. По-умолчанию стоит 5 минут, а я думал секунд ;) Уменьшил до адекватного значения – получил нужный мне результат.
источник