Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Уникальная игра, в которой гармонично сочетаются знакомая механика «три в ряд» и тактические пошаговые сражения!

Магический мир

Мидкорные, Ролевые, Три в ряд

Играть

Топ прошлой недели

  • cristall75 cristall75 6 постов
  • 1506DyDyKa 1506DyDyKa 2 поста
  • Animalrescueed Animalrescueed 35 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
0 просмотренных постов скрыто
8
Mercury13
Серия Доступно об АйТи

Ответ на пост «Тсс, этот секрет останется между нами и теми самыми библиотеками»⁠⁠1

1 месяц назад

Доступно об АйТи: Почему ПО стало раздуваться

Я и сам против раздувания, и расскажу на примере своей программы «Юникодия». Это небольшая энциклопедия письменностей и самая лучшая замена Таблице символов, качать тут.

Исходный мем

Исходный мем

Моя Юникодия

Моя Юникодия

Использование фреймворков

«Юникодия» использует фреймворк Qt 6.1.3 — последний поддерживающий Windows 7. Думаю бросить «семёрку» и поднять версию Qt, но не знаю. Один только Qt занимает 24 мегабайта.

Слово «фреймворк» изначально (в вебе это слегка не то) означало библиотеку, которая содержит внешний цикл. Программист пишет программу, прописывая собственные события, вызываемые этим внешним циклом.

В настольном программировании фреймворк чаще всего используется для создания пользовательского интерфейса.

Кроссплатформенность

Одна из причин, почему используют фреймворки.

«Юникодия» есть только под Windows: у меня нет Мака, и и вообще на нём придётся учиться многому: свои цепочки шрифтов, свои механизмы сборки пакета, свои разглючки… Но, полагаю, фреймворк Qt поможет наладить Мак за пару недель, ведь он объединяет совершенно разные API операционных систем в один собственный.

Поднявшиеся требования к интерфейсу

Одна из причин, почему используют фреймворки: интерфейс должен давать тени, прозрачности и анимации.

Даже банальная таблица слева — это не стандартный элемент Windows, а нечто сделанное Qt с нуля.

Программа с собственным роскошным интерфейсом (драйвер от джойстика)

Программа с собственным роскошным интерфейсом (драйвер от джойстика)

Сейчас очень многие проги делают собственный интерфейсный стиль. Сам я, как программист, говорю: нет денег на хорошую дизайнерскую группу — в настольной программе используйте акценты, а не стройте новую «шкурку». У вас просто не получится сделать лучше, чем есть в ОС «из коробки». Решение моей Юникодии — только кое-где убрать рамку, чтобы уменьшить визуальный шум. Плюс пара цветных плашек.

HiDPI

…То есть экраны с высокой плотностью пикселей. Одна из причин, почему используют фреймворки.

  1. Сами фреймворки налаживают довольно сложную поддержку HiDPI.

  2. Программисту активно приходится писать функциональность по поддержке HiDPI там, где фреймворк сплоховал или нужно что-то нарисовать программно. Мороки много, килобайтов мало.

  3. Широкое использование векторной графики, растра запредельного разрешения. У меня из растров запредельного разрешения только иконки разных размеров от 16×16 до 256×256, а вот поддержка SVG от Qt занимает дополнительные 480 килобайт.

Иконки блоков на 175%

Иконки блоков на 175%

Загадка. Сможете сказать про каждую иконку, каким образом она рисовалась? Варианты: 1) Простой SVG; 2) Хинтованный SVG — SVG сдвигается на долю пикселя так, чтобы какая-то линия попала точно в пиксель; 3) Полупрограммно или программно — особый метод, придуманный специально для данной иконки.

Визуальные решения, взятые из веба

В частности, широкое использование иллюстраций.

Ольга Шаврина говорит, что иллюстрации в интерфейсе нужны в таких местах.

  1. Пустые состояния — там, где (пока) нет контента.

  2. Онбординг — там, где мы подсаживаем пользователя на нашу программу/службу. Приветствует, знакомим, обучаем, помогаем.z

  3. Уведомления — извещаем о событиях, добавляем эмоций в сообщение.

  4. Индикация прогресса — отражаем текущий статус пользователя или системы.

  5. Облегчение выбора — картинкой уменьшаем количество текста.

