Рубрика «backend»

Всем привет! Я около 10 лет в разработке и последние 5 лет полностью живу в экосистеме JetBrains. За это время у меня накопилось порядка 150 репозиториев — рабочие проекты, личные эксперименты, демо, инфра. Всё это, конечно, аккуратно разложено по папочкам, помечено тегами в Finder и добавлено в быстрый доступ.

И долгое время этого хватало.

Я работаю с несколькими клиентами. Активных проектов обычно около 25 штук. С таким количеством стандартный Recent Projects в IntelliJ IDEA справляется прекрасно: быстро ввёл название сервиса в поиск — быстро открыл. Никаких проблем.

Читать полностью »

А что, если современные технологии для большинства вещей избыточны? В проекте «ЭХО» я решил проверить это на практике, создав цифровую капсулу времени для потомков. Цель — позволить людям оставить память о себе (фото и мысли) в максимально простом и «вечном» формате.

Технически это эксперимент по созданию системы на 250 млн анкет без баз данных, фреймворков и лишних слоев — только чистый Go и минималистичный Linux. В этой статье я поделюсь опытом, как заставить обычный ПК работать с такой нагрузкой, используя лишь стандартную библиотеку и файловую систему.

Читать полностью »

Вечером в пятницу коллега, назовем его Мститель, спросил, не сталкивался ли я с проблемой, что route возвращает 400... но «если сменить название на сильно другое», то всё ок. Я сперва не обратил внимание на слово «сильно». Может быть, где-то дублируется регистрация этого рута? Или мститель перепутал GET и POST. Или какой-то баг в общем на создание хэндлеров?

Мистическая буква «М»

Утро понедельника началось с хождения по мукам. Убийства gradle-демонов. Обновление JDK. Чистый билд. Удаление кода авторизации. Возня с call logging. Дебаггер. Тщетно — нигде никаких логов об ошибке.

Читать полностью »

Когда мы разрабатываем веб-сервисы на Python, мы почти всегда работаем с готовыми абстракциями: фреймворками (fastapi, flask, django) и веб-серверами (uvicorn, gunicorn). Фреймворк предоставляет удобную модель работы с HTTP, сервер принимает TCP-соединения, парсит HTTP и передаёт данные в приложения через интерфейсы вроде WSGI или ASGI.

Эти абстракции начинают восприниматься как нечто само собой разумеющееся. Но по мере накопления опыта к ним возникает всё больше вопросов:

  • Где проходит граница ответственности между веб-сервером и веб-приложением?

  • Что именно делают WSGI и ASGI?Читать полностью »

Это история о том, как желание просто проверить, жив ли мой блог, привело к трём дням танцев с бубном вокруг SSL-сертификата, а затем — к созданию собственного сервиса мониторинга, который теперь используют сотни разработчиков. Расскажу, почему существующие решения перестали устраивать, как мы реализовали поддержку UDP и ICMP в облаке и почему мониторинг должен быть «скучным».

Предыстория: как я стал сисадмином мониторинга

Год назад у меня была простая задача: настроить уведомления о падении личного блога и API пары пет-проектов. Думал, уложусь в 15 минут.

Спойлер: не уложился.

Читать полностью »

Вступление: ловушка "Универсального языка"

Я в IT больше 10 лет. Начинал с верстки, вырос в фронтенд-разработчика, потом стал тимлидом, далее менеджером проектов и сейчас руковожу отделом разработки решений для бизнеса. Я знаю JavaScript. Я люблю JavaScript. И именно эта любовь сыграла со мной злую шутку.

В индустрии есть опасная иллюзия: «Если ты знаешь JavaScript, ты – фулстек». Node.js дал нам, фронтендерам, суперсилу. Мы можем писать серверный код на том же языке, что и клиентский. Мы можем использовать одни и те же типы, одни и те же библиотеки.

Читать полностью »

Всем привет! Когда речь заходит о разработке высоконагруженных систем, многие предлагают: «python, сделать проще и быстрее». Но есть проблема: Скорость разработки!= скорость и качество работы сервиса. Когда мы делаем любой продукт, важны: Масштабируемость, стабильность работы под большой нагрузкой, предсказуемость поведения системы — особенно когда речь идет о тысячах одновременных пользователей, лентах новостей в реальном времени, уведомлениях и сложных связях между разными сущностями.

Именно поэтому и выбрана Java и Spring Boot как основа. Банки и видеосервисы работают именно на Java и Spring.

Читать полностью »

Многие думают о продакшене как о бинарной системе: либо «работает», либо «упала». На практике почти все сложные сервисы живут в режиме постепенной деградации. Сервис вроде отвечает на запросы, пользователи вроде ничего не замечают, но внутри уже происходят скрытые сбои, которые со временем могут стать критичными.

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

Что такое скрытая деградация

Скрытая деградация — это состояние, когда система:

Для начала хотелось бы сказать, что же такое массивы и слайсы.

Массивы

Массив в Go - это структура данных, которая представляет собой упорядоченную последовательность элементов одного типа фиксированной длины.

Давайте рассмотрим на примере:

package main

func main() {
	/*
		Массив создаётся в таком формате:
		Имя := [количество элементов массива] тип данных {элементы массива, через запятую}
	*/

	arr := [3]int{0, 1, 2}
	fmt.Println(arr[1])
}

На примере выше был создан массив с 3-мя элементами и типом данных int.

После создания массива мы не можем изменять его вместительность, однако можем менять сами элементы.

Читать полностью »

[Laravel-Telegram] Пример сервиса на Laravel для авторизации пользователя через Telegram в mini-app - 1

Авторизация пользователя в Telegram mini-app сейчас как никогда важна. Но что если вам необходимо сделать это в вашей сервисной/микросервисной архитектуре?

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js