Я исхожу с точки зрения разработки приложений (моя повседневная работа), а не с точки зрения инфраструктуры или операций, поэтому, если это совершенно глупый вопрос, дайте мне знать!
У нас есть прокси перед нашими серверами приложений, и это обычно хорошо нам помогает. Этот (аппаратный / программный) прокси-сервер предоставляет абстрактную конечную точку (в дополнение к другим службам, таким как балансировка / распределение нагрузки), так что наши клиенты всегда знают, как подключиться.
Есть ли у кого-нибудь опыт установки прокси между серверами приложений и базой данных?
Похоже, что кто-то должен это делать, особенно в сфере хостинга или облачного пространства, но когда я разговаривал с нашими (корпоративными) командами по инфраструктуре, они просто говорят «нет», хотя я все еще пытаюсь понять Зачем.
Я не понимаю, вызывает ли это из-за дополнительного уровня абстракции перед базой данных функциональные проблемы или проблемы с производительностью или просто затрудняет устранение неполадок, когда что-то идет не так.
Может ли кто-нибудь поделиться мыслями, опытом или ресурсами в этой области? Буду весьма признателен за это!
Спасибо!
Z
Основные проблемы:
Соединения с базой данных между серверами приложений и бэкэндами намного более постоянны, поэтому балансировка нагрузки затруднена.
Прокси-серверы должны озвучивать протокол. Там есть масса HTTP-прокси. Попробуйте получить, например, протокол SQL Server. Нет необходимости, нет рынка - нет продукта.
Наконец, несмотря на то, что такое серверы SQL, кэширование невозможно. Не обошлось и без протокола аннулирования результатов и т. Д., Который не является частью какой-либо реализации SQL. Нет тега «если изменено с». Следовательно, вы либо ничего не получите, либо имеете дело с устаревшими данными - и то, и другое неприемлемо на этом уровне.
Мне также нравится идея TomTom DNS. Короткие TTL, и это проще, чем вы делаете.
Но вы, безусловно, можете запустить прокси перед своими базами данных. Например, SQLProxy и HAProxy могут это сделать. Но опять же, если вас беспокоит не балансировка нагрузки или разделение операций чтения и записи, зачем добавлять этот дополнительный уровень задержки (к и от прокси), когда вы могли бы просто сделать это с помощью CNAME - и я думаю, что аргумент именно тот ваши ребята из Ops / Systems рассмотрят.
Я понимаю, что это старый вопрос, но в настоящее время есть по крайней мере пара достойных прокси-продуктов для баз данных на выбор. То есть, если вы используете MariaDB или MySQL:
У меня есть только опыт использования MaxScale, и я чувствую, что могу порекомендовать его на данный момент. MaxScale работает очень хорошо, например. с кластерами Galera. Потребовалось некоторое время, чтобы созреть, возможно потому, что это относительно новая концепция, разработанная с нуля, и она решает некоторые нетривиальные проблемы.
Следует отметить, что у MaxScale есть специальная лицензия без открытого исходного кода - BSL. (ProxySQL, с другой стороны, находится под лицензией GPL.)
Я мог бы также упомянуть HAProxy который не является прокси-сервером для баз данных, но, тем не менее, широко успешно используется в качестве прокси-сервера для баз данных как для MariaDB / MySQL, так и для PostgreSQL.