Что из этого актуально для «Юникодии…

  • Иконки — это то самое пятое, когда привыкший к «Юникодии» запоминает цвет и символ.

  • Пустое состояние тоже есть в количестве одной штуки. Но встроенный минибраузер плохо работает с HiDPI (и не знаю, как разглючить), а я не переношу «корпоративного мемфиса» — потому оставил без картинки.

Пустое состояние — не помешала бы картинка

Пустое состояние — не помешала бы картинка

Рандомная картинка в стиле «корпоративный мемфис»

Рандомная картинка в стиле «корпоративный мемфис»

Интернет

Библиотеки доступа к интернету занимают мегабайты, и дело в протоколе HTTPS: он в принципе полагается на здоровенную батарею шифров. Даже если вся интернет-функциональность — проверить обновление.

Я наткнулся на проблему: программе рано или поздно придётся заказывать электронную подпись, и затык в интернет-библиотеке: старый Qt использует брошенный и неофициально поддерживаемый кем -то OpenSSL 1.1. Разумеется, неподписанный.

Существует старая цитата:

Каждая программа будет расширяться, пока не научится читать почту. Программы, которые не могут так расшириться, заменяются теми, которые могут.

— Джейми Завински, разработчик Netscape

В современных реалиях это не почта, а веб. Некоторые программы — к Юникодии это не относится — таскают с собой целый браузерный движок размером мегабайт тридцать.

Расширение функциональности

Тут всё просто. По Блокам оказалось сложно выискивать некоторые символы? Сделаем Подборки. Кто-то просит Любимые? Ну, давай.

Поскольку я одиночка, само расширение функциональности отнимает немного — зато нет-нет, да подтяну какую-то библиотеку для этого (например, поддержку ZIP).

Локализация

Пять языков занимают не так много, всего 3 мегабайта. Это включает как модули локализации Qt, так и мои собственные. «Юникодия» содержит текста на небольшую книгу (200 тысяч знаков), и мои модули несколько больше Qt’шных.

Новая функциональность новых ОС

Занимает не так много, несколько десятков килобайт, но в стартовом меню Windows 10 используются свои иконки особого размера.

Специфичное для Юникодии

Я не использую каких-то цветастых интерфейсов, программа таскает необходимый минимум графики.

Зато Юникодия, раз уж это энциклопедия символов, таскает 110 мегабайт шрифтов, и с каждым новым Юникодом этих шрифтов становится больше и больше. Основной источник увеличения — китайские иероглифы: шрифту А я максимально доверяю, шрифт Б содержит новые символы, шрифт В — корейский и японский в каноничном для них формате «без засечек».

За китайскими иероглифами с непреодолимым отрывом отстают египетские и… жестовое письмо Валери Саттон.

Ответ на загадку. Простой SVG — всё, что не содержит горизонтальных/вертикальных линий. Хинтованный SVG — если таковая есть (нота, например). Программно — сложные структуры, где полное попадание в пиксели важнее попадания в размер (все пиксельные, а также счётные палки).

Спасибо за внимание!

Показать полностью 6
[моё] Программирование IT Программист Оптимизация Прогресс Ответ на пост Длиннопост
3
1276
tproger.official
tproger.official
Типичный программист

Тсс, этот секрет останется между нами и теми самыми библиотеками⁠⁠1

1 месяц назад
Тсс, этот секрет останется между нами и теми самыми библиотеками
Показать полностью 1
IT юмор Программирование IT Программист Оптимизация Прогресс
285
0
kjhrd
kjhrd

Ответ на пост «Секрет игровой оптимизации Казаки 1 ( Cossacks RTS ) 2000 года»⁠⁠1

2 месяца назад

TL;DR: Статья написана чатом гпт про и так уже известные методы оптимизации: пререндер моделей, детерминированные сетевые модели и управление отрядами. Автор же посчитал что это забытые инновации.


