Как несколько серверов работают с базами данных? [закрыто]

Я не очень много знаю о серверах, но знаю, что есть много способов повысить производительность работы веб-приложений с точки зрения оборудования.

Например, начиная с одного сервера, вы можете:

  • Переместить базу данных на другой сервер.
  • Перемещение статических файлов в CDN
  • Использование нескольких веб-серверов за балансировщиком нагрузки.

Но как вы можете масштабировать сервер базы данных? Можно ли иметь несколько серверов с одной и той же базой данных? Если да, то как это обычно работает?

Я понимаю, как работает балансировщик нагрузки / несколько веб-серверов, но можно ли применить тот же подход к серверам баз данных?

1
задан 16 February 2012 в 00:27
3 ответа

This is a very broad question.

The general answer is that there is a number of ways this can be done; two of the main ones are these:

  • Replication
  • Clustering

Replication is where the database is copied from one machine to another. Using this method, you should in theory at least have two databases that are identical. With replicated databases, you can query any of them for your data; you only have to be careful with writes so that they don't conflict between servers.

Clustering uses a shared data store and a database server that recognizes the data store is shared and handles it properly. It also suggests a clustered file system such as GFS.

4
ответ дан 3 December 2019 в 16:22

Это действительно зависит от технологии базы данных, но обычно это достигается с помощью сегментирования, репликации мастер-мастер или репликации мастер-подчиненный, при этом все записи идут на мастера, а все чтения - от раба (ов).

Есть много других способов, но они наиболее распространены.

2
ответ дан 3 December 2019 в 16:22

Вы можете выполнить некоторую балансировку нагрузки; но это быстро становится сложным. Я обнаружил, что наиболее полезно знать, какие операции обычно выполняет ваша база данных. Если у вас есть сайт; обычно его читает. Для отслеживания приложений (например) у вас будет много записей.

Если у вас много операций чтения, вы можете создать множество зеркал только для чтения, поставить на передний план балансировщик нагрузки, и все готово. Каждый запрос сбалансирован, поэтому каждый запрос получает максимальное количество ресурсов.

Для систем с большим объемом записи это немного сложнее, потому что, когда вы добавляете новый сервер, они должны знать, что делает другой - здесь вступает в силу блокировка. Если у вас есть серверы A и B; A получает запрос на обновление или вставку, прежде чем он сможет изменить таблицу, он должен сказать: «Эй, Б, убедитесь, что вы не меняете эту таблицу, я собираюсь изменить ее» (блокировка), а затем фиксирует изменение. Все это происходит по сети (обычно), что означает, что это может быть медленным (мс, а не мкс), что может снизить производительность. По мере добавления серверов производительность падает. С A, B и C; Перед фиксацией A должен поговорить с B и C.

Надеюсь, это послужит введением в масштабирование базы данных. В настоящее время я изучаю предложения по балансировке нагрузки Citrix Netscaler DB, которые могут помочь с этими вопросами; Я бы порекомендовал посмотреть хотя бы их документацию по теме :)

3
ответ дан 3 December 2019 в 16:22

Теги

Похожие вопросы