09 ноября 2022

Binary grep

В базе материализовалась запись, которая приводит к ошибкам вида org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0xed 0x70 0x69. Возникает такое когда кто-то сделал изменение в таблице, но при этом соединение с базой не было настроено на UTF-8.

По прошлому опыту, данные вставили в кодировке latin1 и там будут символы вроде "í", "é", "á" или им подобные. Можно записать байтики в файлик и использовать его как паттерн для grep, но захотелось возможности грепать сразу в виде байтов.

07 ноября 2022

Spinnaker - день первый

Первый раз я узнал про Spinnaker от коллеги года четыре назад. Тогда я немного покликал по интерфейсу, посмотрел архитектурную диаграмму и успешно забыл про него. Позже он еще несколько раз всплывал в "байках" с полей от коллег, но пересечься более не довелось.

Недели две назад Spinnaker снова появился на радаре в виде презентации от заказчика и вопросом стоит ли его использовать. Нутро подсказывало что не стоит с ним связываться, но четких аргументов я сформулировать тогда не смог т.к. практического опыта не было. Ради обоснованных аргументов я и решился на близкое знакомство со Spinnaker в рамках прошедших выходных.

30 октября 2022

Подключение к Kafka в изолированном окружении

Есть изолированное от внешнего мира окружение в GCP с кластером Kafka, который живет в GKE. Kafka используется как внутри GKE кластера, так и виртуальными машинами, которым Kafka выставлена через внутренний балансировщик. Часть пользователей не приемлют использование консольных команд чтобы подключиться к Kafka и хотят пользоваться привычными им инструментами вроде Offset Explorer и ему подобными.

Итого у нас есть три брокера Kafka, которые доступны внутри кластера как kafka-0.kafka-headless.default.svc.cluster.local:9092, kafka-1.kafka-headless.default.svc.cluster.local:9092 и kafka-2.kafka-headless.default.svc.cluster.local:9092. Для виртуальных машин создано три балансировщика с адресами 172.16.0.16:19092, 172.16.0.17:19092 и 172.16.0.18:19092.

Если просто пробросить порты на локальную машину, то ничего работать не будет, т.к. после подключения к Kafka брокеру клиент получит метаданные в которых будет фигурировать Kafka advertised listeners и клиент будет пытаться подключиться к ним вместо работы с проброшенными портами.

05 октября 2022

Лимиты памяти в LXC для CGroupV2

С неделю назад мигрировал ряд сервисов на базе контейнеров LXC в облако. Чтобы не переплачивать за простаивающие ресурсы в облаке взял в два раза меньше памяти и процессорных ядер. Поскольку нагрузка на сервисы минимальная, а памяти на исходном сервере было с запасом, то лимиты по памяти и ядрам не были настроены, но в условиях потенциальной нехватки ресурсов нужно решить проблему "шумного соседа" (когда один сервис может исчерпать ресурсы всего сервера и привести к нестабильной работе или отказу в обслуживании у остальных сервисов).

Для начала настроил сколько RAM и SWAP может использовать каждый из контейнеров.

25 сентября 2022

Первые впечатления от Backup for GKE

В рамках ликбеза потрогал немного Backup for GKE чтобы понять чем он отличается от привычного Velero. На данный момент времени он в preview и часть выводов может стать неактуальными в будущем.

Первое что бросается в глаза это его ценообразование - оно зависит не только от объема данных, которые попадают в бэкап, но и от количества подов, которые бэкапятся. Т.е. если у вас условно в среднем 30 подов в месяц, то вам нужно заплатить около 30$ за backup management, плюс стоимость хранения данных. В этом плане Velero выигрывает, т.к. там в основном стоимость только за хранение данных.

Далее его региональная доступность - сейчас он поддерживается только в некоторых регионах, но при этом создать бэкапить дает кластера и в неподдерживаемых регионах. Но вот восстановить бэкап в тот же кластер уже не получится - обязательно проверяйте список поддерживаемых регионов через gcloud beta container backup-restore locations list.

22 сентября 2022

Сравнение gcloud storage и gsutil

Недавно команда gcloud storage вышла в GA и я решил проверить насколько ее производительность отличается от gsutil. Для тестов нашелся GCS бакет с примерно 21k мелких объектов (средний размер 24kB), которые сжаты gzip.

Запускать тесты буду в e2-standard-2 VM (2 vCPU / 8 GB). Текущая версия Google SDK:

$ gcloud version
Google Cloud SDK 403.0.0
alpha 2022.09.20
beta 2022.09.20
bq 2.0.77
bundled-python3-unix 3.9.12
core 2022.09.20
gcloud-crc32c 1.0.0
gsutil 5.13

Чтобы не зависеть от скорости работы блочного устройства тесты буду выполнять на ramfs.

$ sudo mkdir /mnt/ramdisk
$ sudo mount -t ramfs none /mnt/ramdisk
$ sudo chmod 777 /mnt/ramdisk
$ cd /mnt/ramdisk
$ mkdir test1 test2

Копирование данных через gcloud storage cp

$ cd /mnt/ramdisk/test1/
$ time gcloud storage cp -r gs://BUCKET/SAMPLE/DATA/* .

[skipped output]

  Completed files 21000/21000 | 448.9MiB/448.9MiB | 1.5MiB/s

Average throughput: 1.5MiB/s

real    4m54.065s
user    9m4.797s
sys     0m30.854s

Копирование данных через gsutil cp (используется многопоточность)

$ cd /mnt/ramdisk/test2/
$ time gsutil -m cp -r gs://BUCKET/SAMPLE/DATA/* .

[skipped output]

Operation completed over 21.0k objects/448.9 MiB.

real    5m58.861s
user    10m8.143s
sys     1m18.350s

В моем тесте копирование мелких объектов c использованием gcloud storage быстрее gsutil примерно на 18%. Пока что gcloud storage не заменит полностью gsutil, но для простых операций стоит использовать её.


Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

25 августа 2022

Раздельный SSID для Huawei LG8245X6-50

С некоторых пор домашний интернет обеспечивает роутер Huawei LG8245X6-50 с поддержкой Wifi 6 (802.11ax). В комнатах, которые прилегают к шкафу с роутером, интернет работает стабильно, но в дальней комнате из-за обилия стен сигнал был в районе от -75dBm до -85dBm. В таких условиях ни о какой надёжной работе сети говорить не приходится (считается что приемлемый уровень сигнала должен в районе -65dBm).

Из коробки роутер идет с одинаковым SSID для 2.4GHz и 5GHz что с одной стороны должно упрощать жизнь, если 5Ghz не "добивает", но 2.4GHz работает нормально (5GHz хуже "пробивает" стены, особенно если они из железобетона). Но в моём случае в зоне слабого сигнала клиенты постоянно "скачут" с 2.4GHz на 5GHz и обратно.

Чтобы этого не происходило нужно присвоить разные SSID для разных частот. И тут кроется проблема с Huawei LG8245X6-50 - админка не дает переименовать SSID для сети 5Ghz. Поле имени копирует настройки с 2.4GHz и не даёт сменить отдельно. Чтобы обойти это ограничение достаточно завести по дополнительному SSID для 2.4GHz и 5GHz с разными именами, а после деактивировать изначальный SSID.


Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.