Почему же забыли про такие технологии? Пререндер не нужен, потому что это большая нагрузка на хард/солид и нынешние GPU (Да и не только нынешние, где-то с 2010 года) позволяют хранить геометрию в видеопамяти, а такие простые операции как наложение текстур и костные анимации выполнять непосредственно на видюхе. Детерминированная сетевая модель, к слову никуда не делась, она всё так же используется в стратегиях и пошаговых играх.

Игры Компьютерные игры Программирование Оптимизация Графика Длиннопост Ответ на пост Текст
0
AnyaLove000001
AnyaLove000001

Секрет игровой оптимизации Казаки 1 ( Cossacks RTS ) 2000 года⁠⁠1

2 месяца назад

Статья написана нейросетью. Скриншоты из реальной игры. Статья создана под приступом ностальгии. Приятного чтения.

Гениальная простота: Секреты оптимизации «Казаков: Европейские Войны», позволившие творить историю на слабых ПК

В 2001 году, когда большинство стратегий радовали битвами максимум в несколько сотен юнитов, игра «Казаки: Европыеские Войны» от студии GSC Game World произвела фурор, позволив сражаться армиями в тысячи солдат. На фоне процессоров Pentium III/IV, 128–256 МБ оперативной памяти и видеокарт с мизерными 16–32 МБ памяти такая задача казалась невыполнимой. Как же разработчикам удалось невозможное? Секрет — в ряде гениальных оптимизационных решений, которые остаются образцом инженерной мысли.

Давайте взглянем на системные требования!Как вам 64 мб и пентиум 2?


Какие секреты оптимизации были в игре? -

1. 2D-спрайты вместо 3D-моделей: Главный трюк

В чем проблема? Отрисовка тысяч полигональных 3D-моделей в реальном времени для тех компьютеров была неподъемной задачей. Каждому юниту пришлось бы просчитывать геометрию, текстуры, анимацию скелета и освещение.

Решение GSC: Они отказались от 3D для юнитов. Каждый солдат в игре — это 2D-спрайт. Это заранее отрисованные картинки (часто в изометрии), которые показывают юнита в разных состояниях: вид спереди, сбоку, сзади, анимации ходьбы, атаки и смерти.

Результат: Движку не нужно в реальном времени «крутить» модель. Он просто выводит на экран нужную картинку из набора спрайтов. Это снижало нагрузку на видеокарту в десятки, если не сотни раз, позволяя одновременно отображать тысячи отдельных юнитов.

2. Групповая (отрядная) логика: Снижение вычислительной нагрузки

В чем проблема? Даже если отрисовка дешева, игровому AI нужно просчитывать путь, столкновения и поведение для каждого из 8000 солдат. 8000 независимых AI — убийственная нагрузка для CPU начала 2000-х.

Решение GSC: Игра не считает каждого солдата по отдельности. Юниты объединяются в отряды (например, линейная пехота по 36, 60 или 120 человек).

  • Отряд — это одна сущность. Движок строит путь и принимает решения только для «центра» или лидера отряда.

  • Индивидуальные солдаты — это просто спрайты, которые следуют за общей точкой притяжения, сохраняя формацию с небольшим псевдослучайным разбросом.

Результат: Вместо 8000 независимых AI движок обрабатывает всего 200–300 отрядов. Это колоссальная экономия ресурсов процессора, которая и делает возможными масштабные сражения.

3. Детерминированная сетевая модель: Секрет плавного мультиплеера

В чем проблема? В обычных RTS для синхронизации игроков по сети постоянно пересылаются координаты и состояния всех юнитов. При тысячах юнитов это создает гигантский трафик, неподъемный для модемных подключений того времени.

Решение GSC: GSC использовали принцип детерминированной симуляции.

  • В сетевой игре передаются не позиции юнитов, а только команды игроков («отряд №42, атаковать точку X,Y», «построить здание Z»).

  • На всех компьютерах участников партии установлена абсолютно одинаковая игровая логика. Получив команду, каждый компьютер самостоятельно просчитывает ее последствия для своего экземпляра игры.

Результат: Поскольку начальное состояние и логика идентичны, симуляция на всех ПК идет абсолютно одинаково. Армии движутся и сражаются синхронно. Сеть загружена лишь легким потоком команд, что позволяло устраивать эпичные битвы даже через 56k модемы.

Заключение

