Yet another senior pomidor (by @gmelikov) – Telegram
Yet another senior pomidor (by @gmelikov)
175 subscribers
44 photos
6 videos
46 links
Околоайтишные страсти с уклоном в инфровую разработку и sci-fi.
Ведёт @gmelikov
Download Telegram
Уважаемые хардкорщики, приглашаем вас на чисто технический оффлайн митап (+ есть онлайн), приходите! Увидимся!
VK Tech приглашает на InfraDevMeetup, посвященный разработке и эксплуатации инфраструктурных платформ, от разработчиков инфраструктурных сервисов.

Поговорим про устройство среднестатистических SDS и их выбор/разработку, в чём проблема «отношений» RabbitMQ и SDN Neutron, как можно спасти данные из аварийного Ceph и как построить датацентр для авто-тестов.

Спикеры:
☁️Василий Степанов, руководитель команды разработки Storage, VK Cloud.
☁️Артемий Капитула, техлид группы разработки систем хранения, Wildberries.
☁️Александр Шишебаров, ведущий разработчик, Selectel.
☁️Александр Крымов, старший разработчик, Kaspersky.
Подробнее о докладах читайте на странице мероприятия.

Когда: 26 марта, с 18:00 до 23:00
Где: Москва, Ленинградский 70, БЦ Алкон, офис VK Tech

Приходите на встречу или участвуйте онлайн.
Зарегистрироваться.
🔥31👍1
Считаю, что только в таких крутых позах и надо рассказывать зачем нужны оверлейные сети в датацентрах 😎
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣8💯3😁21
Капитанства пост - забудьте про md5, используйте xxh3 если вам не нужна криптостойкость, приемлемый дефолт - sha256.

Наивный тест на скорость "дефолтных" хешей из питона, по 10МБ рандома, псевдо-методика тут . Да, если не можете притащить сторонние либы - sha256 наше всё.
👀53💅1
🤝31😁1😢1🥴1
Попробуем формат мини-постмортемов.

Вчера на полдня ложился Интернет Google Cloud (GCP):
the issue occurred due to an invalid automated quota update to our API management system which was distributed globally, causing external API requests to be rejected. To recover we bypassed the offending quota check, which allowed recovery in most regions within 2 hours. However, the quota policy database in us-central1 became overloaded, resulting in much longer recovery in that region. Several products had moderate residual impact (e.g. backlogs) for up to an hour after the primary issue was mitigated and a small number recovering after that.

Давайте попробуем порассуждать что же произошло на основе публичных данных:
- Первопричина - в quota api гугла прилетели некорректные данные (извне/изнутри/при обновлении), которые по цепочке вниз разломали всё остальное.
- В любой инфраструктуре есть "фасад" с IAMом, квотами и другими "бизнесовыми" сервисами. Обычно аварии, связанные с ними должны иметь аффект только на этот самый "фасад", и аффектить максимум controlplane, т.е. возможность управлять сущностями.
- Но, судя по аффекту, некорректные метаданные всё же добрались до dataplane и успешно сломали и сами инфраструктурные сервисы (минимум их часть)

Сами Google сделали такие выводы:
- Prevent our API management platform from failing due to invalid or corrupt data.
- Prevent metadata from propagating globally without appropriate protection, testing and monitoring in place.
- Improve system error handling and comprehensive testing for handling of invalid data.

Переводя для себя: валидация входящих данных должна быть строжайшей, а всё, что разъезжается глобально - должно разъезжаться строго поэтапно, чтобы не накрыть всю систему разом. Ну и частные ошибки надо уметь игнорировать.

Лично для меня вывод - защититься от такого гарантированно сложно, но если строить обработку ошибок не от частного (отдельные обработчики на каждую), а от общего (не важно какая ошибка произошла), и при этом уметь обработать ошибку по конкретной сущности отдельно - такого можно избегать. Пример - любая невалидная запись не важно по какой причине должна быть отброшена с громким ором об этом, не останавливая работу в целом. Вспоминаем любимый нами reconciliation loop. Ну и чёткое разделение control/data-plane.

Что интересно, GCP за собой положил и часть Cloudflare. Но разбор их проблемы оставим на десерт, если такой формат вам интересен.

#postmortem
👍71🔥1
Продолжим тему постмортемов, ч.2 аварии в GCP.

Оказалось, что один из ключевых компонентов Cloudflare хостится на GCP, который значительно пострадал.

Анализ на базе публично доступного:
- У CF есть публичный key-value распределённый сторадж - Workers KV
- CF придерживается политики "по максимуму используем свои же кубики", и Workers KV является основой также и для других сервисов CF (тут им респект - dogfooding это прекрасно)
- Workers KV is a data storage that allows you to store and retrieve data globally , звучит отлично
- На деле выяснилось, что хотя сервис и распределённый, и кеш у него распределённый, НО итоговый сторадж (он же - единая точка правды) - централизован
- Итог - "топология звезда, центр лёг - всему пизда"

