У нас есть приложение, состоящее из микросервисов, подключенных к одному и тому же экземпляру Percona DB. В настоящее время это только один экземпляр с 16 ядрами/32 ГБ памяти без репликации. Одна из наших проблем заключается в том, что иногда один из наших микросервисов вызывает такую высокую нагрузку на базу данных (даже просто чтение), что делает все микросервисы непригодными для использования.
Думаем над созданием кластера Percona из трех нод с выбором нод для каждого микросервиса. Службы, которые в основном «пишут», будут подключаться к одному экземпляру, а остальные — к двум другим экземплярам. Таким образом, если какой-то микросервис вызывает высокую нагрузку при чтении, он не должен полностью перегружать нашу инфраструктуру.
Мои вопросы:
- Это вообще хорошая идея? Не лучше ли позволить ProxySQL разделять трафик? ProxySQL, возможно, означает отсутствие изоляции.
- Должны ли мы предпочесть иметь больше экземпляров с меньшим количеством ЦП или, скорее, меньше экземпляров с большим ЦП? Наличие большего количества экземпляров означало бы большую изоляцию для запуска микросервисов в случае высокой нагрузки.
- Это хорошая идея иметь узлы с разными процессорами? Например, пусть «пишущий экземпляр» имеет больше ЦП по сравнению с «читающим экземпляром».
- Если мы направляем микросервисы на «их экземпляр Percona», можем ли мы по-прежнему иметь какую-то HA, когда их экземпляр полностью умирает?
Примечание. Мы, вероятно, будем использовать Percona XtraDB для развертывания по щелчку в GCE: https://console.cloud.google.com/marketplace/details/click-to-deploy-images/percona?project=goout.-cloud&folder&organizationId=74390800864
show engine innodb status\G
, когда запрос убивает сервер? На мой взгляд, вашим приоритетом должен быть поиск запроса и его оптимизация, а не думать о кластерах (пока). - person fancyPants   schedule 26.07.2018