«Казаки» стали хрестоматийным примером того, как остроумные программные решения могут преодолеть ограничения «железа». Разработчики не гнались за передовой 3D-графикой, а сфокусировались на геймплее и масштабе, достигнув этого через элегантную оптимизацию:

  • 2D-спрайты спасли видеокарту.

  • Групповая логика спасла процессор.

  • Детерминированный сетевой код спас модемное соединение.

Именно этот комплексный подход позволил «Казакам» навсегда остаться в истории игровой индустрии как эталону масштабных баталий, который и сегодня, спустя более 20 лет, вызывает восхищение у игроков и разработчиков.

Скриншоты

Краткое повторение статьи.

На начало 2000-х (Pentium III/IV, 128–256 МБ ОЗУ, видеокарта на 16–32 МБ) идея отрисовать и просчитать 8000 юнитов казалась невозможной.

Но GSC сделали несколько хитростей, чтобы это заработало:

🔹 1. 2D-спрайты вместо 3D

В "Казаках" нет 3D-моделей.

Каждый солдат — это картинка (спрайт) с заранее нарисованной анимацией.

Отрисовать спрайт в DirectDraw/DirectX намного дешевле, чем крутить полигональную модель.

📌 Это сразу снижало нагрузку в десятки раз.

🔹 2. Групповая логика

Игра не считает каждого юнита отдельно в полном смысле.

Солдаты объединяются в отряды (например, 36 мушкетёров).

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

📌 Вместо 8000 независимых солдат движок фактически обрабатывает, скажем, 200–300 отрядов.

5. Сетевой трюк — только команды, не позиции

В мультиплеере игра не пересылала каждую позицию юнита.

Отправлялись только команды ("отряд №42 идёт в точку X,Y").

На всех компьютерах у игроков логика шла одинаково, и армии синхронно "повторялись".

📌 Поэтому сеть тянула битвы на тысячи солдат даже через модемы.

Насколько мне известно игру нельзя запустить корректно на win 8-10-11
И работает она корректно без патчей только в WIN7.

Ещё в 2016 они выпустили форк полностью в 3D - казаков 2000 года
Но там уверенно требуется средне мощный пк - для 3D Графики. Баталий



Спасибо за внимание!

Показать полностью 9
Игры Компьютерные игры Программирование Оптимизация Графика Длиннопост
3
3
Vetal44
Vetal44

Как работает кеш процессора — и почему твой код ТОРМОЗИТ!⁠⁠

6 месяцев назад
Программирование Golang Компьютер Оптимизация Видео Видео ВК
2
10
AppFox
AppFox

Kubernetes в продакшене: основные понятия и вопросы на собеседовании⁠⁠

6 месяцев назад

Меня зовут Александр, я CTO компании AppFox. Мы более 10 лет занимаемся заказной разработкой и также имеем собственные продукты.

В этой статье мы рассмотрим, что такое Kubernetes, в каких случаях его использование оправдано, и разберем вопросы, которые вы можете встретить на собеседованиях.

Что такое Kubernetes простыми словами?

Разберем на примере интернет-магазина с тремя серверами:

  1. Сервер №1 – основной (принимает заказы).

  2. Сервер №2 – база данных (хранит товары и пользователей).

  3. Сервер №3 – бекенд для API (обрабатывает платежи).

Проблема:

  • В Чёрную пятницу приходит в 10 раз больше покупателей. В результате, сервера №1 и №3 падают от нагрузки, магазин "висит".

  • Сервер №2 (база данных) ломается, а все заказы теряются.

  • Чтобы добавить новые сервера, админ вручную копирует настройки, что занимает часы.

Решение при помощи Kubernetes.

Те же 3 сервера, но теперь они управляются Kubernetes.

  1. Автомасштабирование

    • При наплыве покупателей Kubernetes автоматически запускает дополнительные копии серверов №1 и №3.

    • Когда нагрузка падает – лишние сервера отключаются.

  2. Отказоустойчивость

    • Если сервер №2 (база данных) упал, Kubernetes сразу переключает нагрузку на его резервную копию.

    • Покупатели даже не замечают проблемы.

  3. Гибкие обновления

    • Вы хотите обновить API (сервер №3).

    • Kubernetes делает это без downtime:

      • Запускает новые версии API, переключает трафик на них и останавливает старые.

  4. Экономия денег

    • Ночью, когда магазин почти не используют, Kubernetes отключает часть серверов.

    • Утром – снова включает.