Делаем выводы:
- Единая точка правды - нормальная практика, но стоит быть готовым к её полному уходу (что сложно)
- Как можно уменьшить аффект - стараться разделить read и write операции, read в таком случае можно хорошенько разгружать и делать распределённым
- Разумный компромисс - в случае аварии "в центре" переходить в read-only режим
- А это значит, что нужно стремиться делать подавляющее количество операций - только на чтение
- Ну и капитанское: моновендорность - это к проблемам. Хотите такое переживать - учитесь работать в парадигме мультиклауда, уход даже нескольких регионов разом - статистическая норма на долгосроке.

Сами CF говорят что уже планировали подобные работы:
Bringing forward our work to improve the redundancy within Workers KV’s storage infrastructure, removing the dependency on any single provider.


Можно конечно выбрать самого крупного вендора, и надеяться, что с его падением упадёт и весь остальной Интернет :)


#postmortem
👍6🔥31👀1
Уже начали! Открытая трансляция https://highload.ru/spb/2025/open-track#broadcast

Увидимся! #highload
🔥3👌1
После потрясного доклада Андрея Бородина о WAL-логах в Postgres в кулуарах мы вышли на очень интересную тему - распределённая БД упирается чаще не в диски, а в сеть! При чём даже не на непосредственно трафик самих запросов, а на служебные нужды - наливка новых реплик, бекап, и даже служебная информация (GIN индекс на небольшом изменении данных может очень значительно перестроиться).

Все эти байтики нужно очень быстро и успешно передать на другой инстанс БД, находящийся в другом ДЦ (будьте готовы к латенси 5+мс). Получается, что поток изменений, передаваемый по сети, примерно совпадает с данными, которые мы будем сбрасывать на диски в WAL. И основной вывод - что оптимизироваться, оказывается, надо именно на поточную передачу по сети!

Возвращаясь с Saint Highload 2025 в сапсане мне стало интересно покрутить тему и я полез в советы Oracle как стоит тюнить ZFS для их БД. И там я наткнулся на очень интересный совет - что, дескать, ранее мы советовали выставлять recordsize (размер логического блока на ФС) равным размеру блока файлов данных БД (обычно это 8-16К), А ТЕПЕРЬ стоит выставлять его равным среднему размеру IO по сети (32К для OLTP по их мнению, 128К для OLAP)!


Вот такие интересные реалии - нужно тюнить ФС под профиль нагрузки сети. Оп-ля!

#не_очевидное
👍10🤔3🔥21👀1
Тут из 1)многих 2)уважаемых 3)утюгов говорят про драму Bcachefs и его исключение из ядра в следующем релизе (о боги, хотят выкинуть самую прогрессивную ФС, как они посмели!), цитата от мистера Торвальдса в сторону мистера Оверстрита:
You made it very clear that I can't even question any bug-fixes and I
should just pull anything and everything.

Honestly, at that point, I don't really feel comfortable being
involved at all, and the only thing we both seemed to really
fundamentally agree on in that discussion was "we're done".


В драму играть не хочется, а вот надеть шапочку контрибьютора (не)последней ФС в этом мире OpenZFS очень даже хочется.

Преамбула:
OpenZFS в силу своей лицензии CDDL (словом, такой же опенсорсной, как и GPLv2) имеет ряд нюансов при распространении совместно с ядром, и исторически распространяется для Linux в виде отдельного модуля ядра через DKMS (поставка в виде исходного кода, сборка непосредственно при установке на конечной машине) или KMOD (бинарная поставка, но строго прибит по ABI к конкретному подрелизу ядра), вот их сравнение. И так мы живём уже минимум 10 лет (ого!).

Фабула:
Как бы не был прекрасен или ужасен Bcachefs и его автор, но искренне считаю, что для него лично, так и для его проекта это может пойти на руку:
- делай что хочешь и когда хочешь (и никакой фин не помешает!)
- свой прозрачный релизный цикл, не надо гнаться и ждать следующего релиза ядра
- клиент может спокойно сидеть на LTS ядре и иметь bleeding edge версию ФС с багофиксами любой свежести

Да, теперь твоя ФС не поставляется просто так "из коробки" в любой утюг мира, и её надо доустановить. Но разве это кого-то останавливало от захвата мира? :)

PS: и как бы не звучал страшно DKMS - сборка на конечной машине работает годами и очень стабильно, юзай любое совместимое ядро и не горюй.

PPS: в комментариях @nbykov приложил must-have к прочтению ссылку на открытое письмо Ганса Райзера (того самого автора ReiserFS), качайте софты, коллеги, мы живём в социуме.

