Последние посты

Сергей Озеранский
9 сент., 08:58
22 октября Kubernetes-сообщество встречается офлайн в Москве!Кому будет интересна конференция: – DevOps- и SRE-инженерам; – специалистам по Kubernetes и облачной инфраструктуре; – платформенным инженерам; – архитекторам и техническим руководителям; – всем, кто занимается эксплуатацией и развитием инфраструктуры.Что будет в течение дня? 🎤 Доклады Про эксплуатацию Kubernetes, observability, AI и облачную инфраструктуру, Service Mesh, безопасность, экономику платформ, bare metal и ЦОДы. ⚡️ Активности партнеров Дополнительная возможность пообщаться с участниками конференции и включиться в интерактивные форматы от партнеров. 🍻 Афтепати После основной программы нетворкинг продолжится уже в неформальной обстановке.А еще на Kuber Conf можно не только прийти как участник, но и выступить! До 15 сентября принимаются заявки на доклады — делитесь практическими кейсами и экспертизой, которые


Сергей Озеранский
6 сент., 17:23изменён
Леджер: журнал, которому можно веритьБаланс говорит, сколько у клиента денег. Леджер объясняет, откуда взялась эта цифра. Сегодня про него: как устроена таблица, почему в неё нельзя записать неверную строку и что происходит, когда одну и ту же операцию присылают дважды.Только добавлениеЛеджер — таблица, в которую можно только вставлять. У репозитория нет методов update и delete для неё. Ошибку в леджере не исправляют, её объясняют новой записью.В каждой строке: тип операции, сумма, баланс до, баланс после, ключ идемпотентности, ссылка на источник (джоба, платёж, возврат) и кто это сделал.Семь типов операцийТри уменьшают баланс: debit — списание за джобу, refund — возврат клиенту через платёжного провайдера, reversal — зарезервирован для внутренних отмен.Три увеличивают: credit — пополнение, bonus — начисление сверх оплаты,
Сергей Озеранский
6 сент., 17:01изменён
Баланс: как хранить деньги клиента и не ошибитьсяВ прошлом посте разделили биллинг и леджер: баланс разрешает операции, леджер их объясняет. Сегодня про первую половину — таблицу баланса.Одна строка на клиентаБаланс — это отдельная таблица с одной строкой на аккаунт. В ней текущий остаток и два накопительных счётчика: сколько всего зачислено и сколько всего потрачено. Счётчики не участвуют в решениях, они для дашборда и аналитики. Решает только остаток.В чём хранитьНе во float. Это база: 0.1 + 0.2 в двоичной арифметике не равно 0.3. Баланс меняется каждые несколько секунд работы каждой джобы, это тысячи мелких списаний, и ошибка округления в нём накапливается.Не в центах. Ставка раннера — доли цента за минуту, а списываем мы за секунды. В центах такая операция либо округляется в ноль, либо требует накопителя дробных остатков рядом с балансом.Мы храним целое число
Сергей Озеранский
6 сент., 16:46изменён
Как устроены биллинг и леджер в tempus.buildtempus.build продаёт минуты CI-раннеров по предоплате. Списание посекундное, ошибки в деньгах недопустимы, а каждая финансовая операция должна быть прозрачна для аудита. Начну с теории, а в следующем посте покажу, как это реализовано.Немного теорииВ заголовке два слова: биллинг и леджер. Это два связанных инструмента, но решающих разные задачи. И прежде чем разбирать их, важно развести ещё одну вещь: биллинг не проводит платежи.Проведением платежей занимается платёжный провайдер: авторизует карту, списывает деньги, делает расчет. Для tempus.build это внешняя система. Биллинг узнаёт от неё только факт: "от клиента X пришло N денег" — и с этого момента начинается его работа.Биллинг — это тарификация и учёт. Он знает, сколько стоит секунда раннера, зачисляет пополнения, списывает за выполненные джобы и отвечает на вопрос "сколько у
Сергей Озеранский
2 сент., 13:05
Зато точно. Или не очень? 😅Пишите, в чём храните например, деньги или баллы: float, decimal, integer в минимальных единицах или свой вариант.


