В uSTADIUM мы используем систему планирования задач для отправки тысяч push-уведомлений. На первый взгляд необходимость в очереди задач и планировщике была неочевидна. Наш сервер будет обрабатывать уведомления по мере необходимости во время запроса. Со временем эта нагрузка начала перегружать систему. Я не был уверен, как это исправить, так что это было интересное путешествие, решающее эту проблему. В этой статье я расскажу об этом методе, о том, как мы его создали с использованием Redis, и о том, как мы масштабируем систему.
Пакет sync
предоставляет мощный пул экземпляров, которые могут быть повторно использованы для того, чтобы уменьшить давление на сборщик мусора. Перед использованием пакета очень важно провести тестирование приложения до и после использования пула, поскольку это может снизить производительность, если вы плохо понимаете, как оно работает внутри.
Я решил поделиться одним из моих любимых приемов в стандартной библиотеке Python на примере. Весь код работает на Python 3.2+ без внешних пакетов.
Я люблю Python и уже давно изучаю его. Некоторое время назад я написал скрипт на Python, в котором мне нужно было изменить размер группы изображений, сохраняя при этом пропорции (пропорции) без изменений. Поэтому я осмотрелся и нашел PIL (Python Imaging Library).
Модули значительно улучшили процесс управления зависимостями в Go. Если вы новичок в Go Modules и хотите узнать больше о том, как начать, ознакомьтесь с официальной документацией .
Я хотел создать небольшое автономное веб-приложение на Go, противоположное обычному веб-приложению, где ресурсы будут обслуживаться отдельно через CDN или HTTP-сервер, такой как Nginx. Но если производительность не имеет значения или она нацелена на небольшой трафик, то наличие автономного приложения облегчает его развертывание и распространение, поскольку это просто исполняемый двоичный файл.
Когда я начал изучать Go, я быстро преодолел свое первое препятствие: рабочее пространство Go. Инструменты go предназначены для работы с кодом, который хранится в общедоступных репозиториях с использованием полного доменного имени и пути в качестве пространства имен и имени пакета. Например: github.com/rach/project-x
где github.com/rach
- это вид пространства имен, реализуемый структурой каталогов, а project-x
имя пакета также обеспечивается структурой каталогов.
Исходя из Python, я был удивлен, что не было такого простого решения, как [virtualenv]. Go действительно предлагает способ, но требует немного больше упражнений с кодом.
В этой статье я опишу, как я упростил свою жизнь, работая с Go с помощью небольшого сценария оболочки и используя [direnv] для автоматизации переключения рабочей области. Когда я писал этот пост, я мало что знал о Go, поэтому не стесняйтесь пролить свет на любую из моих ошибок.
Я обсуждал с коллегой простую проблему, которую его компания задавала во время интервью: «Учитывая строку, состоящую из открытых и закрытых скобок, определите, все ли скобки закрыты»
Я хотел сохранить внешний URL проекта в виде короткой ссылки (немного похожей на битовую), чтобы вредоносный URL мог глобально блокироваться в системе. Чтобы избежать угадывания URL-адреса, я использовал hashids, который генерируют короткие уникальные непоследовательные идентификаторы из чисел. С помощью хешей я могу легко преобразовать идентификатор первичного ключа в альтернативный идентификатор, который может быть предоставлен.
Допустим, вы решили сохранить данные в базе данных как json или jsonb и обнаружили, что вы просто создали для себя новые проблемы, которых у вас не было раньше. Ты не одинок.
Присоединяйся в тусовку
Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.