Ответ
Горизонтальное масштабирование (шардинг) — разделение данных на части (шарды) и распределение их по разным серверам. Пример с PostgreSQL:
// Упрощенный пример шардинга по модулю
func getShard(userID int) string {
shards := []string{"db1:5432", "db2:5432", "db3:5432"}
return shards[userID % len(shards)]
}
Вертикальное масштабирование — увеличение ресурсов сервера (CPU, RAM, диски). Подходит для нагрузок, где шардинг избыточен.
Репликация — master-slave архитектура для чтения/записи. Например, в MongoDB:
// Подключение к репликасету
client, err := mongo.Connect(ctx, options.Client().ApplyURI(
"mongodb://primary:27017,secondary1:27017,secondary2:27017/?replicaSet=myReplicaSet",
))
Кэширование (Redis/Memcached) и read-only реплики снижают нагрузку на master.
Для OLTP-нагрузок часто комбинируют подходы: шардинг + репликация.