Сергей Озеранский
31 авг., 02:27
Если вы все еще хотите разбираться в программировании, а не просто просто нажимать “Yes” в консоле, то нашел интересный репозиторий https://github.com/faif/python-patternsЭто коллекция паттернов проектирования и идиом на Python.Глобально, ничего нового там нет. Это в основном классические паттерны «банды четырёх», просто собранные на примерах и в одном месте. Так что, если хочется развиваться, то такое, я считаю, нужно знать даже с LLM.GitHubGitHub - faif/python-patterns: A collection of design patterns/idioms in PythonA collection of design patterns/idioms in Python. Contribute to faif/python-patterns development by creating an account on GitHub.
Сергей Озеранский
28 авг., 06:25
Хочется обнять всех, кому сейчас тяжело из-за того, что происходит с интернетом.Я не в РФ, но сталкиваюсь с этим регулярно. Чуть больше года назад был в Мск месяц и страдал. И даже близко не представляю, насколько это тяжко сейчас. Держитесь 🫂
Сергей Озеранский
28 авг., 04:41изменён
Значете, что меня в последнее время все более и более раздражает. То, что приходится решать проблемы, которых раньше и быть не могло, при решении очень простых, базовых, понях задач.Да, это снова пост про яндекс облако. При всем моем уважении к поддержке яндекс (они классно работают, нет претензий), я выполняя казалось бы обычные задачи, сталкиваюсь с необычнми проблеми. И да, не всегда виноват яндекс облако, но так как я работаю с ним, то и упоминаю его.Ситуация такая:Собрал лендинг: Astro (SSG, чистая статика), выкатил на объектное хранилище с website-hosting + CDN перед ним. Открывается мгновенно, Lighthouse зелёный, OG-теги на месте. Все ок.Кидаю ссылку в Telegram - превью не появляется. Открываю Facebook Sharing Debugger - HTTP 403 и приписка "This response code could be due to a robots.txt block. Please allowlist facebookexternalhit on your sites robots.txt config toYouTubeУблюдки хреновы я пришел на перестрелку... | ЛегендаОтрывок из фильма "Легенда" 2015 года, с Томом Харди в главной роли. Поддержать: https://vk.cc/c700Gt О фильме: Фильм расскажет историю близнецов Реджи и Ронни Крэй, культовых фигур преступного мира Великобритании 1960-х. Братья возглавляли самую влиятельную…
Сергей Озеранский
27 авг., 06:10
Сканнеры долбятся. Домену 1 сутки.


Сергей Озеранский
26 авг., 16:15
Значит открываем max.ru, логинимся. Во время логина появляется каптча, нажимаем ссылку Terms Of Use и вуаля. Еще один найденный баг...



Сергей Озеранский
26 авг., 05:08
Есть такое мнение, что испанцы медленные и вообще пофигисты. Они действительно в чем-то более простые и расслабленные, это общий южный вайб. У меня нет статистики, кто бездельник, а кто нет. Но сфера услуг, по моим ощущениям, может где-то быть ниже, чем та, к которой мы привыкли. Начиная с самого простого — тебе просто не отвечают или долго обещают что-то сделать. Поэтому славяне любят обращаться к славянам. Это дороже, но и результат другой. Хотя, пожив в Испании уже два года, я понял, что не везде нужно идеально. Иногда нужно просто «необходимо и достаточно» (как и в программировании).Но вот к чему я. Я хочу привести два примера, и сразу не поймешь, где испанцы, а где русские.1. Мне нужен юридический адрес — такая опция есть, вполне легальная, и я могу его арендовать для корреспонденции и указания в официальных документах. Обратился в компанию, специализирующуюся на этом. Первый
Сергей Озеранский
25 авг., 15:08изменён
Вот такая вот хйня, собачка! 🤷♂️


