<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Yuriy Gavrilov: posts tagged Dev</title>
<link>https://gavrilov.info/tags/dev/</link>
<description>Welcome to my personal place for love, peace and happiness 🤖 Yuiry Gavrilov</description>
<author></author>
<language>en</language>
<generator>Aegea 11.4 (v4171e)</generator>

<itunes:owner>
<itunes:name></itunes:name>
<itunes:email>yvgavrilov@gmail.com</itunes:email>
</itunes:owner>
<itunes:subtitle>Welcome to my personal place for love, peace and happiness 🤖 Yuiry Gavrilov</itunes:subtitle>
<itunes:image href="https://gavrilov.info/pictures/userpic/userpic-square@2x.jpg?1643451008" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>Зря я ему память ставил больше 🥲 ... проект – “Монолит”</title>
<guid isPermaLink="false">308</guid>
<link>https://gavrilov.info/all/zrya-ya-emu-pamyat-stavil-bolshe/</link>
<pubDate>Sat, 03 Jan 2026 19:30:34 +0300</pubDate>
<author></author>
<comments>https://gavrilov.info/all/zrya-ya-emu-pamyat-stavil-bolshe/</comments>
<description>
&lt;p&gt;вот же блин, не ждал я тут подвоха 😭&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/telegram-cloud-photo-size-2-5388624450019856252-y.jpg" width="1032" height="1152" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;сдулся мой старенький asustor, придется бутылки сдавать ... и еще накатить чего-то с горя, что бы было что сдавать.&lt;/p&gt;
&lt;p&gt;🥹&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2026-01-03-v-19.28.31.png" width="1198" height="866" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;а вот еще тряхнул стариной и решил понарошку собрать комп нестыдный на сегодня :)) ну даже очень.&lt;br /&gt;
вот что вышло:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/zrya-ya-emu-pamyat-stavil-bolshe1.png" width="1582" height="1346" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;ну прям мечта сисадмина и не только))) это по сути 4 в одном. через proxmox 4 виртуалки. Первая True Nas Scale для массива, вторая ubuntu server для докеров и Portainer тоже с gpu и третья виндовая для gpu в виндовой среде.  Встречайте...&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Проект “Монолит”: Как собрать домашний сервер мечты за миллион (и зачем это вообще нужно)&lt;/h2&gt;
&lt;p&gt;Говорят, что универсальных инструментов не бывает. Что “Швейцарский нож” режет хуже скальпеля, а универсальная шина хуже зимней. Мы решили бросить вызов этому утверждению. Ну я и мой электронный друг Gemini.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Задача звучала амбициозно:&lt;/b&gt; собрать в одном компактном корпусе устройство, которое заменит целый IT-отдел. Оно должно быть:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;AI-станцией&lt;/b&gt; для запуска “тяжелых” нейросетей (LLM) локально.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Графическим ПК&lt;/b&gt; топового уровня (4K/8K видео).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Корпоративным хранилищем (NAS)&lt;/b&gt; на 100+ ТБ с надежностью банка.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Лабораторией виртуализации&lt;/b&gt; для Docker, Kubernetes и DevOps-экспериментов.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;И всё это должно работать 24/7, стоять дома и не напоминать шумом взлетающий Боинг. Спойлер: у нас получилось.&lt;/p&gt;
&lt;h3&gt;Почему не Mac Pro и не облака?&lt;/h3&gt;
&lt;p&gt;Первый вопрос, который задают рациональные люди: *“Зачем тратить 1.2 млн рублей на самосбор, если есть MacBook Pro, AWS и простая дисковая шуршалка в углу?”*&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;MacBook M4 Max&lt;/b&gt; прекрасен, но это “золотая клетка”. На нем не развернешь серьезный кластер виртуализации, в нем нет 100 ТБ памяти, и он все еще слабее в AI-обучении, чем топовые GPU. Ну и закрыл крышку – прод упал.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Облака&lt;/b&gt; — это игла подписки. Аренда мощностей уровня нашей сборки (A100/H100) будет стоить те же деньги за год-полтора, но в итоге у вас не останется ничего.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Мы выбрали путь &lt;b&gt;“Digital Sovereignty”&lt;/b&gt; (Цифровой суверенитет). Своё железо, свои данные, свои правила.&lt;/p&gt;
&lt;h3&gt;Анатомия Монстра: Разбор “железа”&lt;/h3&gt;
&lt;p&gt;Каждый компонент здесь — результат компромиссов и долгих споров. Вот наша “Золотая конфигурация”:&lt;/p&gt;
&lt;h4&gt;1. Сердце: Архитектура “Всё в одном”&lt;/h4&gt;
&lt;p&gt;Мы отказались от серверных Threadripper в пользу &lt;b&gt;AMD Ryzen 9 9950X3D&lt;/b&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;*Зачем?* Нам важна однопоточная производительность для графики и отзывчивости системы. 16 ядер Zen 5 — это избыточно для дома, но идеально для виртуализации. А X3D-кэш делает этот “сервер” лучшим графическим ПК в мире.&lt;/li&gt;
&lt;li&gt;*Материнская плата:* &lt;b&gt;MSI MAG X870E Tomahawk&lt;/b&gt;. Надежная база с хорошим VRM, способная переварить этот процессор 24/7. Есть еще Eco режим, что позволит немного снизить мощность, но выиграть в теплоотдач и работе 24x7.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;2. Мозг AI: Революция 5090 D&lt;/h4&gt;
&lt;p&gt;Сначала мы смотрели на RTX 4090. Но потом решили взглянуть на &lt;b&gt;NVIDIA RTX 5090 D (32GB)&lt;/b&gt;.&lt;br /&gt;
Это “Game Changer”.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Потребительские карты обычно имеют 24 ГБ памяти. Этого мало для серьезных языковых моделей (LLM). Llama-3-70B туда влезает только “порезанной”.&lt;/li&gt;
&lt;li&gt;32 ГБ GDDR7 памяти у 5090 D открывают портал в мир взрослого AI.&lt;/li&gt;
&lt;li&gt;Двухслотовая турбина выбрасывает горячий воздух из корпуса, спасая остальные компоненты от перегрева. Да, это стоит 340 000 рублей, но альтернатива (профессиональные карты RTX 6000) стоит в 3 раза дороже. Это отличный истребитель, но не космический крейсер enterprise уровня.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3. Хранилище: Надежность прежде всего&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Диски:&lt;b&gt; 8 штук **WD Ultrastar по 22 ТБ&lt;/b&gt;. Это 176 ТБ “сырого” объема.&lt;/li&gt;
&lt;li&gt;Контроллер:&lt;b&gt; Настоящий серверный HBA-адаптер **LSI 9300-8i&lt;/b&gt; в прошивке IT-Mode. Никаких программных RAID на материнской плате, только хардкор.&lt;/li&gt;
&lt;li&gt;Файловая система:&lt;b&gt; ZFS в режиме **RAIDZ2&lt;/b&gt; (аналог RAID 6). Могут умереть любые два диска одновременно — данные выживут.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;4. Память: Золотая (в прямом смысле) DDR5 ECC&lt;/h4&gt;
&lt;p&gt;Самая болезненная строка бюджета. &lt;b&gt;128 ГБ DDR5 ECC&lt;/b&gt;.&lt;br /&gt;
Из-за бума ИИ цены на память взлетели. Комплект из 4 планок по 32 ГБ сейчас стоит около &lt;b&gt;200 000+ рублей&lt;/b&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Можно ли сэкономить и взять обычную?* Нет. ZFS активно использует оперативную память. Ошибка в бите памяти может разрушить файловую систему. Для сервера 24/7 ECC (коррекция ошибок) — обязательное требование. Лучше этим не пренебрегать.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;5. Корпус: Jonsbo N5&lt;/h4&gt;
&lt;p&gt;Это магия инженерии. Красивый черный куб, куда помещается E-ATX плата, полноразмерная видеокарта и 8 жестких дисков. Мечта с красивыми деревяшками на лицевой панеле :)&lt;/p&gt;
&lt;h3&gt;Программная магия: Как этим управлять?&lt;/h3&gt;
&lt;p&gt;Железо — это только половина дела. Вся мощь раскрывается в софте.&lt;br /&gt;
Мы используем &lt;b&gt;Proxmox VE&lt;/b&gt; как гипервизор. Это “слоеный пирог”:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;VM TrueNAS:&lt;/b&gt; Прямой проброс контроллера LSI. Эта виртуалка управляет дисками и раздает файлы по сети.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;VM Windows 11:&lt;/b&gt; Прямой проброс RTX 5090. Подключаем монитор/клавиатуру — и это мощнейший графический ПК. Или подключаемся удаленно через Moonlight.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;VM Ubuntu Server + Docker (Portainer):&lt;/b&gt; Здесь живут “слуги”: Home Assistant (умный дом), Plex (кинотеатр), Nextcloud (ваше личное облако) и среды для разработки.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Экономика: Игрушка или Инвестиция?&lt;/h3&gt;
&lt;p&gt;Цена сборки чуть переваливает за &lt;b&gt;1 250 000 рублей&lt;/b&gt;. Безумие?&lt;br /&gt;
Смотря как посмотреть.&lt;/p&gt;
&lt;p&gt;Если рассматривать это как консоль для игр — безумие.&lt;br /&gt;
Но если вы IT-инженер, DevOps или AI-энтузиаст, это устройство становится активом:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Аренда мощностей:&lt;/b&gt; В простое карту 5090 можно сдавать в аренду на площадках типа Vast.ai для обучения чужих нейросетей, отбивая стоимость “железа”.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Обучение и Карьера:&lt;/b&gt; Навыки поднятия Kubernetes-кластера дома или тонкой настройки LLM стоят на рынке труда гораздо дороже миллиона.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Свой стартап:&lt;/b&gt; Это готовый MVP-стенд для запуска своего AI-сервиса без трат на облака.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Итог&lt;/h3&gt;
&lt;p&gt;Эта собрка не просто компьютер. Это &lt;b&gt;автономная цифровая крепость&lt;/b&gt;. В эпоху, когда сервисы закрываются, подписки дорожают, а данные утекают, иметь свой собственный суперкомпьютер под столом — это не паранойя. Это новый уровень свободы для миллионеров из трущоб :)&lt;/p&gt;
&lt;p&gt;Добро пожаловать в клуб владельцев виртуальных “Monolith”. 🤪&lt;/p&gt;
&lt;p&gt;UPD: 25.01.2026&lt;/p&gt;
&lt;p&gt;Первый шаг к монолиту сделан.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/IMG_1037.jpg" width="982" height="1555" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Кстати, конфигурация немного поменялась. Самсунг ssd заменил в плане на Микрон серверный по 960gb, но 4 штуки. У них оказался срок службы гораздо большое. в 5-7 раз где-то. Они будут работать в Raid10 или raidz1 с блоком 32к. Места будет чуть меньше в raidz1, где то 2.7tb.&lt;/p&gt;
&lt;h4&gt;Почему Micron 7450 MAX 1.6TB лучше Samsung 990 PRO UPD: не подходит, надо 2280, будет или 800gb или найду Trancend с PLP&lt;/h4&gt;
&lt;p&gt;Сравниваем, опираясь на мануал материнской платы и датащит диска:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;Бессмертие (Endurance):&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Samsung 990 PRO (2TB):** Ресурс ~1,200 TBW.&lt;/li&gt;
  &lt;li&gt;Micron 7450 MAX (1.6TB):&lt;b&gt; Ресурс **8,700 TBW&lt;/b&gt; (См. Table 3 в инструкции).&lt;/li&gt;
  &lt;li&gt;Итог:&lt;b&gt; Micron выносливее **в 7 раз&lt;/b&gt;. Вы можете писать на него базы данных и логи круглосуточно, и он переживет сам сервер.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;b&gt;Over-provisioning (Резервная область):&lt;/b&gt;  &lt;br /&gt;
Почему объем такой странный — 1.6 ТБ, а не 2 ТБ?  &lt;br /&gt;
Micron намеренно “скрыл” около 400 ГБ флеш-памяти. Контроллер использует это скрытое место, чтобы перемещать данные, выравнивать износ и поддерживать высокую скорость, когда диск заполнен.  &lt;br /&gt;
У Samsung 990 PRO этой резервной области почти нет, поэтому при заполнении на 90% он начнет тормозить. Micron 7450 MAX будет работать на полной скорости даже если вы забьете его под завязку.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="3"&gt;
&lt;li&gt;&lt;b&gt;Скорость случайной записи (IOPS)&lt;/b&gt;:  &lt;br /&gt;
Для виртуалок важна запись мелких файлов (4K Random Write).&lt;/li&gt;

&lt;ul&gt;
  &lt;li&gt;Micron 7450 PRO:** 120,000 IOPS.&lt;/li&gt;
  &lt;li&gt;Micron 7450 MAX:&lt;b&gt; **250,000 IOPS&lt;/b&gt; (См. Table 2).&lt;/li&gt;
  &lt;li&gt;Модель MAX в два раза быстрее обычной серверной PRO-версии на запись. Это идеально для баз данных и ZFS SLOG.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Математика массива на Micron 1.6TB&lt;/h4&gt;
