ImageMaker 05
Відповідайте «цитата» на будь-яке повідомлення й отримуйте готове зображення приблизно за секунду — і той самий сервіс тихо рендерить для другого продукту.
Люди цитують одне одного скриншотами. Це замінюється одним словом.
У групових чатах люди цитують одне одного скриншотами — некрасиво, нечитабельно, і поза застосунком таким не поділишся. ImageMaker замінює це одним словом: відповідаєте «цитата» на будь-яке повідомлення, і бот повертає верстане зображення з текстом, аватаром автора, його ім’ям і датою на підібраному тлі.
Рішення, яке подвоїло цінність. Замість того щоб лишити це окремою іграшкою, я зробив із нього спільний рендер-рушій для другого продукту компанії. Той самий сервіс тепер обслуговує власну аудиторію і три оточення іншого бота на іншому фізичному сервері — одна кодова база, одна команда, дві продуктові лінійки.
У продакшні з грудня 2022-го, 118 тисяч нових користувачів лише за останній рік, і весь рахунок за хостинг — дванадцять доларів на місяць. Ця цифра не про хвастощі економністю; вона про те, чому існує половина інженерії нижче.
Типографіка через вимірювання і 586 МБ рендеру на сервері з 1,9 ГБ
Дворежимний рантайм, підбір кегля бінарним пошуком, каскадний LLM-фолбек, кожен memory-кіл замкнений у власному cgroup.
Дворежимний рантайм
Асиметрична федерація черг між двома серверами
Типографіка через вимірювання, а не евристику
586 МБ пікового рендеру на 1,9 ГБ
MALLOC_ARENA_MAX=2 у systemd drop-in), бо RMagick тримає пам’ять поза GC Ruby; дисципліноване знищення зображень у кожному блоці ensure; рендер винесено з веб-процесу в Sidekiq, після чого веб-процес перестало вбивати зовсім — а кожен кіл поза ним лишається у власному cgroup.Каскадний LLM-фолбек
Форматування виживає · особа автора
Хто над цим працював · 5 учасників
Даниїл Шкоропад
- Дворежимний рантайм і рішення зробити з нього спільний рендер-рушій для другого продукту.
- Звів піковий рендер до 586 МБ на 1,9 ГБ, і веб-процес перестало вбивати зовсім.
Владислав Фоменко
- Переніс рендер цитат у цей сервіс і зробив API-ендпоінт, який викликає другий продукт.
- Частина вимірів кегля й форматування тексту, на яких тримається зображення.
Олександр Шемберко
- Команда
/qx— готові цитати авторів, тобто та половина сервісу, яку викликає другий продукт. - Налаштування цитат на користувача, фони, які підбирає AI, і адмінська команда
/stat.
Михаїл Юн
- Розмова, що перетворила окрему іграшку на спільний рендер-рушій для другого продукту.
- Позиціювання й вимоги до того, що має бути на картці цитати.
Claude
- Рев’ює шлях рендеру, де витік пам’яті проявляється як OOM через два дні.
- Перевіряє, що кожен об’єкт зображення знищено в блоці ensure.
Дочитали до кінця й хочете обговорити?