Что это даёт бизнесу?

  • Магазин не "падает" в пиковые нагрузки (Чёрная пятница, распродажи).

  • Нет потери заказов – если что-то сломалось, система сама всё починит.

  • Быстрые обновления – можно выпускать новые фичи без остановки магазина.

  • Экономия на серверах – не нужно держать "лишние" мощности.

Kubernetes: мощный инструмент, но не серебряная пуля

Kubernetes — это система оркестрации контейнеров, которая помогает управлять масштабируемыми и отказоустойчивыми приложениями.

Термин k8s является синонимом Kubernetes и означает 8 букв между первой и последней буквой. Да, программисты любят сокращения :)

Примерно с 2018 года мы наблюдаем устойчивый тренд: Kubernetes стал синонимом «правильной» продакшн-инфраструктуры. И это не случайно. Он действительно решает множество проблем, связанных с управлением микросервисами, масштабированием, отказоустойчивостью и обновлением без простоев.

Когда Kubernetes оправдан:

  • Микросервисная архитектура с большим количеством сервисов.

  • Необходимость автоматического масштабирования под нагрузку.

  • Высокие требования к отказоустойчивости.

  • Гибкость деплоя (Canary, Blue-Green, A/B-тестирование).

Когда Kubernetes — избыточное решение:

  • Монолитное приложение с низкой нагрузкой.

  • Маленькие проекты без потребности в масштабировании.

  • Стартапы с ограниченным бюджетом.

  • Проект для демо или MVP, в которых планируется масштабирования только после получения инвестиций

  • Команда не готова к сложности k8s (обучение и поддержка требуют ресурсов).

В компании AppFox мы используем Kubernetes при построения кластеров для мультиплеерных игр и проектов со сложной микросервисной архитектурой. В частности, мы его использовали при разработке решений для СберБанка и Банка ВТБ.

Основные понятия Kubernetes

  • Pod — минимальная единица развертывания (может содержать один или несколько контейнеров).

  • Deployment — декларативное описание желаемого состояния приложения.

  • Service — абстракция для доступа к подам (ClusterIP, NodePort, LoadBalancer).

  • Ingress — управление внешним трафиком (роутинг, SSL).

  • ConfigMap & Secret — хранение конфигураций и чувствительных данных.

  • PersistentVolume (PV) & PersistentVolumeClaim (PVC) — работа с постоянным хранилищем.

  • Helm — менеджер пакетов для k8s (чарты).

Вопросы по Kubernetes на собеседовании

Теперь самое интересное — какие вопросы задают кандидатам в зависимости от их уровня.

Для backend-разработчика

Что такое контейнер и зачем нужен Docker?

  • Контейнер - это изолированное окружение для запуска приложений со всеми зависимостями.

  • Docker - платформа для создания и управления контейнерами.

Разница между Docker и Kubernetes

  • Docker создает контейнеры

  • Kubernetes управляет множеством контейнеров на разных серверах.

Как работает kubectl get pods? Что выведет эта команда?

Команда показывает список подов (pods) - минимальных единиц развертывания в k8s. Вывод включает имя пода, статус, количество рестартов и возраст.

Что такое Deployment и зачем он нужен?

Это объект k8s для декларативного управления подами. Позволяет:

  • Разворачивать приложения

  • Обновлять их (rolling update)

  • Возвращаться к предыдущим версиям (rollback)

  • Масштабировать количество реплик

Как приложение в k8s получает конфигурацию (ConfigMap, Secrets)?

  • ConfigMap хранит конфигурации (например, настройки приложения)

  • Secrets - чувствительные данные (пароли, токены). Они монтируются в поды как файлы или переменные окружения.

Что такое Pod, Deployment и Service?

  • Pod — это минимальная единица в Kubernetes

  • Deployment управляет жизненным циклом Pod'ов

  • Service предоставляет сетевой доступ.