&lt;p&gt;Если берем 4 таких диска и делаем &lt;b&gt;ZFS RAID10&lt;/b&gt;:&lt;/p&gt;
&lt;p&gt;$$1.6 \text{ ТБ} \times 4 = 6.4 \text{ ТБ (Сырой объем)}$$&lt;br /&gt;
$$\text{Полезный объем (RAID10)} = 3.2 \text{ ТБ}$$&lt;/p&gt;
&lt;p&gt;Еще большой плюс:  PLP (Power Loss Protection) — Защита от потери питания, которая есть в Micron. На плате распаяны танталовые конденсаторы. Если питание пропадает, у диска есть еще несколько миллисекунд, чтобы сбросить всё из оперативной памяти в ячейки NAND = защита от отключения электропитания и потери данных.&lt;/p&gt;
&lt;p&gt;Почему это важно для ZFS, он очень зависит от синхронной записи (Sync Writes) для баз данных и виртуальных машин. Зная, что у диска есть защита PLP, ZFS может безопасно отключать некоторые программные тормоза (O_DSYNC), работая значительно быстрее на мелких операциях записи.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Итого:&lt;/b&gt;&lt;br /&gt;
3.2 ТБ сверхбыстрого, защищенного от потери питания (PLP), “бессмертного” серверного пространства — это мечта для гипервизора Proxmox.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Короче берем Micron 7450 MAX 1.6TB.&lt;/b&gt; Это лучший компонент во всей сборке с точки зрения профессионального подхода. Главное найти его в форм-факторе 2280, а то на материнской плате есть только один длинный порт.&lt;/p&gt;
&lt;p&gt;UPD: 22.02.2026&lt;/p&gt;
&lt;p&gt;Проц едет.&lt;/p&gt;
&lt;p&gt;Диски ssd пришлось заменить на Synology m2 1.6 – других с поддержкой PLP нету в наличии вообще. PLP нужна для защиты от обрывов питания резких. 4 планки будут в 10 массиве, стрейп и зеркало.&lt;/p&gt;
&lt;p&gt;Память нашлась в наличии 90к – 48gb ecc ddr5 – но еще не брал(( надо сдать бутылки.&lt;/p&gt;
</description>
</item>

<item>
<title>Свой Heroku: запустил Dokku дома и накатил новогоднего :)</title>
<guid isPermaLink="false">307</guid>
<link>https://gavrilov.info/all/svoy-heroku-doma-zapustil-dokku-doma-i-nakatil-novogodnego/</link>
<pubDate>Thu, 01 Jan 2026 22:59:46 +0300</pubDate>
<author></author>
<comments>https://gavrilov.info/all/svoy-heroku-doma-zapustil-dokku-doma-i-nakatil-novogodnego/</comments>
<description>
&lt;p&gt;Мы привыкли, что для развертывания веб-приложений нужно платить за VPS или разбираться в дебрях Kubernetes. Но если у вас есть домашний сервер (в моем случае — Asustor), вы можете создать свою собственную PaaS-платформу (Platform as a Service), которая работает по принципу *“git push — и готово”*.&lt;/p&gt;
&lt;p&gt;Сегодня я расскажу, как настроить &lt;b&gt;Dokku&lt;/b&gt; через Portainer, запустить веселое Python-приложение к Новому 2026 году и поделюсь лайфхаками по оптимизации сборки и масштабированию.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2026-01-01-v-22.53.49.png" width="2546" height="936" alt="" /&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;h3&gt;Часть 1. Фундамент: Запуск Dokku в Portainer&lt;/h3&gt;
&lt;p&gt;Dokku — это Docker-контейнер, который управляет другими Docker-контейнерами. Чтобы он заработал на NAS, его нужно правильно запустить. Я использовал Portainer Stack.&lt;/p&gt;
&lt;h4&gt;Docker Compose конфигурация&lt;/h4&gt;
&lt;p&gt;Вот рабочий `docker-compose.yml`, который решает главную проблему — доступность приложений из локальной сети.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;# version: '3.2'
services:
  agent:
    image: dokku/dokku:${VERSION}
    pid: host.  # ⚠️ важно для работы на NAS
    network_mode: bridge # ⚠️ важно для работы на NAS
    environment:
      DOKKU_HOSTNAME: ${DOKKU_HOSTNAME}
      DOKKU_HOST_ROOT: ${DOKKU_HOST_ROOT}
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ${VOLUME_PATH:-/var/lib/dokku}:/mnt/dokku
    ports:
      - &amp;quot;3022:22&amp;quot; # ⚠️ важно для работы через ssh и что бы не конфликтовал с 22 
      - &amp;quot;80:80&amp;quot;    # Внешний порт 80 -&amp;gt; порт 80 внутри контейнера Dokku
      - &amp;quot;443:443&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;b&gt;Нюансы сети:&lt;/b&gt;&lt;br /&gt;
Чтобы обращаться к приложениям по красивым домегам типа `my-app.dokku.datahub.mother`, я настроил &lt;b&gt;AdGuard Home&lt;/b&gt; в качестве локального DNS-сервера (фильтры получил бонусом – где-то 20% это всякие счетчики, ужас:). Добавил правило Rewrite: `*.dokku.datahub.mother` → `192.168.0.20` (IP моего NAS). Теперь все поддомены (приложения) автоматически ведут на Dokku.&lt;/p&gt;
&lt;p&gt;Также для удобства я настроил `~/.ssh/config` на ноутбуке, чтобы не вводить порты вручную:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;Host dokku.datahub.mother
  HostName 192.168.0.20
  Port 3022
  User dokku&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ну и ключ сам так можно добавить&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;echo &amp;quot;ВАШ_ПУБЛИЧНЫЙ_КЛЮЧ&amp;quot; | dokku ssh-keys:add dokku&lt;/code&gt;&lt;/pre&gt;&lt;hr /&gt;
&lt;h3&gt;Часть 2. Приложение “my-first-app”: Новогоднее гадание&lt;/h3&gt;
&lt;p&gt;Для теста я написал простое Flask-приложение, которое рассчитывает ваш возраст в наступающем 2026 году.&lt;/p&gt;
&lt;h4&gt;Код приложения (`app.py`)&lt;/h4&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def home():
    return &amp;quot;&amp;quot;&amp;quot;
    &amp;lt;h1&amp;gt;Приветствую в игре Нового 2026 года! 🎉&amp;lt;/h1&amp;gt;
    &amp;lt;p&amp;gt;Это веселая интерактивная игра в честь Нового года. Угадай свой возраст на 1 января 2026!&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;Введи свой год рождения:&amp;lt;/p&amp;gt;
    &amp;lt;form action=&amp;quot;/result&amp;quot; method=&amp;quot;get&amp;quot;&amp;gt;
        &amp;lt;input type=&amp;quot;number&amp;quot; name=&amp;quot;birth_year&amp;quot; min=&amp;quot;1900&amp;quot; max=&amp;quot;2025&amp;quot; required&amp;gt;
        &amp;lt;button type=&amp;quot;submit&amp;quot;&amp;gt;Угадать возраст на Новогодний 2026!&amp;lt;/button&amp;gt;
    &amp;lt;/form&amp;gt;
    &amp;quot;&amp;quot;&amp;quot;

@app.route('/result')
def result():
    birth_year = request.args.get('birth_year')
    if not birth_year or not birth_year.isdigit():
        return &amp;quot;Ошибка: введи корректный год рождения!&amp;quot;
    
    birth_year = int(birth_year)
    age_in_2026 = 2026 - birth_year
    return f&amp;quot;&amp;quot;&amp;quot;
    &amp;lt;h2&amp;gt;Результат: 🎇&amp;lt;/h2&amp;gt;
    &amp;lt;p&amp;gt;В 2026 году тебе будет {age_in_2026} лет!&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;Счастливого Нового 2026 года! Пусть все твои желания сбудутся!&amp;lt;/p&amp;gt;
    &amp;lt;a href=&amp;quot;/&amp;quot;&amp;gt;Играть снова&amp;lt;/a&amp;gt;
    &amp;quot;&amp;quot;&amp;quot;

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)&lt;/code&gt;&lt;/pre&gt;&lt;h4&gt;Подготовка к деплою&lt;/h4&gt;
&lt;p&gt;Чтобы Dokku понял, как запускать это чудо, нужны два файла в корне проекта:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;`requirements.txt`&lt;/b&gt; (зависимости):&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;Flask==2.3.2
gunicorn==20.1.0
Werkzeug==2.3.3&lt;/code&gt;&lt;/pre&gt;&lt;ol start="2"&gt;
&lt;li&gt;&lt;b&gt;`Procfile`&lt;/b&gt; (команда запуска):&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;web: gunicorn app:app --bind 0.0.0.0:5000&lt;/code&gt;&lt;/pre&gt;&lt;ol start="3"&gt;
&lt;li&gt;&lt;b&gt;`.python-version`&lt;/b&gt; (опционально, явная версия Python):&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;3.11.14&lt;/code&gt;&lt;/pre&gt;&lt;h4&gt;Процесс деплоя&lt;/h4&gt;
&lt;p&gt;Все делается через Git, как на “взрослых” платформах:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;Создаем приложение на сервере:&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ssh dokku@dokku.datahub.mother apps:create my-first-app&lt;/code&gt;&lt;/pre&gt;&lt;ol start="2"&gt;
&lt;li&gt;&lt;b&gt;Отправляем код:&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git init
    git add .
    git commit -m &amp;quot;Happy New Year 2026 version&amp;quot;
    git remote add dokku dokku@dokku.datahub.mother:my-first-app
    git push dokku master&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Если вы до этого еще что-то деплоили, то лучше проверить куда гит смотрит&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git remote -v&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ну и поменяем еще не верное&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git remote remove dokku&lt;/code&gt;&lt;/pre&gt;&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git init
    git add .
    git commit -m &amp;quot;Happy New Year 2026 version&amp;quot;
    git remote add dokku dokku@dokku.datahub.mother:my-first-app
    git push dokku master&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;После пуша Dokku сам скачает Python, установит Flask и запустит Gunicorn. Через минуту-две приложение доступно по адресу `&lt;a href="http://my-first-app.dokku.datahub.mother"&gt;http://my-first-app.dokku.datahub.mother&lt;/a&gt;`.&lt;/p&gt;
&lt;p&gt;Еще нужно домен установить&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ssh dokku@dokku.datahub.mother domains:set my-first-app my-first-app.dokku.datahub.mother&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;или можно сразу глобально его установить:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ssh dokku@dokku.datahub.mother domains:set-global dokku.datahub.mother
# но тогда придется удалить ручную привязку 
ssh dokku@dokku.datahub.mother domains:clear my-first-app

# не забыть перебрать nginx ( на всякий случай ) 
ssh dokku@dokku.datahub.mother proxy:build-config my-first-app&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Сертификат сгенерировать&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ssh dokku@dokku.datahub.mother certs:generate my-first-app my-first-app.dokku.datahub.mother&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;и проверить порты&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ssh dokku@dokku.datahub.mother ports:report my-first-app&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;если порты не корректные, то можно их установить так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ssh dokku@dokku.datahub.mother ports:set my-first-app http:80:5000 https:443:5000&lt;/code&gt;&lt;/pre&gt;&lt;hr /&gt;
&lt;h3&gt;Часть 3. Уровень PRO: Скорость (uv) и Marimo&lt;/h3&gt;
&lt;p&gt;Аппетит приходит во время еды. После простого Flask-приложения я решил развернуть что-то посерьезнее — Data Science ноутбук на &lt;b&gt;Marimo&lt;/b&gt;, и столкнулся с реальными сложностями и особенностями. Для примера брал их дело ноутбук &lt;a href="https://marimo.app"&gt;https://marimo.app&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;1. Ускорение сборки с `uv`&lt;/h4&gt;
&lt;p&gt;Стандартный `pip` устанавливает пакеты медленно. Если проект большой, деплой может висеть минутами.&lt;br /&gt;
Я перешел на &lt;b&gt;uv&lt;/b&gt; — новый менеджер пакетов на Rust.&lt;/p&gt;
&lt;p&gt;Вместо `requirements.txt` я использовал `pyproject.toml` и `uv.lock`. Dokku (благодаря современным buildpacks) увидел `uv.lock` и переключился на быстрый режим. Время сборки сократилось &lt;b&gt;в разы&lt;/b&gt;.&lt;/p&gt;
&lt;h4&gt;2. Ловушка масштабирования (Scaling)&lt;/h4&gt;
&lt;p&gt;Marimo — это &lt;b&gt;stateful&lt;/b&gt; приложение (хранит состояние в памяти). Flask, который мы делали выше — &lt;b&gt;stateless&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;Когда я задеплоил Marimo, Dokku по умолчанию все было хорошо, но потом я решил масштабировать его и сделал так&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ssh dokku@dokku.datahub.mother ps:scale my-marimo-app web=3&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;далее Dokku запустил &lt;b&gt;3 копии&lt;/b&gt; контейнера (`web=3`).&lt;br /&gt;
Начался хаос:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Интерфейс открывался.&lt;/li&gt;
&lt;li&gt;При нажатии кнопок вылетала ошибка `Invalid server token`.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Почему?&lt;/b&gt; Браузер загружал страницу с *Контейнера 1*, а WebSocket-запрос улетал в *Контейнер 2*, который ничего не знал про мою сессию.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Решение:&lt;/b&gt;&lt;br /&gt;
Для интерактивных приложений (Streamlit, Marimo, Jupyter) всегда принудительно ставьте одну реплику:&lt;br /&gt;
Ну ли придется делать липкие сессии на nginx или еще что-то.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ssh dokku.datahub.mother ps:scale my-marimo-app web=1 # все вернуло в рабочее состояние.&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;А если не хватает мощности — лучше дайте этому единственному контейнеру больше ресурсов, чем пытаться плодить клонов или дайте каждому запускать свой:&lt;/p&gt;
&lt;p&gt;Вот так можно установить лимиты или повысить их:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ssh dokku.datahub.mother resource:limit my-marimo-app --memory 2G --cpu 2&lt;/code&gt;&lt;/pre&gt;&lt;h4&gt;3. SSL в локальной сети&lt;/h4&gt;
&lt;p&gt;Браузеры блокируют микрофон и иногда WebSockets на HTTP-сайтах. Для локальной сети Let’s Encrypt не сработает (нет публичного IP), ну и его чуть сложнее запускать.&lt;br /&gt;
Я решил вопрос генерацией самоподписанного сертификата одной командой Dokku:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ssh dokku.datahub.mother certs:generate my-first-app my-first-app.dokku.datahub.mother&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Браузер ругается, но приложение работает полноценно.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Еще я прогнал стресс тесты&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ab -n 10000 -k -c 2000 ...&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Много они не показали, решением было подкрутить nginx, настроить кеш ssl, горизонтальное масштабирование не приносило больших результатов. я упирался в ограничения клиента при тестах нагрузки.&lt;/p&gt;
&lt;h3&gt;Итог&lt;/h3&gt;
&lt;p&gt;Dokku на домашнем сервере — это отличный инструмент.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Для простых API (Flask/FastAPI):&lt;/b&gt; Работает “из коробки” идеально.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Для сложных задач:&lt;/b&gt; Использование `uv` делает работу комфортной, а понимание разницы между *Stateless* и *Stateful* приложениями спасает от занудных ошибок и отладки.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Теперь my-first-app готово предсказывать возраст всем гостям на Новый год, а сервер готов к новым экспериментам! 🎄 Пожалуй оставлю его для будущих экспериментов. Прижился как-то быстро. Кстати у Dokku есть коммерческая PRO версия, а точнее не версия, а полноценный UI с кнопочками и стоит он 900$. &lt;a href="https://dokku.com/docs/enterprise/pro/"&gt;https://dokku.com/docs/enterprise/pro/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Пора чего-нибудь накатить новогоднего еще :)&lt;/p&gt;
</description>
</item>