#скандалы_интриги_расследования
🤔6👍4👨‍💻2👀2
Этим дождливым летом в default-city продолжаем инфровые митапы, приходите, увидимся!
👌1👀1
Forwarded from Nastasya
Привет! VK Tech приглашает на DarkSideoftheCloud, специальный выпуск InfraDev Meetup про «теневую» сетевую сторону облачных сервисов.

Поговорим про то, где сети лежат в архитектуре BareMetal as a Service, какие технологии выбрать для виртуальной частной сети и как справиться с непростой задачей масштабирования межсетевых экранов.

Спикеры:
🕸Кирилл Фролов, эксперт в команде разработки платформы, VK Cloud, VK Tech.
🕸Влад Одинцов, Tech Lead и Product Owner сетевых сервисов, K2 Cloud.
🕸Юрий Дышлевой, инженер, Positive Technologies.
Подробнее о докладах читайте на странице мероприятия.

Когда: 16 июля, с 18:00 до 23:59
Где: Москва, Ленинградский 39, БЦ Skylight, офис VK

Приходите на встречу или участвуйте онлайн.
Зарегистрироваться.
🔥2👌1🤝1
👍5🌭4🌚1🤝1🦄1
Самый классный вариант что-то мерить - через физику.
Производительность одного потока можно свести к измерению задержек!

Собрал для вас пирамидку средних задержек с флёром облаков:
L1 cache                                    0.5ns
Branch mispredict 5 ns
L2 cache 7 ns
Mutex lock/unlock 25 ns
RAM 100 ns
Send 1K over 1 Gbps net 10,000 ns
Read 4K randomly from local fast NVME 20,000 ns
Read 4K randomly from local NVME (VM) 60,000 ns
Read 4K randomly from local SSD 150,000 ns
Read 1 MB sequentially from RAM 250,000 ns
Read 4K randomly from network NVME 500,000 ns
Round trip within same datacenter 500,000 ns
Read 1 MB sequentially from SSD 1,000,000 ns
HDD seek 10,000,000 ns
S3 response for 4k object up to 100,000,000 ns
Send packet CA->Netherlands->CA 150,000,000 ns

1 second 1,000,000,000 ns


Против физики не попрёшь!
#занимательное
🔥6🤝3🦄3
Интересный кейс подъехал: есть полезный сисколл copy_file_range, и если файловая система позволила принять через него запрос на копирование байтов больше, чем помещается в 32-битное число, то всё остальное будет забито нулями.

Если бы я хотел написать кликбейтный заголовок, то он бы выглядел так: "ZFS опять бьёт данные! Ну что за ненадёжная ФС!"

Вот только это баг в glibc, а ZFS (чуть ли не) единственная позволяет разом скопировать через данный сисколл сильно больше. К слову, фикс уже летит.

Будьте дети аккуратны с жирными операциями больше 32 бит.
6👻3🍌1🍓1👀1
Media is too big
VIEW IN TELEGRAM
Señoras y señores, переворачиваем календарь!
🔥8🗿2🍾1
В эту субботу 13 сентября будет бесплатная онлайн-конференция Highload++ Genesis о фундаментальных вещах для нашей сферы: базы, не-базы, сети, ml, облака, контейнеры, нагрузки.

На ней буду "великолепно капитанить" про облака. Регистрируйтесь, услышимся!

#conference
🔥5👀3👌1👨‍💻1
Перестрелка :)

А записи докладов уже публично доступны тут https://conf.ontico.ru/online/ghl2025 , буду использовать как хорошие вводные для новых сотрудников.
6👀3🔥2
Объявлена неделя многоядерности Multi-kernels, не только лишь один один патч, но целых два были опубликованы на LKML.

Идея интересна - давайте на отдельных ядрах процессора запускать честные копии (может даже разных версий) ядер ОС, каждому отсыпать индивидуально куски памяти, и, в идеальной картине мира, также нарезать и другое железо (сети, диски, GPU, словом - всё что висит на PCIe шине).

Всё это подаётся в основном как замена виртуализации, ожидая минимизацию накладных расходов. НО - кто же будет отвечать за общие компоненты? Да тот же сторадж, локальные файловые системы требуют монопольный доступ. В сетях вроде есть sr-iov, но с ним тоже теряется определённая гибкость. Вообще вырисовывается интересный нюанс - должно быть более главное главное ядро, которое за такие вещи должно отвечать. Тут лично у меня вопрос - а чем общение между ядрами будут отличаться по эффективности от virtio + vhost(-user) у VMок, которые уже по максимуму стараются передавать данные без копирования?