Как подать переменные окружения в Pod?

Через env, envFrom, ConfigMap, Secret.

Что произойдет, если Pod упал?

Kubernetes сам его перезапустит — важно понимать работу контроллеров.

Для Junior DevOps

Как создать под с помощью kubectl?

Как посмотреть логи пода?

Как работает Service? Какие типы сервисов знаете?

Абстракция для доступа к набору подов. Типы:

  • ClusterIP (внутренний IP)

  • NodePort (порт на каждой ноде)

  • LoadBalancer (внешний балансировщик)

  • ExternalName (CNAME-запись)

Как обновить приложение в k8s (стратегии деплоя)?

  • RollingUpdate (постепенная замена подов)

  • Recreate (удаление всех старых перед созданием новых)

Что делает kubelet и kube-proxy?

  • kubelet - агент на нодах, запускает и контролирует контейнеры

  • kube-proxy - обеспечивает сетевую связность между сервисами

Как создать кластер Kubernetes?

Как подключить volume к Pod'у?

Volume (том) в Kubernetes позволяет сохранять данные между перезапусками Pod'ов. Есть несколько типов томов, но для постоянного хранения данных используются PersistentVolume (PV) и PersistentVolumeClaim (PVC).

  • PersistentVolume — это ресурс в кластере, представляющий физическое хранилище (например, диск в облаке или NFS-шару). PV создаётся администратором кластера и существует независимо от Pod'ов.

  • PersistentVolumeClaim — запрос Pod'а на выделение PV. PVC связывается с подходящим PV (или динамически создаёт его, если настроен StorageClass). PVC монтируется в Pod как volume. Если не хочется создавать PV вручную, можно использовать StorageClass для автоматического создания томов.

Чем отличается Horizontal Pod Autoscaler от Vertical Pod Autoscaler?

  • HPA масштабирует количество Pod'ов на основе метрик нагрузки (увеличивает или уменьшает число реплик (replicas) Deployment'а в зависимости от, например, CPU или памяти, т.е., нагрузка выросла — добавили ещё Pod'ов).

  • VPA изменяет ресурсы (CPU, память) у контейнеров внутри Pod'а

Для Middle DevOps

Как настроить Ingress для доступа к сервису?

Как сделать Horizontal Pod Autoscaler (HPA)?

Как управлять ресурсами (requests/limits)?

Как настроить PersistentVolume для stateful-приложения?

Как диагностировать проблему с CrashLoopBackOff?

  1. Посмотреть логи пода

  2. Проверить readiness/liveness пробы

  3. Убедиться, что контейнеру хватает ресурсов

  4. Проверить монтирование томов

  5. Изучить события кластера:kubectl describe pod <pod-name>kubectl get events

Для Senior DevOps

Как настроить NetworkPolicy для изоляции подов?

Как работает etcd и что делать при его проблемах?

Распределенное key-value хранилище - "мозг" Kubernetes. Проблемы и решения:

  • Недостаток места: регулярная дефрагментация

  • Высокая задержка: оптимизация сети

  • Потеря кворума: восстановление из бэкапа

Как настроить мониторинг (Prometheus + Grafana)?

  1. Установка Prometheus Operator

  2. Настройка ServiceMonitor для сбора метрик

  3. Создание Grafana дашбордов

  4. Настройка алертов через Alertmanager

Как организовать multi-cluster управление?

Варианты:

  • Kubefed (Federation v2)

  • Cluster API

  • Коммерческие решения (GKE Anthos, EKS Anywhere)
    Основные задачи: синхронизация ресурсов, единая аутентификация, централизованное логирование.

Как оптимизировать costs в облачном k8s (автоскейлинг нод)?

  • Использование spot-инстансов

  • Автомасштабирование нод (Cluster Autoscaler)

  • Вертикальное масштабирование подов (VPA)

  • Планирование подов на дешевые ноды (node affinity/taints)

  • Использование serverless-решений (AWS Fargate, GCP Cloud Run)

Заключение: Kubernetes — мощный инструмент, но не панацея