<item>
<title>Эпоха «Толстого» браузера и революция локальных данных на WASM</title>
<guid isPermaLink="false">304</guid>
<link>https://gavrilov.info/all/epoha-tolstogo-brauzera-i-revolyuciya-lokalnyh-dannyh-na-wasm/</link>
<pubDate>Sat, 13 Dec 2025 01:20:55 +0300</pubDate>
<author></author>
<comments>https://gavrilov.info/all/epoha-tolstogo-brauzera-i-revolyuciya-lokalnyh-dannyh-na-wasm/</comments>
<description>
&lt;p&gt;В истории IT-архитектуры маятник всегда качался между двумя крайностями: централизацией и децентрализацией. Сначала были мейнфреймы (центр), затем «толстые» клиенты на ПК (локальные вычисления), а потом пришла эра веб-приложений, и индустрия массово мигрировала в Облака.&lt;/p&gt;
&lt;p&gt;Мы привыкли считать браузер лишь «тонким окном», интерфейсом, где вся магия, сложные вычисления и хранение происходят где-то далеко — на серверах AWS или Google. Но сегодня правила игры меняются. Благодаря технологиям WebAssembly (WASM), современному «железу» и новым подходам, браузер превращается в полноценную операционную систему для анализа данных или еще чего-то &lt;a href="https://blog.openreplay.com/ru/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE-%D0%BD%D0%BE%D0%B2%D0%B8%D1%87%D0%BA%D0%B0-%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0"&gt;blog.openreplay.com&lt;/a&gt;. Посмотрите статью о “Руководство по Разработке Local-First Приложений”.&lt;/p&gt;
&lt;h3&gt;Почему мы уходили в облака и почему возвращаемся?&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Эра миграции в облака:&lt;/b&gt;&lt;br /&gt;
В 2010-х локальные машины были «бутылочным горлышком». Чтобы обработать гигабайты данных, требовались серверные стойки. Облака давали бесконечную масштабируемость. Архитектура сводилась к простой формуле: *данные пользователя → загрузка через сеть (latency) → обработка на сервере ($$$) → результат обратно клиенту*.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Проблемы сегодняшнего дня:&lt;/b&gt;&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;Избыточность мощностей:&lt;/b&gt; Современный ноутбук аналитика (даже базовый MacBook Air на M-чипе) обладает вычислительной мощностью, сопоставимой с сервером десятилетней давности. Эти ресурсы простаивают, пока компании платят за облачные CPU.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Сетевые задержки и стоимость:&lt;/b&gt; Передать CSV-файл на 2 ГБ в облако для простой фильтрации или агрегации — это долго и дорого (ingress/egress трафик).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Приватность:&lt;/b&gt; Передача чувствительных отчетов или персональных данных на чужой сервер для разового анализа всегда несет риски утечки и нарушений регуляторики.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;b&gt;Решение: Приложения Local-First&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Технология WebAssembly (WASM) позволила запускать нативный код (C++, Rust, Go) прямо в песочнице браузера со скоростью, близкой к нативной &lt;a href="https://habr.com/ru/articles/892052"&gt;habr.com&lt;/a&gt;. Это породило новый класс ПО, которое выглядит как веб-сайт, но работает как десктопное приложение. Вы заходите на страницу, она загружает легковесный движок, и далее вы можете отключить интернет — приложение продолжит «перемалывать» ваши данные локально.&lt;/p&gt;
&lt;h3&gt;Новые герои: Сервер внутри вкладки&lt;/h3&gt;
&lt;p&gt;Уже сейчас существуют продукты, которые меняют представление о работе с данными. Они объединяют UX веб-приложений с мощностью десктопного софта, создавая ощущение, что сервер находится прямо у вас в RAM.&lt;/p&gt;
&lt;h4&gt;1. DataKit — Швейцарский нож аналитика&lt;/h4&gt;
&lt;p&gt;Проект &lt;b&gt;DataKit.page&lt;/b&gt; — яркий пример такой архитектуры. Это не просто “просмотрщик файлов”, это полноценная ETL/Analytics платформа, живущая в вашем браузере.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Как это работает:&lt;/b&gt; Вы перетаскиваете массивные файлы (CSV, JSON, Excel, Parquet) в окно. Они &lt;b&gt;не загружаются&lt;/b&gt; на внешний сервер. Браузер получает доступ к файлу через `File System Access API`, а движок (основанный на DuckDB WASM) монтирует их виртуально.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Функционал:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;SQL и Python в одном окне:&lt;/b&gt; Внутри работает не только SQL-движок, но и Python (через Pyodide). Вы можете использовать `pandas`, `polars`,  `numpy` и строить графики `matplotlib`, обращаясь к данным прямо с вашего диска.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;AI на борту:&lt;/b&gt; Интеграция с локальными LLM (через Ollama) или облачными провайдерами позволяет писать запросы на естественном языке, при этом сама схема и данные остаются у вас.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Умные форматы и коннекторы:&lt;/b&gt; Платформа «нативно» понимает Parquet и вложенные JSON, автоматически определяя типы данных и аномалии. Кроме того, она может подключаться к S3, Google Sheets и базам данных PostgreSQL, выполняя федеративные запросы.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;2. DuckDB Local UI — SQL без инсталляции&lt;/h4&gt;
&lt;p&gt;Команда DuckDB в сотрудничестве с MotherDuck выпустила официальный локальный UI, работающий через расширение. Это прямой ответ на боль пользователей консольных утилит и отличный пример гибридного подхода &lt;a href="https://habr.com/ru/companies/cinimex/articles/913878"&gt;habr.com&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Сценарий:&lt;/b&gt; Раньше, чтобы поработать с локальной базой данных, нужно было либо мучиться в CLI, либо ставить тяжелый DBeaver. Теперь одной командой `duckdb -ui` или SQL-вызовом `CALL start_ui();` запускается локальный веб-сервер и открывается современный Notebook-интерфейс.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Гибридность:&lt;/b&gt; Вы работаете локально, но интерфейс имеет встроенную бесшовную интеграцию с облачным сервисом MotherDuck. Если для разового анализа локальных ресурсов достаточно, вы делаете это приватно. Как только требуется коллаборация или более мощные вычисления, вы можете переключить контекст выполнения в облако в том же окне.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3. Marimo – тетрадки, почти тот же подход имеет&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://gavrilov.info/all/tetradki-nashe-vsyo-marimo-io-i-utochkadb/"&gt;https://gavrilov.info/all/tetradki-nashe-vsyo-marimo-io-i-utochkadb/&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;3. PGlite и PondPilot — Postgres и SQL-песочницы&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;PGlite:&lt;/b&gt; Этот проект идет еще дальше и компилирует полноценный PostgreSQL в WASM, позволяя запускать его в браузере или Node.js без эмуляции ОС &lt;a href="https://habr.com/ru/articles/873112"&gt;habr.com&lt;/a&gt;. Это идеально для тестирования, прототипирования и создания приложений, которые требуют совместимости с Postgres.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;PondPilot:&lt;/b&gt; Пример open-source SQL-редактора, построенного вокруг DuckDB-WASM &lt;a href="https://habr.com/ru/articles/913682"&gt;habr.com&lt;/a&gt;. Он позволяет быстро анализировать локальные файлы (CSV, Parquet, JSON), сохраняет историю, поддерживает вкладки и даже предлагает виджет для встраивания интерактивных SQL-примеров в блоги и документацию.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Сдвиг парадигмы: От DBeaver к Браузеру&lt;/h3&gt;
&lt;p&gt;Многие аналитики и инженеры привыкли к классическим клиентам баз данных (DBeaver, DataGrip). Это мощные, но «тяжелые» инструменты, требующие установки, настройки драйверов и обновлений. Новый WASM-тренд предлагает более гибкую альтернативу.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Сценарий «Мгновенной аналитики»:&lt;/b&gt;&lt;br /&gt;
Представьте, что вам прислали ссылку на лог-файл в S3 размером 5 ГБ или Parquet-дамп.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Старый путь:&lt;/b&gt; Скачать файл → Установить/открыть DBeaver → Настроить драйвер → Импортировать → Ждать загрузки → Писать SQL.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Новый путь (WASM):&lt;/b&gt; Открыть ссылку веб-приложения → Перетащить файл (или указать S3 URL) → Мгновенно писать SQL.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Еще вариант, лог 30ГБ и вы заказали функционал в другой команде, она с радостью сказала, что через два спринта сделает пайплайн за неделю, но ей надо требования. Вы их конечно написали на основе небольшого семпла строк из excel или на основе документации и отдали в разработку. А через месяц получили отличный пайплайн или, который не нужен или его нужно еще доработать.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Технологическая магия за кулисами:&lt;/b&gt;&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;Apache Arrow:&lt;/b&gt; Это скрытый герой революции. Бинарный колоночный формат Arrow позволяет передавать данные из SQL-движка (DuckDB) в JavaScript-интерфейс или Python-ячейку &lt;b&gt;без копирования и сериализации памяти&lt;/b&gt; (Zero-copy). Это обеспечивает мгновенную реакцию интерфейса на миллионах строк — то, чего раньше было невозможно добиться при работе с DOM. (все помним D3JS)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Федеративные запросы:&lt;/b&gt; Локальное приложение умеет «ходить» в интернет. Вы можете написать `SELECT * FROM ‘s3://my-bucket/file.parquet’` прямо из браузера. Движок скачает только нужные байты (range requests), обработает их локально и покажет результат. Данные не оседают на промежуточных серверах разработчика софта.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Органическое масштабирование и новая экономика&lt;/h3&gt;
&lt;p&gt;Для архитекторов платформ данных этот тренд открывает удивительную экономическую модель &lt;b&gt;«Bring Your Own Compute» или «Client-side computing» (Принеси Свои Вычисления)&lt;/b&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Масштабирование без усилий:&lt;/b&gt; Вам не нужно создавать сложный кластер, чтобы тысячи пользователей могли фильтровать свои Excel-файлы. Вы просто хостите статические JS/WASM файлы на CDN.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Органическая нагрузка:&lt;/b&gt; Вычислительная мощность вашего “облака” растет линейно с количеством пользователей, потому что каждый новый пользователь приносит свой CPU и RAM. Пользователи выключают компьютеры — ваше “облако” естественным образом уменьшается.&lt;/li&gt;
&lt;li&gt;Коллаборация и Воспроизводимость:**
&lt;ul&gt;
  &lt;li&gt;*Разовая задача:* Сделал анализ локально, закрыл вкладку — данные исчезли из памяти (полная приватность).&lt;/li&gt;
  &lt;li&gt;*Командная работа:* Написал SQL/Python код локально, сохранил его (текст скрипта весит килобайты) и отправил коллеге. Коллега открыл ту же ссылку, подгрузился код, и магия вычислений произошла уже на его машине над теми же данными (если они в общем S3) или над его локальной копией.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Итого&lt;/h3&gt;
&lt;p&gt;Мы движемся к миру, где браузер — это не тонкий клиент, а &lt;b&gt;универсальная песочница для гибридных вычислений&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Разработчикам и Архитекторам:&lt;/b&gt;&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;Присмотритесь к Serverless 2.0:&lt;/b&gt; Истинный `serverless` — это не AWS Lambda, за которую вы платите. Это когда сервера нет вообще, а код исполняется на клиенте (`client-side computing`). Это дешевле, быстрее для пользователя и безопаснее, удобно разрабатывать и обновлять код.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Privacy-first как преимущество:&lt;/b&gt; Позиционируйте такие решения как безопасные по умолчанию. Аргумент “Ваши данные никогда не покидают ваш компьютер” становится решающим для Enterprise-сектора.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Гибридная архитектура:&lt;/b&gt; Не отказывайтесь от сервера полностью. Пусть браузер берет на себя интерактивную работу, парсинг и предобработку, а сервер подключается для тяжелых “батчей” или работы с петабайтами данных в том же привычном окне.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;b&gt;Пользователям и Аналитикам:&lt;/b&gt;&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;Осваивайте инструменты:&lt;/b&gt; Попробуйте &lt;a href="https://datakit.page,"&gt;https://datakit.page,&lt;/a&gt; &lt;a href="https://app.pondpilot.io"&gt;https://app.pondpilot.io&lt;/a&gt; или &lt;a href="https://shell.duckdb.org"&gt;DuckDB WASM Shell&lt;/a&gt; для разведочного анализа данных. Это часто быстрее, чем запускать локальный Jupyter.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Используйте облачные хранилища напрямую:&lt;/b&gt; Учитесь подключать S3, Google Sheets и другие облачные источники напрямую к таким инструментам. Это дает мощь облачного хранения в сочетании со скоростью и приватностью локального интерфейса.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ренессанс локальных вычислений начался. Ваш браузер способен на большее, чем просто отображать HTML. Он становится вашей персональной дата-лабораторией.&lt;/p&gt;
</description>
</item>