В LKML оставили ещё один очень интересный комментарий на эту тему: Pasha Tatashin когда то уже экспериментировал с этим подходом (уже третий вариант в рамках этого поста 😄 ), и отмечает проблемы:
While this approach was easy to get to the experimental PoC, it has
some fundamental problems that I am not sure can be solved in the long
run, such as handling global machine states like interrupts. I think
the Orphaned VM approach (i.e., keeping VCPUs running through the Live
Update procedure) is more reliable and likely to succeed for
zero-downtime kernel updates.


В итоге выглядит, что такой подход весьма интересен для масштабирования в рамках одного хоста, а вот удобство и изоляцию VMок будет весьма затруднительно догнать.
👍4👀31👨‍💻1
This media is not supported in your browser
VIEW IN TELEGRAM
Мне тут стало скучно, и я решил купить самый дешёвый 4ТБ nvme с озона по цене HDD. Наверное, вы уже догадываетесь про что будет пост :)

Начиналось всё не плохо, диск до сих пор виден в системе, отвечает уверенно (смарт в конце поста). Нашёл утилиту f3 , быстрый f3probe даже сказал что всё ок. f3write, оказалось, хочет писать файлы поверх ФС (он генерит сиквенс файлами по 1ГБ, которые потом должен провалидировать f3read). Сначала я подумал отформатировать диск с ext4/xfs, всё равно разово, а потом решил не изменять себе и бахнул ZFS.

За ночь (часов 10) nvme смог принять всего 160ГБ данных (скорее всего итоговый объём около 240ГБ, т.к. я успел один раз перезапустить запись после 60+ГБ), первые 50ГБ влетели на скорости 1ГиБ/сек, а вот на утро я увидел скорость записи в 2МиБ/сек и моргающий красный светодиод на самом nvme... В целом судьба диска к этому моменту стала понятна, я пошёл оформлять возврат.

Параллельно запустил zpool scrub, и тут меня ZFS в очередной раз обрадовал:
root@ubuntu:~# zpool status
pool: testpool
state: ONLINE
status: One or more devices has experienced an error resulting in data
corruption. Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-8A
scan: scrub in progress since Fri Sep 26 08:08:22 2025
163G / 163G scanned, 145G / 163G issued at 16.0M/s
0B repaired, 89.32% done, 00:18:32 to go
config:

NAME STATE READ WRITE CKSUM
testpool ONLINE 0 0 0
nvme0n1 ONLINE 0 0 54.6K

errors: 27754 data errors, use '-v' for a list


Родимые чексуммы заорали о проблемах, и это скраб ещё не кончился!

Диск представляется как Non-Volatile memory controller: Realtek Semiconductor Co., Ltd. RTS5765DL NVMe SSD Controller (DRAM-less) (rev 01).
Интересные моменты из smartctl для интересующихся уже после тестов, диск считает себя живым (но верить ему, конечно, не стоит):
=== START OF INFORMATION SECTION ===
Model Number: SSD 4TB
Serial Number: 000166
Firmware Version: VC2S038D
PCI Vendor/Subsystem ID: 0x10ec
IEEE OUI Identifier: 0x00e04c
Controller ID: 1
NVMe Version: 1.4
Number of Namespaces: 1
Namespace 1 Size/Capacity: 4,000,787,030,016 [4.00 TB]
Namespace 1 Formatted LBA Size: 512
Namespace 1 IEEE EUI-64: 00e04c 11be335053
...
Supported Power States
St Op Max Active Idle RL RT WL WT Ent_Lat Ex_Lat
0 + 8.00W - - 0 0 0 0 0 0
1 + 4.00W - - 1 1 1 1 0 0
2 + 3.00W - - 2 2 2 2 0 0
3 - 0.0300W - - 3 3 3 3 5000 10000
4 - 0.0050W - - 4 4 4 4 54000 45000

Supported LBA Sizes (NSID 0x1)
Id Fmt Data Metadt Rel_Perf
0 + 512 0 0

=== START OF SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

SMART/Health Information (NVMe Log 0x02)
Critical Warning: 0x00
Temperature: 40 Celsius
Available Spare: 100%
Available Spare Threshold: 32%
Percentage Used: 0%
Data Units Read: 70,047 [35.8 GB]
Data Units Written: 695,379 [356 GB]
Host Read Commands: 283,235
Host Write Commands: 4,106,990
Controller Busy Time: 0
Power Cycles: 3
Power On Hours: 11
Unsafe Shutdowns: 2
Media and Data Integrity Errors: 0
Error Information Log Entries: 0
Warning Comp. Temperature Time: 0
Critical Comp. Temperature Time: 0

Error Information (NVMe Log 0x01, 8 of 8 entries)
No Errors Logged

Read Self-test Log failed: Invalid Field in Command (0x002)


#баловство #storage
🔥9🤡3😁2🌚2🙈1