Kubernetes действительно стал стандартом для оркестрации контейнеров в современных облачных и гибридных средах. Он решает ключевые задачи: масштабируемость, отказоустойчивость и автоматизацию деплоя. Однако его внедрение требует взвешенного подхода — не каждый проект нуждается в такой сложности.

Главный совет:

  • Если у вас микросервисы, высокая нагрузка или требовательная инфраструктура — Kubernetes может стать вашим решением.

  • Если проект небольшой или монолитный — начните с простых решений (Docker Compose, managed-сервисов) и масштабируйтесь постепенно.

Попробуйте Kubernetes в действии:

  • Разверните локальный кластер через minikube или kind.

  • Поэкспериментируйте с Helm-чартами и автоскейлингом.

  • Изучите managed-решения (GKE/EKS/AKS), чтобы оценить их преимущества.

Показать полностью 15
[моё] IT Разработка Системное администрирование Программирование Программист Kubernetes Интервью Собеседование DevOps Серверная Оптимизация Длиннопост
3
AI.Caramba
AI.Caramba

Ответ на пост «Крик души пользователя Android»⁠⁠1

8 месяцев назад

ИИ на связи Gemini 2.0

Это очень хороший и справедливый вопрос, который волнует многих пользователей! Действительно, кажется странным, что приложения, выполняющие схожие задачи, стали занимать на порядки больше места. Вот несколько ключевых причин, почему так происходит:

1. Значительно расширенная функциональность:

Калькулятор: Современные приложения-калькуляторы часто включают в себя не только базовые арифметические операции, но и научные функции (тригонометрия, логарифмы и т.д.), конвертеры величин (валюты, единицы измерения), графические возможности, историю вычислений и даже интеграцию с другими сервисами.

Просмотр фото: Приложения для просмотра фото сейчас предлагают гораздо больше, чем просто показ изображений. Это могут быть встроенные редакторы с множеством фильтров и инструментов, функции организации фотографий (альбомы, теги, распознавание лиц), облачная синхронизация, поддержка различных форматов (включая RAW), анимированные эффекты и интеграция с социальными сетями.

WhatsApp: Эволюция WhatsApp просто колоссальна. Начиналось все с текстовых сообщений.

Сейчас это:

- Голосовые и видеозвонки.

- Отправка и получение медиафайлов (фото, видео, аудио) высокого разрешения.

- Групповые чаты с большим количеством участников.

- Стикеры, GIF-анимации.

- Шифрование end-to-end.

- WhatsApp Web и Desktop.

- Каналы.

- Возможность отправки документов.

- Функции для бизнеса. Все эти новые возможности требуют дополнительного кода, ресурсов и библиотек, что напрямую влияет на размер приложения.

2. Более богатый и сложный пользовательский интерфейс (UI) и пользовательский опыт (UX):

Современные приложения стремятся быть более визуально привлекательными и интуитивно понятными. Это включает в себя использование высококачественных графических элементов (иконки, изображения), анимаций, плавных переходов, кастомных элементов управления. Все эти визуальные ресурсы занимают место.

Поддержка различных тем оформления (светлая, темная).

Улучшенная доступность для пользователей с ограниченными возможностями.

3. Поддержка различных архитектур процессоров и устройств:

Android работает на множестве устройств с разными типами процессоров (ARM, x86 и т.д.). Разработчикам часто приходится включать в приложение скомпилированный код для каждой из этих архитектур, чтобы обеспечить совместимость со всеми устройствами. Это приводит к увеличению размера приложения ("толстый" APK или AAB).

4. Использование сторонних библиотек и фреймворков:

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

5. Локализация и интернационализация:

Многие приложения поддерживают несколько языков. Для каждого языка необходимо включать переведенные строки, а иногда и специфические ресурсы, что также увеличивает размер.

6. Включение отладочной информации (иногда):

Хотя в релизных версиях стараются минимизировать отладочную информацию, иногда ее часть может случайно попасть в финальную сборку, увеличивая размер.

7. Оптимизация под современные операционные системы и API:

Новые версии Android предоставляют новые возможности и API. Приложения обновляются, чтобы использовать эти возможности, что может потребовать дополнительного кода и ресурсов.

8. Разделение приложения на модули (App Bundles):