<item>
<title>Обзор pg_clickhouse: Как объединить мощь ClickHouse и удобство PostgreSQL</title>
<guid isPermaLink="false">302</guid>
<link>https://gavrilov.info/all/obzor-pg-clickhouse-kak-obedinit-mosch-clickhouse-i-udobstvo-pos/</link>
<pubDate>Fri, 12 Dec 2025 23:27:54 +0300</pubDate>
<author></author>
<comments>https://gavrilov.info/all/obzor-pg-clickhouse-kak-obedinit-mosch-clickhouse-i-udobstvo-pos/</comments>
<description>
&lt;p&gt;Недавно компания ClickHouse представила новый инструмент — расширение &lt;b&gt;pg_clickhouse&lt;/b&gt;. Это событие стало ответом на одну из самых частых болей разработчиков: сложность миграции аналитических запросов из классических реляционных баз данных в колоночные аналитические СУБД.&lt;/p&gt;
&lt;p&gt;Оригинал статьи: &lt;a href="https://clickhouse.com/blog/introducing-pg_clickhouse"&gt;A Postgres extension for querying ClickHouse&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;или берем сразу тут: &lt;a href="https://github.com/ClickHouse/pg_clickhouse/releases"&gt;https://github.com/ClickHouse/pg_clickhouse/releases&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;В этой статье мы разберем, что представляет собой этот инструмент, в чем его фундаментальный смысл для архитектуры приложений и куда проект хочет двигаться дальше.&lt;/p&gt;
&lt;h3&gt;Проблема: Данные переехали, а запросы остались&lt;/h3&gt;
&lt;p&gt;Типичный сценарий роста стартапа выглядит так: приложение строится на PostgreSQL. В какой-то момент данных (логов, метрик, транзакций) становится так много, что аналитические отчеты начинают тормозить. Обычные реплики для чтения (read replicas) перестают спасать.&lt;/p&gt;
&lt;p&gt;Команда принимает решение внедрить ClickHouse. Перенос данных сейчас решается просто (например, с помощью ClickPipes), но возникает другая проблема:&lt;br /&gt;
&lt;b&gt;Как быть с тысячами строк SQL-кода в ORM, дашбордах и скриптах, которые написаны под синтаксис Postgres?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Переписывание всей логики приложения под диалект ClickHouse — это месяцы работы и риск новых багов. Именно эту проблему решает `pg_clickhouse`.&lt;/p&gt;
&lt;h3&gt;Что такое pg_clickhouse?&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;pg_clickhouse&lt;/b&gt; — это расширение для PostgreSQL (Foreign Data Wrapper — FDW), которое позволяет создавать в Postgres «внешние таблицы», фактически ссылающиеся на таблицы в ClickHouse.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Суть технологии:&lt;/b&gt; Вы пишете запросы на привычном SQL диалекте PostgreSQL, обращаясь к этим таблицам. Расширение на лету транслирует запрос в диалект ClickHouse, отправляет его на исполнение в аналитическую базу и возвращает результат обратно в Postgres.&lt;/p&gt;
&lt;p&gt;Для приложения это выглядит прозрачно: таблицы ClickHouse могут находиться просто в отдельной схеме (schema). Достаточно изменить путь поиска (`search_path`), и старые запросы начнут работать с данными, лежащими в ClickHouse.&lt;/p&gt;
&lt;h3&gt;В чем «соль»: Технология Pushdown&lt;/h3&gt;
&lt;p&gt;Главная ценность и сложность такого расширения заключается не просто в соединении двух баз, а в эффективности этого соединения. Этот механизм называется &lt;b&gt;Pushdown&lt;/b&gt; (спуск или делегирование вычислений).&lt;/p&gt;
&lt;p&gt;Если вы делаете запрос `SELECT sum(price) FROM orders`, есть два пути его выполнения:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;Плохой путь:&lt;/b&gt; Postgres выкачивает *все* миллионы строк из ClickHouse и сам считает сумму. Это уничтожает весь смысл аналитической базы.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Путь pg_clickhouse:&lt;/b&gt; Расширение понимает, что это агрегация, и отправляет в ClickHouse команду «посчитай сумму». Обратно по сети возвращается только одна цифра.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Умная трансляция функций&lt;/h4&gt;
&lt;p&gt;Авторы `pg_clickhouse` пошли дальше простой трансляции. Они научили расширение переводить специфические функции Postgres в аналоги ClickHouse, даже если синтаксис кардинально отличается.&lt;/p&gt;
&lt;p&gt;*Пример:*&lt;br /&gt;
В Postgres есть функция для расчета медианы: `percentile_cont(0.5) WITHIN GROUP (ORDER BY price)`.&lt;br /&gt;
В ClickHouse такой синтаксис не поддерживается.&lt;br /&gt;
`pg_clickhouse` автоматически переписывает это в нативную функцию ClickHouse: `quantile(0.5)(price)`.&lt;/p&gt;
&lt;p&gt;Также поддерживается трансляция конструкции `FILTER (WHERE ...)` в специфичные для ClickHouse комбинаторы `-If` (например, `sumIf`).&lt;/p&gt;
&lt;h4&gt;Ускорение подзапросов (Semi-Join)&lt;/h4&gt;
&lt;p&gt;В версии 0.1.0 была реализована поддержка &lt;b&gt;SEMI JOIN Pushdown&lt;/b&gt;. Это критически важно для запросов с конструкцией `WHERE ... IN (SELECT ...)` или `EXISTS`. Тесты на бенчмарке TPC-H показали, что благодаря этому время выполнения сложных запросов сократилось с нескольких секунд (или даже минут) до миллисекунд, так как фильтрация теперь происходит на стороне ClickHouse.&lt;/p&gt;
&lt;h3&gt;Планы развития (Roadmap)&lt;/h3&gt;
&lt;p&gt;Проект находится в стадии активной разработки (версия 0.1.0), и команда ClickHouse нацелена на полное покрытие аналитических сценариев.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ключевые пункты плана:&lt;/b&gt;&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;Полное покрытие TPC-H и ClickBench:&lt;/b&gt; Оптимизация планировщика, чтобы все стандартные аналитические бенчмарки выполнялись с максимальным pushdown-ом.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Расширенная поддержка функций:&lt;/b&gt; Трансляция *всех* агрегатных и обычных функций PostgreSQL в их эквиваленты в ClickHouse.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DML операции:&lt;/b&gt; Поддержка легковесных удалений (`DELETE`) и обновлений (`UPDATE`), а также пакетной вставки данных через `COPY`.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Управление настройками:&lt;/b&gt; Возможность передавать настройки ClickHouse (settings) через команды создания пользователей или серверов в Postgres.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Passthrough-режим:&lt;/b&gt; Возможность отправить произвольный SQL-запрос (на диалекте ClickHouse) и получить результат в виде таблицы, обходя парсер Postgres.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Заключение&lt;/h3&gt;
&lt;p&gt;`pg_clickhouse` — это попытка построить «лучшее из двух миров»: взять скорость колоночной СУБД и объединить её с богатой экосистемой и инструментарием PostgreSQL. Это позволяет разработчикам плавно мигрировать нагрузку, не переписывая приложение с нуля, и оставляет Postgres в качестве единой точки входа для данных.&lt;/p&gt;
</description>
</item>

<item>
<title>KubeVela: Современная доставка приложений</title>
<guid isPermaLink="false">300</guid>
<link>https://gavrilov.info/all/kubevela-sovremennaya-dostavka-prilozheniy/</link>
<pubDate>Mon, 08 Dec 2025 01:10:10 +0300</pubDate>
<author></author>
<comments>https://gavrilov.info/all/kubevela-sovremennaya-dostavka-prilozheniy/</comments>
<description>
&lt;p&gt;В мире Cloud-Native технологий Kubernetes стал операционной системой облака. Однако, как было отмечено в материалах про Rainbond, «ванильный» Kubernetes сложен для разработчиков. Если Rainbond решает эту проблему, предлагая готовый &lt;b&gt;PaaS «из коробки»&lt;/b&gt; с упором на UI, то &lt;b&gt;KubeVela&lt;/b&gt; подходит к задаче с другой стороны: это &lt;b&gt;двигатель для построения собственной платформы&lt;/b&gt; (Platform Engine), основанный на модели OAM (Open Application Model).&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-01.09.35.png" width="558" height="632" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;a href="https://kubevela.io"&gt;https://kubevela.io&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;KubeVela позволяет создавать простые и ориентированные на приложение (Application-centric) абстракции, сохраняя при этом полную гибкость и управляемость через код (Infrastructure as Code).&lt;/p&gt;
&lt;h3&gt;Основная философия: OAM и разделение ответственности&lt;/h3&gt;
&lt;p&gt;В основе KubeVela лежит стандарт &lt;b&gt;OAM (Open Application Model)&lt;/b&gt;. Эта модель разделяет ответственность между двумя ролями:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;Разработчиĸи (Developers):&lt;/b&gt; Описывают &lt;b&gt;что&lt;/b&gt; нужно запустить (образ контейнера, порт, параметры запуска).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Платформенные инженеры (Platform Engineers):&lt;/b&gt; Описывают &lt;b&gt;ĸаĸ&lt;/b&gt; это должно работать (инфраструктура, политики масштабирования, Ingress, безопасность).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Математически модель приложения в KubeVela можно выразить формулой:&lt;/p&gt;
&lt;p&gt;$$ Application = Components + Traits + Workflow $$&lt;/p&gt;
&lt;p&gt;Где:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Components&lt;/b&gt;: Основная рабочая нагрузка (Workload). Например, Docker-образ, Helm-чарт или даже Terraform-модуль.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Traits&lt;/b&gt; (Свойства/Черты): Операционные характеристики, подключаемые к компоненту. Например: `ingress`, `scaler`, `sidecar`.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Workflow&lt;/b&gt;: Цепочка шагов доставки (Deploy -&gt; Test -&gt; Promote).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Пример манифеста KubeVela&lt;/h4&gt;
&lt;p&gt;Вместо десятков Kubernetes-ресурсов (Deployment, Service, Ingress, HPA), разработчик пишет один упрощенный файл:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: website
spec:
  components:
    - name: frontend
      type: webservice
      properties:
        image: nginx
      traits:
        - type: scaler
          properties:
            replicas: 3
        - type: gateway
          properties:
            domain: test.example.com&lt;/code&gt;&lt;/pre&gt;&lt;h3&gt;Сравнение: KubeVela vs Rainbond&lt;/h3&gt;
&lt;p&gt;Основываясь на прошлой статье про &lt;a href="https://gavrilov.info/all/rainbond-oblachnaya-platforma-dlya-upravleniya-prilozheniyami/"&gt;Rainbond&lt;/a&gt;, сделаем детальное сравнение. Оба инструмента решают проблему сложности Kubernetes, но нацелены на разные аудитории.&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="0" class="e2-text-table"&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;Хараĸтеристиĸа&lt;/td&gt;
&lt;td style="text-align: center"&gt;Rainbond&lt;/td&gt;
&lt;td style="text-align: center"&gt;KubeVela&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Философия&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;No-Code / Low-Code PaaS.&lt;/b&gt; Готовая платформа с полным UI. Ориентация на визуальное управление.&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Platform Engine / IaC.&lt;/b&gt; Инструментарий для создания платформы. Ориентация на GitOps и конфигурацию как код.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Входной порог&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Очень низкий.&lt;/b&gt; Не нужно знать Kubernetes. Можно собрать приложение из `.jar` или исходного кода одной кнопкой.&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Средний.&lt;/b&gt; Требует понимания концепций OAM. Инженерам платформы нужно знать CUE (язык конфигурации).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Гибĸость&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Ограничена возможностями UI платформы. Сложно кастомизировать внутреннюю логику деплоя нестандартных вещей.&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Высочайшая.&lt;/b&gt; Любая абстракция настраивается через X-Definitions (на языке CUE). Можно описать любой ресурс K8s или Terraform.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Интеграция IaC&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Базируется на внутренних механизмах.&lt;/td&gt;
&lt;td style="text-align: center"&gt;Нативная интеграция с &lt;b&gt;Terraform&lt;/b&gt;. KubeVela может разворачивать облачные базы данных (AWS RDS, Cloud SQL) как часть приложения.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Multi-cluster&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Есть управление несколькими кластерами, но фокус на единой панели управления.&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Сильная сторона.&lt;/b&gt; Мощный движок развертывания приложений сразу в несколько кластеров с политиками (Placement Policies).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Для ĸого&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;SMB, стартапы, команды без сильной экспертизы в K8s, желающие получить опыт Heroku на своих серверах.&lt;/td&gt;
&lt;td style="text-align: center"&gt;Enterprise, Platform Engineering команды, желающие построить &lt;b&gt;свой&lt;/b&gt; внутренний PaaS (IDP) по стандартам Spotify/Netflix.&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;h4&gt;Сравнение с другими аналогами&lt;/h4&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;Crossplane&lt;/b&gt;:
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Crossplane&lt;/b&gt; фокусируется на «Инфраструктуре» (создание баз данных, кластеров, сетей в облаках через K8s API).&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;KubeVela&lt;/b&gt; фокусируется на «Приложении».&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Итог:&lt;/b&gt; Они часто используются вместе. KubeVela использует Crossplane для заказа ресурсов.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;b&gt;ArgoCD / Flux (GitOps)&lt;/b&gt;:
&lt;ul&gt;
  &lt;li&gt;Это инструменты непрерывной доставки (CD), которые синхронизируют Git и K8s.&lt;/li&gt;
  &lt;li&gt;KubeVela &lt;b&gt;может&lt;/b&gt; использовать их под капотом или использовать свой собственный Workflow-контроллер для сложных сценариев (например, «засуспендить деплой, пока не пройдет тест, затем отправить уведомление в Slack»).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="3"&gt;
&lt;li&gt;&lt;b&gt;Backstage&lt;/b&gt;:
&lt;ul&gt;
  &lt;li&gt;Backstage — это «Портал» (Frontend). KubeVela — это «Движок» (Backend).&lt;/li&gt;
  &lt;li&gt;Существует плагин `vela-backstage`, который позволяет визуализировать приложения KubeVela внутри интерфейса Backstage. Это идеальная связка для построения IDP.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Ключевые возможности KubeVela&lt;/h3&gt;
