diff --git a/questions/databases.md b/questions/databases.md index fe56c1b..826845d 100644 --- a/questions/databases.md +++ b/questions/databases.md @@ -66,4 +66,17 @@ SHOW SLAVE STATUSG Prometheus использует TSDB (time series database). + + +3. Что такое VACUUM в PostgreSQL? + +
+ Ответ + +VACUUM высвобождает пространство, занимаемое «мёртвыми» кортежами. При обычных операциях PostgreSQL кортежи, удалённые или устаревшие в результате обновления, физически не удаляются из таблицы; они сохраняются в ней, пока не будет выполнена команда VACUUM. Таким образом, периодически необходимо выполнять VACUUM, особенно для часто изменяемых таблиц. + +Без параметра команда VACUUM обрабатывает все таблицы в текущей базе данных, которые может очистить текущий пользователь. Если в параметре передаётся имя таблицы, VACUUM обрабатывает только эту таблицу. + +Простая команда VACUUM (без FULL) только высвобождает пространство и делает его доступным для повторного использования. Эта форма команды может работать параллельно с обычными операциями чтения и записи таблицы, так она не требует исключительной блокировки. Однако освобождённое место не возвращается операционной системе (в большинстве случаев); оно просто остаётся доступным для размещения данных этой же таблицы. VACUUM FULL переписывает всё содержимое таблицы в новый файл на диске, не содержащий ничего лишнего, что позволяет возвратить неиспользованное пространство операционной системе. Эта форма работает намного медленнее и запрашивает исключительную блокировку для каждой обрабатываемой таблицы. +
\ No newline at end of file diff --git a/questions/terraform.md b/questions/terraform.md index 2d5f0b8..88b613d 100644 --- a/questions/terraform.md +++ b/questions/terraform.md @@ -25,15 +25,17 @@ Зависит от требованиям к хранению состояния. -- AWS S3 — Standard (с locking через DynamoDB). Сохраняет состояние в виде заданного ключа в заданном сегменте на Amazon S3. Этот бэкэнд также поддерживает блокировку состояния и проверку согласованности через DynamoDB. +- AWS S3 — Standard (с блокировкой через DynamoDB). Сохраняет состояние в виде заданного ключа в заданном сегменте на Amazon S3. Этот бэкэнд также поддерживает блокировку состояния и проверку согласованности через DynamoDB. - terraform enterprise — Standard (без блокировки). -- etcd — Standard (без лока). Сохраняет состояние в etcd 2.x по заданному пути. +- etcd — Standard (без блокировки). Сохраняет состояние в etcd 2.x по заданному пути. - etcdv3 — Standard (с блокировкой). Сохраняет состояние в хранилище etcd в виде K/V с заданным префиксом. -- gcs — Standard (с локом). Сохраняет состояние как объект в настраиваемом префиксе в заданном сегменте в Google Cloud Storage (GCS). Этот бэкэнд также поддерживает блокировку состояния. +- gcs — Standard (с блокировкой). Сохраняет состояние как объект в настраиваемом префиксе в заданном сегменте в Google Cloud Storage (GCS). Этот бэкэнд также поддерживает блокировку состояния. + +- Gitlab Terraform state (с блокировкой). Хранит состояние в Gitlab Terraform state хранилище, используя HTTP протокол и права Gitlab для доступа. Существуют также и другие Backend для Terraform. @@ -131,3 +133,51 @@ echo 'yamldecode(file("filename.yaml"))' | terraform console [Workspaces](https://developer.hashicorp.com/terraform/language/state/workspaces#using-workspaces) в Terraform - это возможность управления state файлами. Workspace содержит все что необходимо для управления набором инфраструктуры, а отдельные рабочие области функционируют как полностью отдельные рабочие каталоги. С помощью Workspaces возможно управлять несколькими средами инфраструктуры. + +11. Для чего нужен terragrunt? + +
+ Ответ + +Terragrunt — это обертка для Terraform, позволяющая решать проблемы, связанные с масштабированием и переиспользованием кода для настройки инфраструктуры. Он позволяет повторно использовать конфигурационные параметры и поддерживает многоуровневые конфигурации и зависимости. + +
+ +12. Чем отличается `count` от `for_each`? + +
+ Ответ + +`count` — это итерация по списку, который содержит целочисленные элементы, `for_each` — это итерация по корневым ключам словаря, которые могут содержать данные любого типа. + +``` +resource "aws_instance" "web" { + count = 3 + + instance_type = "t2.micro" + ami = data.aws_ami.debian_buster.id + tags = { + Name = "WebServer-${count.index + 1}" + } +} +``` +Описание ресурса выше создаст 3 одинаковых EC2 инстанса, изменив имя с указанием номера текущего состояния счётчика. `count` начинает отсчет с 0, поэтому чтобы 1 EC2 инстанс был с индексом 1 в имени ему прибавили `1`. + +``` +resource "aws_instance" "server" { + for_each = { + web = { type = "t2.micro", public_ip = true }, + db = { type = "m5.large", public_ip = false } + } + + instance_type = each.value["type"] + ami = data.aws_ami.debian_buster.id + associate_public_ip_address = each.value["public_ip"] + tags = { + Name = "each.key" + } +} +``` +Ресурс выше создаст 2 EC2 инстанса с итерацией по ключам `each.key` и использовав значения вложенных словарей в конфигурации EC2. + +