Сергей Озеранский
23 авг., 08:35
То, чего ожидал вообще меньше всего - документация Python доступна на русском языке. https://blog.python.org/2026/08/the-python-documentation-is-now-available-in-russian/Python InsiderThe Python documentation is now available in Russian! | Python InsiderThe official blog of the Python core development team.
Сергей Озеранский
21 авг., 06:14
Короче, это казино 🎰 Yandex.Cloud подтверждает, что это фильтрация трафика на уровне систем DPI или ТСПУ со стороны магистральных операторов связи. Единственное что остается перебирать адреса, так как публичный IP-адрес можно получить только автоматически
Сергей Озеранский
20 авг., 13:23изменён
Помните, я писал, что нас ждут последствия от всего, что происходит с интернетом в России? И что я уже попадал на IP, с которого у VM нет исходящего доступа в глобальный интернет (Cloud.ru)? Вчера словил ещё один кейс, который снова подтверждает эти рассуждения.
Сергей Озеранский
20 авг., 09:58изменён
Каждый раз, когда мне по каким-то причинам на глаза попадается информация о моей потенциальной пенсии по возрасту в России, я все еще немного поражаюсь этой экономики. Никогда не рассчитывал на пенсию.А на сообщение банка хочется ответить: "если бы, да кабы, да во рту росли грибы, тогда бы был не рот, а целый огород"


Сергей Озеранский
20 авг., 00:44изменён
Помните, я писал, что нас ждут последствия от всего, что происходит с интернетом в России? И что я уже попадал на IP, с которого у VM нет исходящего доступа в глобальный интернет (Cloud.ru)?Вчера словил ещё один кейс, который снова подтверждает эти рассуждения.Поднимал в Yandex.Cloud (да, вы часто слышите от меня про него, но так вышло, я с этим облаком работаю) свежую VM и получил для нее публичный IP. Долго не мог подключиться по SSH. При этом ровно такая же VM в другой зоне работает во всех отношениях.Самое любопытное то, что адрес выглядел полностью живым.Что проходило нормально: - ICMP - ping 0% потерь, но латентность рваная: min/avg/max = 0.224 / 3.286 / 9.403 ms, stddev 4.3 ms. - MTU - пакеты с Don't Fragment до 1500 байт проходили в обе стороны без потерь (то есть это не MTU/фрагментация). - TCP :22 - трехстороннее рукопожатие завершалось: nc -vz -> succeeded, ssh -vvv
Сергей Озеранский
18 авг., 08:09изменён
Cursor запустил OriginПозиционируется как Git в эпоху AI.Пока еще не заглянул внутрь, у меня нет подписку на Cursor. Но скорее всего схожу посмотреть, так как интересна тема CI/CD которая должна быть в Origin. И по идее она должна быть дешевой и быстрой, так как генерация кода в AI настоящем стало больше, а значит пайплайны гоняются чаще.https://cursor.com/originhttps://cursor.com/docs/originCursorCursor · OriginA git forge for the agentic era.
Сергей Озеранский
14 авг., 06:40
Есть куча инфраструктурных зависимостей — в k8s, на VM, даже в разных облаках. Считаем, что всё развёрнуто через код (или большая часть). Основной стек — Terraform/Terragrunt, Ansible.Есть потребность в инвентаризации. Хочу видеть, где что установлено и какой версии. Бонусом — актуальная версия и закрытые CVE.И что ещё важно: не хочу ничего контролировать вручную 😄 Хочу, чтобы данные собирались сами (в том числе через автодискавери).Кто как решает подобную задачу?1,290Открыть в Telegram
Сергей Озеранский
12 авг., 16:12изменён
Мое нытье про стабильность и то, что я не QA продолжаетсяА я просто PR хочу создать...upd: https://www.githubstatus.com/incidents/76t89hbfb09h
1,300Открыть в Telegram