&lt;h4&gt;1. Программируемая абстраĸция (CUE Language)&lt;/h4&gt;
&lt;p&gt;В отличие от Helm, где шаблонизация — это просто подстановка строк, KubeVela использует язык &lt;b&gt;CUE&lt;/b&gt; (Configure Unify Execute). Это позволяет платформенным инженерам создавать «умные» шаблоны.&lt;/p&gt;
&lt;p&gt;Пример логики на CUE внутри KubeVela: «Если пользователь не указал CPU, автоматически поставить `requests: 100m`, но если это ‘prod’ окружение, то поставить `500m`».&lt;/p&gt;
&lt;h4&gt;2. Единый Workflow для всего&lt;/h4&gt;
&lt;p&gt;KubeVela позволяет оркестрировать не только Kubernetes-ресурсы. В одном пайплайне вы можете:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Создать S3 бакет в AWS (через Terraform/Crossplane).&lt;/li&gt;
&lt;li&gt;Дождаться готовности.&lt;/li&gt;
&lt;li&gt;Задеплоить Deployment в Kubernetes.&lt;/li&gt;
&lt;li&gt;Отправить уведомление в Telegram.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;3. Отсуствие «Config Drift»&lt;/h4&gt;
&lt;p&gt;KubeVela активно борется с дрейфом конфигураций, постоянно сверяя желаемое состояние приложения с реальным (State Reconciliation).&lt;/p&gt;
&lt;h3&gt;Итог и реĸомендации&lt;/h3&gt;
&lt;p&gt;Выбор между Rainbond и KubeVela зависит от того, &lt;b&gt;ĸто&lt;/b&gt; будет обслуживать платформу и &lt;b&gt;ĸаĸие&lt;/b&gt; цели стоят перед бизнесом.&lt;/p&gt;
&lt;h4&gt;Выбирайте Rainbond, если:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;У вас небольшая или средняя команда разработчиков.&lt;/li&gt;
&lt;li&gt;Нет выделенного отдела Platform Engineering / DevOps.&lt;/li&gt;
&lt;li&gt;Нужно «вчера» перенести легаси (Java/PHP/Monolith) в контейнеры без переписывания кода.&lt;/li&gt;
&lt;li&gt;Вам нужен визуальный интерфейс для управления связями сервисов и мониторинга без написания YAML.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Цель:&lt;/b&gt; Быстрый Time-to-market с минимальными затратами на инженерию.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Выбирайте KubeVela, если:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Вы строите серьезный Internal Developer Platform (IDP) в крупной компании.&lt;/li&gt;
&lt;li&gt;У вас есть инженеры, знающие Kubernetes, но вы хотите скрыть его сложность от продуктовых разработчиков.&lt;/li&gt;
&lt;li&gt;Вам нужен строгий GitOps подход (все через репозиторий).&lt;/li&gt;
&lt;li&gt;Требуется гибридное развертывание: часть в K8s, часть в Serverless, часть в облачных RDS.&lt;/li&gt;
&lt;li&gt;Вы планируете использовать Backstage в качестве фронтенда.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Цель:&lt;/b&gt; Стандартизация, масштабируемость, полный контроль над абстракциями (Platform as Product).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Рекомендация по стеĸу для Enterprise:&lt;/b&gt;&lt;br /&gt;
Для максимальной эффективности современный стек платформенной инженерии часто выглядит так:&lt;br /&gt;
$$ \text{Backstage (UI)} + \text{KubeVela (Engine)} + \text{Crossplane (Infra)} $$&lt;br /&gt;
Эта связка дает удобство портала (как в Rainbond), мощь оркестрации (KubeVela) и управление облаком (Crossplane).&lt;/p&gt;
</description>
</item>

<item>
<title>Сравнительный анализ self-hosted S3-совместимых хранилищ</title>
<guid isPermaLink="false">299</guid>
<link>https://gavrilov.info/all/sravnitelny-analiz-self-hosted-s3-sovmestimyh-hranilisch/</link>
<pubDate>Mon, 08 Dec 2025 00:50:17 +0300</pubDate>
<author></author>
<comments>https://gavrilov.info/all/sravnitelny-analiz-self-hosted-s3-sovmestimyh-hranilisch/</comments>
<description>
&lt;p&gt;Четкое сравнение семи self-hosted S3-совместимых решений для хранения данных.&lt;/p&gt;
&lt;p&gt;Оригинал тут: &lt;a href="https://www.repoflow.io/blog/benchmarking-self-hosted-s3-compatible-storage-a-practical-performance-comparison"&gt;Команда RepoFlow. 9 августа 2025 г.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Локальное (self-hosted) объектное хранилище — это отличный выбор для разработчиков и команд, которые хотят иметь полный контроль над хранением и доступом к своим данным. Независимо от того, заменяете ли вы Amazon S3, размещаете внутренние файлы, создаете CI-конвейер или обслуживаете репозитории пакетов, уровень хранения может значительно повлиять на скорость и стабильность.&lt;/p&gt;
&lt;p&gt;Мы протестировали семь популярных решений для объектного хранения, поддерживающих протокол S3. Цель состояла в том, чтобы сравнить их производительность в идентичных условиях, используя реальные операции загрузки и скачивания.&lt;/p&gt;
&lt;h3&gt;Тестируемые решения&lt;/h3&gt;
&lt;p&gt;Каждое из следующих решений было развернуто с помощью Docker на одном и том же сервере без монтирования томов и без специальной настройки:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;`MinIO`&lt;/li&gt;
&lt;li&gt;`Ceph`&lt;/li&gt;
&lt;li&gt;`SeaweedFS`&lt;/li&gt;
&lt;li&gt;`Garage`&lt;/li&gt;
&lt;li&gt;`Zenko` (Scality Cloudserver)&lt;/li&gt;
&lt;li&gt;`LocalStack`&lt;/li&gt;
&lt;li&gt;`RustFS`&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Скорость последовательного скачивания&lt;/h3&gt;
&lt;p&gt;Средняя скорость скачивания одного файла разного размера.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.42.26.png" width="1270" height="656" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости последовательного скачивания для малых файлов размером 50 КБ и 200 КБ. По оси Y — скорость в МБ/с, по оси X — размер файла. Сравниваются Garage, Localstack, Minio, Zenko, Ceph, RustFS, SeaweedFS.]&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.42.57.png" width="1264" height="650" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости последовательного скачивания для больших файлов размером 10 МБ, 50 МБ, 100 МБ и 1 ГБ. По оси Y — скорость в МБ/с, по оси X — размер файла. Сравниваются те же решения.]&lt;/p&gt;
&lt;h3&gt;Скорость последовательной загрузки&lt;/h3&gt;
&lt;p&gt;Средняя скорость загрузки одного файла разного размера.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.43.18.png" width="1278" height="648" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости последовательной загрузки для малых файлов размером 50 КБ и 200 КБ. По оси Y — скорость в МБ/с, по оси X — размер файла. Сравниваются те же решения.]&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.43.34.png" width="1252" height="636" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости последовательной загрузки для больших файлов размером 10 МБ, 50 МБ, 100 МБ и 1 ГБ. По оси Y — скорость в МБ/с, по оси X — размер файла. Сравниваются те же решения.]&lt;/p&gt;
&lt;h3&gt;Производительность листинга&lt;/h3&gt;
&lt;p&gt;Измеряет время, необходимое для получения списка всех 2000 тестовых объектов в бакете с использованием разных размеров страницы (100, 500 и 1000 результатов на запрос).&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.44.02.png" width="1280" height="648" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График производительности листинга. По оси Y — время в мс, по оси X — количество результатов на страницу (100, 500, 1000). Сравниваются те же решения.]&lt;/p&gt;
&lt;h3&gt;Скорость параллельной загрузки&lt;/h3&gt;
&lt;p&gt;Измеряет время, необходимое для параллельной загрузки нескольких файлов одинакового размера. Скорость загрузки рассчитывается по формуле:&lt;/p&gt;
&lt;p&gt;(number of files × file size) ÷ total time&lt;/p&gt;
&lt;h4&gt;Скорость параллельной загрузки – файлы 1 МБ&lt;/h4&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.44.22.png" width="1304" height="748" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости параллельной загрузки файлов размером 1 МБ. По оси Y — скорость в МБ/с, по оси X — количество параллельных потоков (5, 10, 20). Сравниваются те же решения.]&lt;/p&gt;
&lt;h4&gt;Скорость параллельной загрузки – файлы 10 МБ&lt;/h4&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.45.06.png" width="1254" height="650" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости параллельной загрузки файлов размером 10 МБ. По оси Y — скорость в МБ/с, по оси X — количество параллельных потоков (5, 10, 20). Сравниваются те же решения.]&lt;/p&gt;
&lt;h4&gt;Скорость параллельной загрузки – файлы 100 МБ&lt;/h4&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.45.23.png" width="1278" height="652" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости параллельной загрузки файлов размером 100 МБ. По оси Y — скорость в МБ/с, по оси X — количество параллельных потоков (5, 10, 20). Сравниваются те же решения.]&lt;/p&gt;
&lt;h3&gt;Скорость параллельного скачивания&lt;/h3&gt;
&lt;p&gt;Измеряет время, необходимое для параллельного скачивания нескольких файлов одинакового размера. Скорость скачивания рассчитывается по формуле:&lt;/p&gt;
&lt;p&gt;(number of files × file size) ÷ total time&lt;/p&gt;
&lt;h4&gt;Скорость параллельного скачивания – файлы 1 МБ&lt;/h4&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.45.45.png" width="1278" height="650" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости параллельного скачивания файлов размером 1 МБ. По оси Y — скорость в МБ/с, по оси X — количество параллельных потоков (5, 10, 20). Сравниваются те же решения.]&lt;/p&gt;
&lt;h4&gt;Скорость параллельного скачивания – файлы 10 МБ&lt;/h4&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.46.02.png" width="1280" height="644" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости параллельного скачивания файлов размером 10 МБ. По оси Y — скорость в МБ/с, по оси X — количество параллельных потоков (5, 10, 20). Сравниваются те же решения.]&lt;/p&gt;
&lt;h4&gt;Скорость параллельного скачивания – файлы 100 МБ&lt;/h4&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.46.17.png" width="1284" height="670" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости параллельного скачивания файлов размером 100 МБ. По оси Y — скорость в МБ/с, по оси X — количество параллельных потоков (5, 10, 20). Сравниваются те же решения.]&lt;/p&gt;
&lt;h3&gt;Как проводились тесты&lt;/h3&gt;
&lt;p&gt;Для каждого решения мы:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Загружали и скачивали файлы 7 различных размеров: 50 КБ, 200 КБ, 1 МБ, 10 МБ, 50 МБ, 100 МБ и 1 ГБ.&lt;/li&gt;
&lt;li&gt;Повторяли каждую загрузку и скачивание 20 раз для получения стабильных средних значений.&lt;/li&gt;
&lt;li&gt;Измеряли среднюю скорость загрузки и скачивания в мегабайтах в секунду (МБ/с).&lt;/li&gt;
&lt;li&gt;Выполняли все тесты на одной и той же машине, используя стандартный Docker-контейнер для каждой системы хранения, без внешних томов, монтирования или кешей.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Все решения тестировались в одноузловой конфигурации для обеспечения согласованности. Хотя некоторые системы (например, `Ceph`) спроектированы для лучшей производительности в кластерной среде, мы использовали одинаковые условия для всех решений, чтобы гарантировать справедливое сравнение.&lt;/p&gt;
&lt;h3&gt;Заключительные мысли&lt;/h3&gt;
&lt;p&gt;Эти результаты показывают, как каждое решение вело себя в нашей конкретной тестовой среде с одним узлом. Их следует рассматривать как относительное сравнение соотношений производительности, а не как абсолютные жесткие значения, которые будут применимы в любой конфигурации.&lt;/p&gt;
&lt;p&gt;При выборе подходящего решения для хранения данных учитывайте типичные размеры файлов, которые вы будете хранить, поскольку одни системы лучше справляются с маленькими файлами, а другие преуспевают с большими. Также подумайте об основных возможностях, которые вам требуются, таких как масштабируемость, репликация, долговечность или встроенный графический интерфейс. Наконец, помните, что производительность может сильно отличаться между одноузловыми и многоузловыми кластерами.&lt;/p&gt;
&lt;p&gt;Наши тесты предоставляют базовый уровень для понимания того, как эти системы соотносятся в идентичных условиях, но ваша реальная производительность будет зависеть от вашего конкретного оборудования, рабочей нагрузки и конфигурации.&lt;/p&gt;
</description>
</item>

<item>
<title>Open Source порталы разработки и что такое IDP</title>
<guid isPermaLink="false">282</guid>
<link>https://gavrilov.info/all/open-source-portaly-razrabotki-i-chto-takoe-idp/</link>
<pubDate>Wed, 24 Sep 2025 23:12:48 +0300</pubDate>
<author></author>
<comments>https://gavrilov.info/all/open-source-portaly-razrabotki-i-chto-takoe-idp/</comments>
<description>
&lt;p&gt;На рынке внутренних порталов разработчика существует один явный лидер в категории open source — &lt;b&gt;Backstage&lt;/b&gt;. Большинство других популярных решений, таких как Port, являются коммерческими (SaaS) продуктами, хотя они и могут предлагать open source компоненты для интеграции &lt;a href="https://internaldeveloperplatform.org/developer-portals/port/"&gt;https://internaldeveloperplatform.org/developer-portals/port/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Поэтому основной фокус в open source сегменте приходится именно на Backstage, который был создан в Spotify и позже передан в Cloud Native Computing Foundation (CNCF).&lt;/p&gt;
&lt;h5&gt;&lt;b&gt;Ключевое решение: Backstage&lt;/b&gt;&lt;/h5&gt;
&lt;p&gt;Backstage — это не готовый продукт, а &lt;b&gt;фреймворк&lt;/b&gt; для создания собственного портала разработчика &lt;a href="https://cloudomation.com/cloudomation-blog/5-internal-developer-portals-and-what-software-engineers-say-about-them/."&gt;https://cloudomation.com/cloudomation-blog/5-internal-developer-portals-and-what-software-engineers-say-about-them/.&lt;/a&gt; Это его главное преимущество и одновременно главный недостаток. Он предоставляет базовые строительные блоки и архитектуру, на основе которых компании могут построить портал, идеально соответствующий их процессам и инструментам.&lt;/p&gt;
&lt;p&gt;Кстати очень интересная статья про порталы, платформы и их различия.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-09-24-v-22.11.04.png" width="2084" height="1010" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Картинка от портала  Cortex – ну прям огонь сайт у них &lt;a href="https://www.cortex.io."&gt;https://www.cortex.io.&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://a.gavrilov.info/data/posts/Cloudomation%20Guide%20-%20Building%20Internal%20Developer%20Platforms.pdf"&gt;Cloudomation Guide – Building Internal Developer Platforms.pdf&lt;/a&gt; есть еще гайд обобщенный.  А основная концепция конечно тут &lt;a href="https://internaldeveloperplatform.org"&gt;https://internaldeveloperplatform.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Основные компоненты Backstage:&lt;/b&gt;&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;Software Catalog:&lt;/b&gt; Единый реестр для всех программных активов компании (микросервисы, библиотеки, веб-сайты, ML-модели и т.д.). Позволяет централизовать метаданные, информацию о владельцах, зависимостях и состоянии.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Software Templates (Scaffolder):&lt;/b&gt; Инструмент для создания новых проектов по заранее подготовленным шаблонам. Это стандартизирует первоначальную настройку сервисов, CI/CD пайплайнов, репозиториев и т.д.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TechDocs:&lt;/b&gt; Решение для создания, поддержки и отображения технической документации по принципу “docs-as-code”, когда документация хранится вместе с кодом.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Плагины:&lt;/b&gt; Экосистема Backstage строится вокруг плагинов. Существует огромное количество готовых плагинов для интеграции с AWS, Kubernetes, GitHub, CI/CD системами, системами мониторинга и многими другими. Если нужного плагина нет, его можно разработать самостоятельно.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Сравнение подходов: Build vs. Buy&lt;/h4&gt;
&lt;p&gt;Поскольку настоящий open source конкурент у Backstage практически отсутствует, наиболее корректно сравнить его не с другим open source решением, а с подходом использования коммерческих SaaS-платформ, ярким представителем которых является Port.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Port** — это коммерческий продукт, который предлагает готовый к использованию портал. Его философия заключается в гибкой модели данных на основе “blueprints” (шаблонов сущностей) и взаимосвязей между ними. Port позволяет быстро агрегировать данные из различных источников и построить каталог без необходимости развертывания и поддержки сложной инфраструктуры &lt;a href="https://www.qovery.com/blog/10-best-internal-developer-portals-to-consider/"&gt;10-best-internal-developer-portals-to-consider&lt;/a&gt;. Хотя ядро продукта закрыто, его интеграции и экспортеры данных являются открытыми [internaldeveloperplatform.org](&lt;a href="https://internaldeveloperplatform.org/developer-portals/port/)."&gt;https://internaldeveloperplatform.org/developer-portals/port/).&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Сравнительная таблица: Backstage vs. Коммерческие IDP (на примере Port)&lt;/h4&gt;
&lt;table cellpadding="0" cellspacing="0" border="0" class="e2-text-table"&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;Критерий&lt;/td&gt;
&lt;td style="text-align: center"&gt;Backstage (Open Source)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Коммерческие решения типа Port (SaaS)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Модель лицензирования&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Open Source (Apache 2.0). Бесплатно.&lt;/td&gt;
&lt;td style="text-align: center"&gt;Коммерческая (SaaS). Платная подписка.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Философия / Подход&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Фреймворк для &lt;b&gt;создания&lt;/b&gt; портала. “Построй свой дом”.&lt;/td&gt;
&lt;td style="text-align: center"&gt;Готовый продукт для &lt;b&gt;настройки&lt;/b&gt; портала. “Купи и настрой квартиру”.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Сложность внедрения&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Высокая.&lt;/b&gt; Требуется разработка, развертывание и поддержка. Есть кривая обучения [cloudomation.com](&lt;a href="https://cloudomation.com/cloudomation-blog/5-internal-developer-portals-and-what-software-engineers-say-about-them/)."&gt;https://cloudomation.com/cloudomation-blog/5-internal-developer-portals-and-what-software-engineers-say-about-them/).&lt;/a&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Низкая / Средняя.&lt;/b&gt; Быстрый старт, не требует своей инфраструктуры.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Требования к команде&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Нужна выделенная команда платформенных инженеров для разработки и поддержки портала.&lt;/td&gt;
&lt;td style="text-align: center"&gt;Может управляться одним или несколькими DevOps-инженерами. Не требует навыков фронтенд-разработки.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: right"&gt;&lt;b&gt;Гибкость и кастомизация&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Максимальная.&lt;/b&gt; Можно изменить и доработать абсолютно все, создать уникальные плагины и логику.&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Высокая, но ограничена&lt;/b&gt; возможностями платформы. Кастомизация интерфейса и логики возможна в рамках, заданных вендором.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Инфраструктура&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Требует собственной инфраструктуры для хостинга (обычно Kubernetes), базы данных, CI/CD для самого портала.&lt;/td&gt;
&lt;td style="text-align: center"&gt;Не требует. Хостится и управляется вендором.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Экосистема и интеграции&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Огромная, управляемая сообществом. Большое количество open source плагинов.&lt;/td&gt;
&lt;td style="text-align: center"&gt;Управляется вендором. Интеграции создаются вендором, но часто есть открытые API и экспортеры данных.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Общая стоимость владения (TCO)&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Скрытая и высокая.&lt;/b&gt; Лицензия бесплатна, но основные затраты — это зарплаты команды разработки и поддержки, а также стоимость инфраструктуры.&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Прозрачная и предсказуемая.&lt;/b&gt; Основные затраты — стоимость подписки.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Поддержка&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Сообщество (Slack, GitHub Issues).&lt;/td&gt;
&lt;td style="text-align: center"&gt;Коммерческая поддержка от вендора (SLA, выделенный менеджер).&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Выбор между open source фреймворком вроде `Backstage` и коммерческим продуктом — это классический выбор между &lt;b&gt;“Build” (создавать)&lt;/b&gt; и &lt;b&gt;“Buy” (покупать)&lt;/b&gt;.&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;`Backstage` — это стратегическая инвестиция.&lt;/b&gt; Это мощное решение для крупных или технологически зрелых компаний, у которых уже есть выделенная платформенная команда и которые готовы вкладывать ресурсы в создание идеально подогнанного под себя инструмента. `Backstage` дает полный контроль, избавляет от зависимости от вендора (vendor lock-in) и позволяет решать уникальные задачи, которые не могут покрыть коробочные продукты.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;b&gt;Коммерческие IDP (такие как Port) — это тактическое решение для быстрого результата.&lt;/b&gt; Они идеально подходят для малых и средних компаний, или для крупных организаций, которые хотят быстро запустить портал и проверить гипотезы, не формируя для этого отдельную команду разработки. Этот подход обеспечивает быстрый старт, предсказуемые затраты и перекладывает всю головную боль по поддержке и развитию платформы на плечи вендора.&lt;/li&gt;
&lt;/ol&gt;
&lt;h5&gt;Рекомендации&lt;/h5&gt;
&lt;p&gt;&lt;b&gt;Выбирайте `Backstage`, если:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;У вас есть (или вы готовы создать) выделенная команда платформенных инженеров.&lt;/li&gt;
&lt;li&gt;У вас есть уникальные и сложные внутренние процессы, которые не укладываются в рамки готовых решений.&lt;/li&gt;
&lt;li&gt;Вы хотите максимальной гибкости для интеграции со своими самописными инструментами.&lt;/li&gt;
&lt;li&gt;Вы — крупная организация, для которой затраты на команду разработки портала оправданы в долгосрочной перспективе.&lt;/li&gt;
&lt;li&gt;Принципиально важно избежать зависимости от стороннего вендора.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Рассмотрите коммерческие решения (типа Port), если:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Вам нужен результат “здесь и сейчас” с минимальными первоначальными усилиями.&lt;/li&gt;
&lt;li&gt;У вас нет ресурсов на формирование команды для разработки собственного портала.&lt;/li&gt;
&lt;li&gt;Стандартного или предложенного вендором функционала достаточно для решения ваших задач.&lt;/li&gt;
&lt;li&gt;Вы предпочитаете прозрачную модель оплаты (SaaS-подписка) вместо скрытых затрат на разработку и поддержку.&lt;/li&gt;
&lt;li&gt;Вам важна гарантированная коммерческая поддержка с четким SLA.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Вне зависимости от выбора, начинать следует с определения ключевых проблем разработчиков, которые должен решить портал. Инструмент — это лишь средство для достижения цели, будь то упрощение создания новых сервисов, централизация знаний или автоматизация рутинных задач.&lt;/p&gt;
&lt;p&gt;Ниже небольшой гайд на основе дока выше Cloudomation Guide – Building Internal Developer Platforms.pdf&lt;/p&gt;
&lt;h4&gt;Руководство&lt;/h4&gt;
&lt;h2&gt;Создание внутренних платформ для разработчиков: лучшие практики, инструменты и стратегические выводы для технических лидов&lt;/h2&gt;
&lt;p&gt;***&lt;/p&gt;
&lt;h4&gt;Кратко о чем все это?&lt;/h4&gt;
&lt;p&gt;Ниже представлен обзор внутренних платформ для разработчиков (Internal Developer Platforms, или IDP). Поскольку инженерные команды сталкиваются с растущей сложностью, IDP становятся решением для снижения разногласий между разработкой и эксплуатацией.&lt;/p&gt;
&lt;p&gt;Независимо от того, оцениваете ли вы готовые платформы или создаете собственное решение, этот документ предлагает ценные сведения и тщательно подобранные ресурсы, которые помогут вам эффективно пройти путь внедрения IDP.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Основные тезисы:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;IDP&lt;/b&gt; — это платформы самообслуживания, созданные инженерами платформ для оптимизации разработки программного обеспечения за счет автоматизации развертываний, конфигураций и управления средами.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Преимущества:&lt;/b&gt; Сокращение времени, затрачиваемого на настройку и отладку, снижение когнитивной нагрузки на разработчиков, повышение надежности и соответствия требованиям, а также более высокая операционная эффективность.&lt;/li&gt;
&lt;li&gt;Каждая IDP уникальна, но обычно состоит из фронтенда, бэкенда и других интегрированных инструментов.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Ключевые возможности IDP&lt;/b&gt; должны включать: API, пользовательский интерфейс, автоматизацию, механизмы ограничений (например, политики), документацию и возможность обнаружения сервисов (discoverability).&lt;/li&gt;
&lt;li&gt;Для создания по-настоящему целостной IDP необходимо сосредоточиться на интеграции всех необходимых инструментов и сервисов.&lt;/li&gt;
&lt;li&gt;При внедрении IDP могут возникнуть следующие &lt;b&gt;проблемы:&lt;/b&gt; попытка сделать все сразу (и не достичь ничего), нехватка ресурсов и бюджета, невозможность поддерживать каталог программного обеспечения в актуальном состоянии и недостаток коммуникации между людьми.&lt;/li&gt;
&lt;li&gt;Обосновывая необходимость внедрения IDP, подкрепляйте свои аргументы данными и связывайте их с рисками и результатами, которые больше всего волнуют ваше руководство.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;***&lt;/p&gt;
&lt;h4&gt;Содержание&lt;/h4&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Что такое IDP?&lt;/li&gt;
&lt;li&gt;Зачем нужны IDP?&lt;/li&gt;
&lt;li&gt;Как работают IDP?&lt;/li&gt;
&lt;li&gt;Обоснование необходимости IDP для бизнеса&lt;/li&gt;
&lt;li&gt;Лучшие практики для создания IDP&lt;/li&gt;
&lt;li&gt;Инструменты платформенной инженерии для создания IDP&lt;/li&gt;
&lt;li&gt;3 проблемы при создании IDP&lt;/li&gt;
&lt;li&gt;Ресурсы&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h4&gt;1. Что такое IDP?&lt;/h4&gt;
&lt;p&gt;Внутренние платформы для разработчиков (IDP) лежат в основе дисциплины платформенной инженерии (Platform Engineering).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;Пояснение:&lt;/b&gt;&lt;br /&gt;
Внутренняя платформа для разработчиков — это, по сути, продукт, предназначенный для разработчиков внутри организации. Она предоставляет им доступ по принципу самообслуживания к технической инфраструктуре и рабочим процессам, таким как конвейеры развертывания или облачные ресурсы. &lt;a href="https://dev.to/e77/what-is-an-internal-developer-platforms-17o9"&gt;пост на dev.to&lt;/a&gt;. Ключевая идея — относиться к своей внутренней платформе как к продукту, а к разработчикам — как к клиентам. &lt;a href="https://dev.to/akshaymittal143/from-cloud-chaos-to-developer-delight-your-practical-guide-to-building-an-internal-developer-3o7n"&gt;еще пост с dev.to&lt;/a&gt;. Это позволяет им не ждать выполнения заявок в отдел эксплуатации и не нести полную ответственность за инфраструктуру, как в модели «you build it, you run it».&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;IDP призваны решить вечную проблему, которая преследует всех разработчиков ПО: программное обеспечение чрезвычайно сложно, и ни один человек не может знать всего, что требуется для создания целого программного продукта.&lt;/p&gt;
&lt;h5&gt;Понимание внутренних платформ для разработчиков&lt;/h5&gt;
&lt;p&gt;На схеме ниже показаны ключевые концепции, лежащие в основе IDP.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-09-24-v-22.46.02.png" width="996" height="796" alt="" /&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Подходы «Инфраструктура как код» (As-Code Approaches):&lt;/b&gt; Акцент на автоматизацию и документирование через код.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;«Золотые пути» (Golden Paths):&lt;/b&gt; Предоставление заранее определенных, проверенных и поддерживаемых путей для выполнения типовых задач (например, создание нового сервиса, развертывание в среде). Разработчики могут легко следовать этим путям, будучи уверенными в результате.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Самообслуживание (Self-Service):&lt;/b&gt; Позволяет разработчикам самостоятельно использовать платформу без необходимости обращаться в другие команды.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Управление как продуктом (Managed like a product):&lt;/b&gt; У платформы есть свой жизненный цикл выпуска, владелец продукта и дорожная карта развития.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Инженеры платформы (Platform Engineers):&lt;/b&gt; Создают и поддерживают IDP, фокусируясь на ценности для разработчиков.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Разработчики ПО (Software Developers):&lt;/b&gt; Основные пользователи, которые взаимодействуют с IDP.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Функции IDP&lt;/h5&gt;
&lt;p&gt;IDP предоставляют функции, которые являются центральными в повседневной работе разработчиков программного обеспечения.&lt;/p&gt;
&lt;p&gt;Это лишь примеры функций, которые может иметь IDP. Каждая IDP уникальна для организации, которая ее использует. Часто они создаются с нуля или сильно кастомизируются под нужды компании.&lt;/p&gt;
&lt;hr /&gt;
&lt;h4&gt;2. Зачем нужны IDP?&lt;/h4&gt;
&lt;p&gt;По мере усложнения процесса поставки ПО организации сталкиваются с фрагментированными практиками DevOps, несогласованными рабочими процессами и операционной неэффективностью. От разработчиков ожидают, что они будут управлять инфраструктурой, конвейерами CI/CD, политиками безопасности и мониторингом, что часто приводит к когнитивной перегрузке и снижению производительности. Именно здесь на помощь приходят платформенная инженерия и IDP.&lt;/p&gt;
&lt;h5&gt;Раскрывая мощь IDP&lt;/h5&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;Ускорение циклов разработки:&lt;/b&gt; Оптимизированное развертывание сокращает время, затрачиваемое на настройку и отладку.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Снижение когнитивной нагрузки на разработчиков:&lt;/b&gt; Упрощенное управление инфраструктурой позволяет сосредоточиться на написании кода.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Повышение надежности и соответствия требованиям (Compliance):&lt;/b&gt; Обеспечивает последовательное применение политик безопасности и соответствия во всех развертываниях.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Повышение инженерной эффективности:&lt;/b&gt; Автоматизирует управление ресурсами, повышая операционную эффективность.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h4&gt;3. Как работают IDP?&lt;/h4&gt;
&lt;p&gt;Каждая IDP уникальна, но есть некоторые общие характеристики, присущие большинству из них. В самом простом виде каждая IDP состоит примерно из трех «частей»:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Фронтенд IDP&lt;/li&gt;
&lt;li&gt;Бэкенд IDP&lt;/li&gt;
&lt;li&gt;Множество других инструментов, интегрированных с IDP&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-09-24-v-22.44.01.png" width="1062" height="432" alt="" /&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Фронтенд:&lt;/b&gt; Пользовательский интерфейс для доступа разработчиков к IDP. Часто это внутренний портал разработчика (Internal Developer Portal).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Бэкенд:&lt;/b&gt; Управляет интеграцией и автоматизацией с другими инструментами. Эту роль часто выполняет оркестратор платформы.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Интегрированные инструменты:&lt;/b&gt; Различные инструменты, которые работают с IDP для выполнения ключевых процессов (CI/CD, мониторинг, безопасность и т.д.).&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Архитектура&lt;/h5&gt;
&lt;p&gt;Следующая диаграмма архитектуры, основанная на модели CNOE (Cloud Native Operational Excellence), дает более детальное представление.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-09-24-v-22.39.52.png" width="972" height="368" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://gavrilov.info/all/rainbond-oblachnaya-platforma-dlya-upravleniya-prilozheniyami/"&gt;Ранее писал про Rainbond китайский, там немного другой акцент, но их архитектура тоже интересная, а так как это опенсорс, то можно свой такой запилить, но переводить придется :) &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;В этой диаграмме «Портал разработчика» (`Developer Portal`) является фронтендом IDP. Компонент «Оркестрация рабочих процессов» (`Workflow Orchestration`) будет бэкендом.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-09-24-v-22.40.18.png" width="946" height="674" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Ниже приведен более подробный пример архитектуры, показывающий, какие типы инструментов и сервисов могут быть частью IDP, сгруппированные по функциональным уровням (плоскостям).&lt;/p&gt;
&lt;h5&gt;Ключевая функциональность IDP&lt;/h5&gt;
&lt;p&gt;Основная идея IDP — объединить инструменты, сервисы, конфигурации и другую информацию в одном месте. Инженеры-программисты, а также другие заинтересованные стороны (например, команды эксплуатации) должны иметь возможность использовать IDP как единую точку входа для обнаружения и взаимодействия с приложениями и инфраструктурой компании.&lt;/p&gt;
&lt;p&gt;Таким образом, бэкенд IDP, как правило, должен быть сильным в двух типах функциональности: &lt;b&gt;№1 Интеграция&lt;/b&gt; и &lt;b&gt;№2 Автоматизация&lt;/b&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Интеграция:&lt;/b&gt; Объединение разнообразных инструментов и сервисов в единую систему.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Автоматизация:&lt;/b&gt; Связывание и оркестрация существующих конвейеров автоматизации.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h4&gt;4. Обоснование необходимости IDP для бизнеса&lt;/h4&gt;
&lt;p&gt;По мере того как организации масштабируют и модернизируют поставку своего программного обеспечения, сложность управления инфраструктурой, рабочими процессами разработчиков и управлением (governance) растет экспоненциально.&lt;/p&gt;
&lt;p&gt;Внутренняя платформа для разработчиков (IDP) предлагает стратегический ответ на этот вызов, обеспечивая более быструю доставку, более сильное управление и снижение операционных рисков. Однако, чтобы получить одобрение руководства, крайне важно сформулировать преимущества IDP в терминах бизнеса.&lt;/p&gt;
&lt;p&gt;Вот как можно обосновать необходимость IDP, обращаясь к четырем ключевым проблемам руководителей: &lt;b&gt;Масштаб, Затраты, Риски и Управление.&lt;/b&gt;&lt;/p&gt;
&lt;h5&gt;1. Масштаб: Предоставление организации возможности двигаться быстрее&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Проблема руководителя:&lt;/b&gt; Как мы можем масштабировать наши инженерные команды и поставку ПО без узких мест?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Обоснование IDP:&lt;/b&gt; IDP повышает производительность, абстрагируя повторяющиеся, низкоценные задачи. Она дает командам приложений возможность самостоятельно обслуживать инфраструктуру, CI/CD, тестирование и развертывание стандартизированным и безопасным способом.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Бизнес-результаты:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Повышение скорости работы команд приложений и организации в целом.&lt;/li&gt;
  &lt;li&gt;Быстрая доставка большей бизнес-ценности, поскольку команда разработки может сосредоточиться на коде.&lt;/li&gt;
  &lt;li&gt;Возможность масштабирования без линейного увеличения найма DevOps-инженеров.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Как это сделать:&lt;/b&gt; Оцените, сколько времени команды приложений тратят на борьбу с инфраструктурой и инструментами развертывания, и сколько — на работу над своим основным приложением. Используйте эти данные, чтобы обосновать необходимость IDP и показать, как она может высвободить время для основной задачи, что напрямую влияет на бизнес-ценность. Визуализируйте это, чтобы подчеркнуть, каким объемом инфраструктуры приходится управлять командам приложений, и сравните это с тем, как это могло бы выглядеть.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;*(В оригинальном документе здесь показаны два слайда из презентации PlatformCon23, представляющие “текущее состояние” и “будущее состояние”. Текущее состояние показывает, как команда из 50 разработчиков приложений вынуждена вручную взаимодействовать с разрозненным набором инструментов. Будущее состояние показывает, как команда платформы предоставляет единый, унифицированный слой, который абстрагирует эту сложность, позволяя командам приложений работать более эффективно.)*&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-09-24-v-22.42.47.png" width="1008" height="1222" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Обратите внимание сколько кубиков вверху, а сколько внизу. В России кстати очень быстро вырывается вперед разработка на фреймворках streamlit, они почти ничего не делают повторно, если развернули хоть раз его с авторизацией и ипишками – в основном только ui колбасят. Но часто такие инициативы не вырастают сильно, их обычно давят в зародыше, так как они не соответствуют общему формату и не хотят делать все остальные кубики или не умеют – в общем похожи они на shadow it. Но если же им каким, то образом это удалось, то потом их не остановить и придя к ним через год, можно увидел второй прод, полностью зеркальный :) и сделал его кто-то один вечерами.&lt;/p&gt;
&lt;h5&gt;2. Затраты: Оптимизация за счет масштабирования и повторного использования&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Проблема руководителя:&lt;/b&gt; Как нам контролировать растущие расходы на облако и инженерию?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Обоснование IDP:&lt;/b&gt; Платформенная инженерия сокращает дублирование усилий и консолидирует управление инфраструктурой. IDP способствует экономически эффективному масштабированию, обеспечивая прозрачность и контроль на протяжении всего жизненного цикла ПО. Централизация позволяет совместно использовать ресурсы, проактивно отслеживать затраты и автоматически высвобождать неиспользуемые активы (например, тестовые среды).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Бизнес-результаты:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Улучшенная прозрачность и предсказуемость затрат.&lt;/li&gt;
  &lt;li&gt;Снижение общей стоимости владения (TCO) за счет оптимизации ресурсов.&lt;/li&gt;
  &lt;li&gt;Большая рентабельность инвестиций (ROI) в облачную инфраструктуру.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Важный момент:&lt;/b&gt; Команды платформы могут отслеживать метрики использования и отключать неиспользуемые среды.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3. Риски: Сокращение точек отказа и операционных угроз&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Проблема руководителя:&lt;/b&gt; Какие риски угрожают нашей способности поставлять продукт надежно и безопасно?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Обоснование IDP:&lt;/b&gt; IDP минимизирует операционные риски и риски безопасности путем стандартизации процессов по всем направлениям — конвейеры CI/CD, развертывание, наблюдаемость (observability), оповещения и аутентификация.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Бизнес-результаты:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Снижение риска сбоев в продакшене.&lt;/li&gt;
  &lt;li&gt;Централизация ключевых сервисов, таких как развертывание, управление идентификацией и логирование.&lt;/li&gt;
  &lt;li&gt;Принудительное применение политик безопасности и соответствия на уровне платформы.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Примеры устраняемых рисков:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Задержки в поставке из-за нестабильных конвейеров.&lt;/li&gt;
  &lt;li&gt;Утечки данных из-за неверно настроенных систем аутентификации.&lt;/li&gt;
  &lt;li&gt;Непрохождение аудита из-за несогласованного логирования или дрифта соответствия требованиям.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;4. Управление (Governance): Обеспечение согласованности и соответствия требованиям в масштабе&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Проблема руководителя:&lt;/b&gt; Как нам поддерживать контроль, не замедляя команды?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Обоснование IDP:&lt;/b&gt; С IDP управление становится встроенным. От шаблонов до API, команды платформы могут кодировать стандарты и лучшие практики непосредственно в опыт разработчика.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Бизнес-результаты:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Проактивное управление и применение политик.&lt;/li&gt;
  &lt;li&gt;Улучшенная аудитопригодность и соответствие нормативным требованиям.&lt;/li&gt;
  &lt;li&gt;Формирование культуры инженерного совершенства.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Подкрепление доводов данными&lt;/h5&gt;
&lt;p&gt;Ключевым фактором для вашего бизнес-обоснования являются данные. Проведите опрос в вашей инженерной организации, чтобы собрать информацию, например, о времени, затрачиваемом на инфраструктурные задачи по сравнению с разработкой новой функциональности.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Итоговые мысли: Что не дает спать руководителям?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;При формировании своего предложения обращайтесь непосредственно к рискам и результатам, которые больше всего волнуют ваших руководителей. Например:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Скорость выхода на рынок (Speed to market):&lt;/b&gt; Сможем ли мы поставлять продукт быстрее конкурентов?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Надежность:&lt;/b&gt; Выдержат ли наши системы нагрузку?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Безопасность и соответствие требованиям (Security &amp; Compliance):&lt;/b&gt; Уязвимы ли мы для взломов или аудитов?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Масштабируемость:&lt;/b&gt; Сможем ли мы расти, не теряя контроля?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Внутренняя платформа для разработчиков — это не просто технический инструмент, это стратегический актив. С правильной постановкой вопроса, данными и видением вы можете продемонстрировать, как хорошо реализованная IDP поддерживает не только инженерию, но и весь бизнес.&lt;/p&gt;
&lt;hr /&gt;
&lt;h4&gt;5. Лучшие практики для создания IDP&lt;/h4&gt;
&lt;p&gt;Этот раздел основан на идеях, вдохновленных видео Виктора Фарчича «От нуля до полностью работающей платформы для разработчиков за 5 шагов!». Он описывает не столько шаги, сколько ключевые возможности, которые должна иметь IDP, чтобы быть полезной.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;5 ключевых возможностей IDP (по версии Виктора Фарчича):&lt;/b&gt;&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;API&lt;/li&gt;
&lt;li&gt;Управление состоянием (State management)&lt;/li&gt;
&lt;li&gt;Одноразовые действия / Рабочие процессы (One-shot actions / Workflows)&lt;/li&gt;
&lt;li&gt;RBAC и Политики (RBAC &amp; Policies)&lt;/li&gt;
&lt;li&gt;Пользовательские интерфейсы (опционально)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;b&gt;Наш взгляд на ключевые возможности (немного измененный и дополненный):&lt;/b&gt;&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;API:&lt;/b&gt; Программный интерфейс для взаимодействия с платформой.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Пользовательские интерфейсы (не опционально):&lt;/b&gt; Удобный способ для разработчиков взаимодействовать с платформой.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Автоматизация:&lt;/b&gt; Включает как одноразовые действия (например, запуск сборки), так и управление состоянием (например, поддержание среды в нужном состоянии).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Ограничения (Constraints):&lt;/b&gt; Политики, управление доступом на основе ролей (RBAC) и т.д.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Документация и обнаруживаемость (Discoverability):&lt;/b&gt; Возможность легко находить сервисы, их владельцев и документацию.&lt;/li&gt;
&lt;/ol&gt;
&lt;h5&gt;Как это поможет мне построить платформу?&lt;/h5&gt;
&lt;p&gt;Если вы подумаете о проблемах, с которыми вы недавно сталкивались как инженер платформы или DevOps-инженер, вы, вероятно, сможете соотнести их с одной из описанных возможностей.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Некоторые примеры:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Если у вас проблемы с простоями инстансов или случайными высокими затратами из-за оставленных облачных ресурсов, у вас недостаточные возможности по &lt;b&gt;управлению состоянием&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;Если у вас проблемы с тем, что у инженеров-программистов нет доступа к нужной им инфраструктуре, или с тем, что младшие инженеры вмешиваются в развертывания, в которые им не следует вмешиваться, вы плохо управляете &lt;b&gt;ограничениями&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;Если ваши разработчики не могут самостоятельно запустить систему на основе feature-ветки или запустить сборку и тест для определенного коммита, вам нужно взглянуть на ваши возможности &lt;b&gt;автоматизации одноразовых действий&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;Если ваши инженеры-программисты просто не используют предоставляемые вами API и сервисы, вам, вероятно, следует взглянуть на предоставляемые вами &lt;b&gt;пользовательские интерфейсы&lt;/b&gt; или проверить, &lt;b&gt;обнаруживаемы / документированы&lt;/b&gt; ли ваши сервисы.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Цель и ценность этих ключевых возможностей — помочь вам понять, почему вы продолжаете терпеть неудачи в некоторых вопросах, и как вы можете начать исправлять ситуацию таким образом, чтобы это было долговечно и устойчиво управляемо.&lt;/p&gt;
&lt;hr /&gt;
&lt;h4&gt;6. Инструменты платформенной инженерии для создания IDP&lt;/h4&gt;
&lt;p&gt;В этой статье рассматривается, как структурировать IDP, с разбивкой по ключевым компонентам и с примерами инструментов, которые вы можете использовать.&lt;/p&gt;
&lt;h5&gt;Категоризация инструментов и компонентов&lt;/h5&gt;
&lt;p&gt;Мы классифицируем эти инструменты, используя «референсную архитектуру», популяризированную `platformengineering.org`. Эта структура разбивает экосистему на пять основных компонентов, известных как «плоскости» (`planes`):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Плоскость управления разработчика (`Developer Control Plane`):&lt;/b&gt; Все компоненты, через которые разработчики взаимодействуют с платформой. Обычно включает GUI/порталы, контроль версий, облачные среды разработки (CDE), а также стандарты конфигурации, которые разработчики поддерживают сами.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Плоскость интеграции и доставки (`Integration &amp; Delivery Plane`):&lt;/b&gt; Здесь происходит вся автоматизация. Инструменты CI/CD, автоматизация инфраструктуры и другие оркестраторы платформы обычно являются частью этой плоскости.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Плоскость мониторинга и логирования (`Monitoring &amp; Logging Plane`):&lt;/b&gt; Как следует из названия, здесь находятся все инструменты наблюдаемости (observability).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Плоскость безопасности (`Security Plane`):&lt;/b&gt; Управление секретами, инструменты политик и другие инструменты безопасности.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Плоскость ресурсов (`Resource Plane`):&lt;/b&gt; Вычислительные ресурсы и хранилища.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Пример: Создание внутренней платформы для разработчиков&lt;/h5&gt;
&lt;p&gt;Вот разбивка инструментов, которые вы могли бы использовать для создания IDP. Важное замечание: существует множество доступных инструментов. Упомянутые здесь — лишь примеры.&lt;/p&gt;
&lt;h5&gt;Плоскость управления разработчика&lt;/h5&gt;
&lt;p&gt;&lt;b&gt;№1 Портал разработчика (`Developer Portal`)&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Почему это важно:&lt;/b&gt; Внутренние порталы разработчиков служат единым интерфейсом и позволяют разработчикам, командам и инженерам-менеджерам обнаруживать сервисы, отслеживать владение, применять стандарты и улучшать программное обеспечение.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Инструменты для рассмотрения:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Backstage:&lt;/b&gt; Популярный open-source фреймворк для создания порталов разработчиков, созданный Spotify.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Port:&lt;/b&gt; Платформа для создания внутреннего портала разработчика с no-code подходом, что облегчает быстрый старт.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Cortex:&lt;/b&gt; Корпоративный внутренний портал разработчика, созданный для ускорения пути к инженерному совершенству. [cloudomation.com](&lt;a href="https://cloudomation.com/cloudomation-blog/5-internal-developer-portals-and-what-software-engineers-say-about-them/)"&gt;https://cloudomation.com/cloudomation-blog/5-internal-developer-portals-and-what-software-engineers-say-about-them/)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Atlassian Compass:&lt;/b&gt; Компонентный каталог для отслеживания компонентов и команд, которые за ними стоят.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;№2 Облачные среды разработки (`Cloud Development Environments, CDEs`)&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Почему это важно:&lt;/b&gt; CDE — это удаленные среды разработки, размещенные в облаке или локально. CDE позволяют разработчикам работать в согласованных, стандартизированных средах, что устраняет проблемы «у меня на машине все работает».&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Инструменты для рассмотрения:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Gitpod:&lt;/b&gt; Позволяет запускать безопасные, контекстно-насыщенные среды для разработчиков в корпоративном масштабе.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Coder:&lt;/b&gt; Предоставляет безопасные среды разработки для разработчиков и их агентов.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Плоскость интеграции и доставки&lt;/h5&gt;
&lt;p&gt;&lt;b&gt;№1 Конвейер CI (`CI Pipeline`)&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Почему это важно:&lt;/b&gt; Автоматизирует проверку кода, тестирование и обеспечивает более быстрые циклы обратной связи.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Инструменты для рассмотрения:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;GitHub Actions:&lt;/b&gt; Нативный CI для GitHub с настраиваемыми рабочими процессами.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;CircleCI:&lt;/b&gt; Высокомасштабируемый CI с поддержкой расширенного параллелизма.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Buildkite:&lt;/b&gt; CI, ориентированный на разработчиков, с масштабируемой инфраструктурой.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;№2 Конвейер CD (`CD Pipeline`)&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Почему это важно:&lt;/b&gt; Конвейеры CD автоматизируют безопасное, повторяемое развертывание программного обеспечения.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Инструменты для рассмотрения:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Argo CD:&lt;/b&gt; GitOps-ориентированная доставка для Kubernetes.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Flux:&lt;/b&gt; Контроллер GitOps для Kubernetes.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Octopus Deploy:&lt;/b&gt; Подходит для мультиоблачных и локальных (on-prem) сред.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;№3 Оркестратор платформы (`Platform Orchestrator`)&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Почему это важно:&lt;/b&gt; Инструменты оркестрации предоставляют логику для связывания рабочих процессов между различными инструментами и сервисами.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Инструменты для рассмотрения:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Humanitec:&lt;/b&gt; Оркестратор платформы, предоставляющий динамические среды. Является лидером рынка IDP. [internaldeveloperplatform.org](&lt;a href="https://internaldeveloperplatform.org/)"&gt;https://internaldeveloperplatform.org/)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Собственные решения/фреймворки:&lt;/b&gt; Многие команды используют общие инструменты, такие как &lt;b&gt;Argo Workflows&lt;/b&gt; или пишут собственные скрипты на Python/Go для объединения своих процессов.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Плоскость мониторинга и логирования&lt;/h5&gt;
&lt;p&gt;&lt;b&gt;№1 Наблюдаемость (`Observability`)&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Почему это важно:&lt;/b&gt; Инструменты наблюдаемости обеспечивают видимость состояния, производительности и надежности приложений и инфраструктуры.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Инструменты для рассмотрения:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Prometheus:&lt;/b&gt; Набор инструментов для мониторинга и оповещения, особенно для Kubernetes.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Grafana:&lt;/b&gt; Инструмент для создания дашбордов, часто используемый в паре с Prometheus.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Datadog:&lt;/b&gt; Облачный мониторинг и аналитика.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Плоскость безопасности&lt;/h5&gt;
&lt;p&gt;&lt;b&gt;№1 Менеджер секретов (`Secret Manager`)&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Почему это важно:&lt;/b&gt; Менеджеры секретов безопасно хранят и распространяют учетные данные, ключи API и другие конфиденциальные данные.&lt;/li&gt;
&lt;li&gt;Инструменты для рассмотрения:**
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;HashiCorp Vault:&lt;/b&gt; Ведущее в отрасли решение для управления секретами.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;AWS Secrets Manager / Azure Key Vault / GCP Secret Manager:&lt;/b&gt; Решения от крупных облачных провайдеров.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Sealed Secrets (Bitnami):&lt;/b&gt; Шифрует секреты для Kubernetes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Вывод: Строительные блоки, а не список покупок&lt;/h5&gt;
&lt;p&gt;Если из этой главы и стоит что-то вынести, так это то, что платформенная инженерия — это не выбор самых модных инструментов с полки, а подбор правильных строительных блоков для создания бесшовного опыта для разработчиков. Думайте меньше о том, «какой инструмент мне выбрать?», и больше о том, «как я могу спроектировать платформу, которая будет незаметной и мощной для моих разработчиков и принесет пользу бизнесу?»&lt;/p&gt;
&lt;p&gt;Настоящая магия происходит тогда, когда эти инструменты перестают быть отдельными частями пазла и становятся частью целостной платформы для разработчиков, где разработчики едва замечают лежащую в основе сложность, потому что платформа работает с ними, а не против них.&lt;/p&gt;
&lt;hr /&gt;
&lt;h4&gt;7. 3 проблемы при создании IDP&lt;/h4&gt;
&lt;p&gt;Этот раздел основан на идеях Гая Менахема (Guy Menahem), архитектора решений в Amazon.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Проблема 1: Попытаться поймать всех зайцев одним выстрелом&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Многие команды платформенной инженерии пытаются сделать все сразу и в итоге не достигают ничего. Объединение всех инструментов в единое решение может привести к тому, что вы упустите основной рабочий процесс пользователя, что приведет к отказу от платформы. Вместо этого оттачивайте свои продуктовые навыки, чтобы понять, какую пользу пользователи извлекут из платформы, даже если на начальном этапе она будет включать всего несколько инструментов.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Проблема 2: Оценка затрат на создание и эксплуатацию&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Создание ценной платформы требует ресурсов, включая выделенную команду платформенной инженерии, бюджет на облачную инфраструктуру и сотрудничество. Также необходимо учитывать операционные расходы, такие как обновления и патчи безопасности. Оценивайте ресурсы, определяя размер и продолжительность работы команды, сосредотачиваясь на минимально жизнеспособном продукте (MVP) и рассчитывая облачные и операционные затраты.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Проблема 3: Создание и управление каталогом программного обеспечения&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Управление каталогом программного обеспечения, который представляет собой сложную базу данных ПО, систем и документации, может быть непростой задачей. Вовлечение всех команд в обновление и поддержание каталога имеет решающее значение для его качества и принятия. Упростите управление каталогом, автоматизировав сбор информации, принудительно обновляя его в процессах CI/CD и поощряя ежедневное использование платформы.&lt;/p&gt;
&lt;h5&gt;Наш взгляд&lt;/h5&gt;
&lt;p&gt;Проблемы, которые описывает Гай, реальны. Однако одна фундаментальная истина, которую он не упоминает, заключается в том, что &lt;b&gt;большинство проблем при создании IDP не являются техническими.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Вместо этого наиболее распространенные проблемы возникают из-за &lt;b&gt;недостатка коммуникации между людьми.&lt;/b&gt; Это типично для многих инженерных инициатив, поскольку инженеры, как правило, имеют очень специфический взгляд на инструменты, которые они создают, и этот взгляд часто сильно отличается от точки зрения их пользователей.&lt;/p&gt;
&lt;p&gt;То же самое часто происходит и в командах платформенной инженерии: они могут создавать ценную автоматизацию и сервисы, но если их нелегко использовать, в них отсутствуют ключевые функции, необходимые инженерам-программистам, или они просто не решают самые большие проблемы, с которыми сталкиваются разработчики, то они просто не будут использовать IDP.&lt;/p&gt;
&lt;p&gt;Самое важное, что вы должны делать как инженер платформы, — &lt;b&gt;регулярно спрашивать своих инженеров-программистов!&lt;/b&gt; Просите их протестировать то, что вы создаете, сказать, полезно ли это для них, и если ответ «нет», то изменяйте то, что вы создаете, чтобы ваши инженеры-программисты захотели это использовать.&lt;/p&gt;
&lt;p&gt;В конце концов, в этом и заключается вся суть IDP: она должна быть полезной для инженеров-программистов.&lt;/p&gt;
&lt;hr /&gt;
&lt;h4&gt;8. &lt;b&gt;Ресурсы и ссылки&lt;/b&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://platformengineering.org"&gt;https://platformengineering.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://internaldeveloperplatform.org"&gt;https://internaldeveloperplatform.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.infoq.com/platformengineering"&gt;https://www.infoq.com/platformengineering&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Сообщества&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reddit – &lt;a href="https://www.reddit.com/r/platform_engineering"&gt;https://www.reddit.com/r/platform_engineering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Platformers – &lt;a href="https://platformers.community"&gt;https://platformers.community&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Рассылки&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://platformweekly.com"&gt;https://platformweekly.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;Ранее еще писал немного на другую тему, но про разработку и стандарты апишек,интересно, мало у кого они есть, выглядят вот так: &lt;a href="https://gavrilov.info/all/analiz-zalando-restful-api-and-event-guidelines/"&gt;https://gavrilov.info/all/analiz-zalando-restful-api-and-event-guidelines/&lt;/a&gt;&lt;/p&gt;
</description>
</item>


</channel>
</rss>