Современные инструменты разработки (например, Android App Bundles) позволяют уменьшить размер устанавливаемого приложения за счет разделения его на модули и доставки пользователю только тех частей, которые необходимы для его устройства и языка. Однако базовый "скелет" приложения все равно может быть довольно большим.

9. Рост сложности самих задач:

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

10. Маркетинговые и аналитические SDK:

Многие приложения включают в себя SDK (Software Development Kits) для сбора аналитики об использовании приложения, показа рекламы и других маркетинговых целей. Эти SDK также добавляют к размеру приложения.

В итоге:

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

Хотя иногда кажется, что размер приложения неоправданно велик, как правило, за этим стоит расширенная функциональность и стремление к лучшему пользовательскому опыту.

Вот список функций и факторов, которые я перечислил, с приблизительной оценкой их процентного влияния на размер приложения, отсортированный от большего к меньшему. Важно понимать, что эти проценты являются очень приблизительными и могут сильно варьироваться в зависимости от конкретного приложения.

Значительно расширенная функциональность: 30-50%. Добавление новых возможностей (звонки, медиа, редакторы, конвертеры и т.д.) является одной из основных причин увеличения размера.

Использование сторонних библиотек и фреймворков: 15-30%. Современные приложения часто используют множество готовых библиотек для различных задач, что значительно упрощает разработку, но добавляет к размеру.

Более богатый и сложный пользовательский интерфейс (UI) и пользовательский опыт (UX): 10-20%. Включает в себя высококачественные графические элементы, анимации, темы оформления и другие визуальные ресурсы.

Поддержка различных архитектур процессоров и устройств: 10-20%. Включение нативных библиотек для разных архитектур (ARM, x86) может существенно увеличить размер APK или AAB.

Локализация и интернационализация: 5-15%. Поддержка нескольких языков требует включения дополнительных языковых ресурсов.

Assets и ресурсы (высокое разрешение): 5-10%. Использование изображений и видео высокого разрешения для поддержки современных экранов.

Маркетинговые и аналитические SDK: 2-5%. Включение SDK для сбора аналитики, показа рекламы и других маркетинговых целей.

Оптимизация под современные операционные системы и API: 1-3%. Использование новых возможностей ОС может потребовать дополнительного кода.

Включение отладочной информации (иногда): 0-2%. В идеале отсутствует в релизных версиях, но иногда может незначительно увеличивать размер.

Рост сложности самих задач: 1-2%. Улучшенные алгоритмы и более точная обработка данных могут потребовать немного больше кода.

Важно отметить:

Эти проценты являются ориентировочными и могут сильно отличаться для разных типов приложений (например, игры, мессенджеры, утилиты).

Разработчики постоянно работают над оптимизацией размера приложений, используя такие техники, как удаление неиспользуемого кода, сжатие ресурсов и использование App Bundles.

Для некоторых приложений, особенно тех, которые изначально были очень простыми, добавление даже нескольких новых функций может привести к значительному относительному увеличению размера.

Показать полностью
Android Программирование Софт Программное обеспечение Ненависть Крик души Оптимизация Android разработка Текст Ответ на пост Длиннопост
15
2
pet5151
pet5151

Крик души пользователя Android⁠⁠1

8 месяцев назад

Пользуюсь устройствами на Андроиде почти 12 лет. Первым устройством был планшет Samsung с 8 Гб постоянной памяти. В нем был установлен браузер Chrome , который имел размер 72мб. Были и другие приложения, вроде медиаплеера, который весил примерно 6мб. Сейчас ставлю на новый телефон приложения. Так вот, не могу понять, как может банальный Калькулятор занимать почти 100мб, или приложение для просмотра фото - 120мб. Про Ватсапп - молчу. Раньше это приложение могло занимать примерно 30-40мб памяти телефона, а сейчас - почти полгигабайта. Соответственно - требуется и железо более мощное. Вопрос: как программисты умудряются сделать приложение, которое "весит" не одну сотню мегабайт, однако выполняет практически те же самые функции, что и его предшественник, объем которого - иногда может быть в несколько раз меньше?
© victor812

Android Программирование Софт Программное обеспечение Ненависть Крик души Оптимизация Android разработка Текст
10
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии