Как стать автором
Обновить
1
0
Александр @almakarov

Разработчик

Отправить сообщение

Основные возможности кластеризации Patroni в PostgresSQL

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 3.8K

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

Patroni может интегрироваться с различными системами распределенной конфигурации, включая etcd, ZooKeeper, Consul и Kubernetes.

Читать далее
Всего голосов 11: ↑10 и ↓1 +9
Комментарии 2

Красота не только в коде — как оформлять репозиторий

Уровень сложности Простой
Время на прочтение 7 мин
Количество просмотров 24K

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

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

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

В данной статье мы рассмотрим ключевые аспекты оформления документации в Git репозитории, обсудим лучшие методики и практики для создания качественной документации. Независимо от того, являетесь ли вы опытным разработчиком или новичком в области Git, эта статья поможет вам создать четкую, структурированную и информативную документацию для вашего проекта. Погружайтесь в мир оформления документации, улучшайте ваши проекты и делитесь своими идеями с сообществом разработчиков Хабр!

Узнать, как оформлять репозитории
Всего голосов 27: ↑20 и ↓7 +13
Комментарии 42

Принципы непрерывного рефакторинга

Уровень сложности Сложный
Время на прочтение 23 мин
Количество просмотров 11K

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

«Работает — не трогай!»: вообще забить на чистки и ничего не менять. В некоторых случаях валидный подход. Но в коде, который приходится менять хотя бы даже эпизодически (фиксы багов, мелкие доделки, смена окружения и т. п.), со временем неизбежно приводит к катастрофе. Вам надо что‑то поменять в коде, и это оказывается невозможно сделать легко. Даже за тривиальные изменения приходится платить большой кровью.

«Я прочитал Роберта Мартина»: включаем чистки в обычный код. Надеваем галстук бойскаута и чистим код прямо по ходу работы над текущими задачами. Отправляем его коллегам на ревью и ждём несколько дней, покуда они не разберутся, где заканчиваются рефакторинги и начинаются непосредственно изменения по задаче. Или же уходим по кривой дорожке рефакторингов в тёмный лес и продалбываем к чертям все изначальные сроки. Когда начинаешь приводить код к идеалу, не всегда бывает так легко остановиться!

«Нужен порядок и учёт»: делаем отдельные коммиты с чистками, но нерегулярно — только когда в дело берётся соответствующий тикет. Правда, тикеты на рефакторинг почему‑то регулярно получают самый низкий приоритет во время планирования и маринуются в беклоге месяцами. Но что уж тут поделать?

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

За прошедший год я нащупал и отточил ещё один подход, который лишён указанных недостатков. И теперь готов поделиться им с вами.

Читать далее
Всего голосов 22: ↑22 и ↓0 +22
Комментарии 20

Генерация контрактов OpenApi или прикладной API first: гайд по генерации в Spring Boot приложении

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 6.5K

Стек: OpenAPI, Spring Boot, Gradle

Небольшой гайд по генерации серверной и клиентской части в Spring Boot приложении.

Краткое содержание:

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

В сервисе-сервере сгенерируйте сервер по спецификации. Настройте созданные контроллеры/имплементируйте интерфейсы.

В сервисе-клиенте сгенерируйте клиентскую часть по спецификации. Подключите сгенерированного feign клиента.

Generate it
Всего голосов 6: ↑5 и ↓1 +4
Комментарии 9

Разработка высоконагруженного игрового WebSocket сервера на Java, Netty с поддержкой BattleRoyale/Matchmaking

Уровень сложности Сложный
Время на прочтение 18 мин
Количество просмотров 11K

Всем доброго времени суток. В предыдущей статье я затронул тему клиентской разработки браузерной игры. В этой же публикации попробую пролить свет на детали разработки мультиплеера, а именно - разработки игрового websocket-tcp сервера на Netty.
Разберем технические особенности реализации такого сервера, способы улучшения производительности, игровую логику и т.д.

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 7

Строим удобные автомобильные маршруты

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 7.6K

Хороший автомобильный маршрут из точки А в точку Б должен, с одной стороны, быть кратчайшим, а с другой — удобным для водителя. Как правильно вычислить время в пути мы уже рассказали, теперь — об удобстве маршрутов: что это такое, как его измерить и как мы его повышали.

Читать далее
Всего голосов 28: ↑28 и ↓0 +28
Комментарии 33

Spring Data JPA: разница между методами findById, getOne, getById и findOne

Время на прочтение 8 мин
Количество просмотров 8.4K

JpaRepository Spring Data предоставляет огромный набор методов, упрощающих реализацию операций над базой данных. С их помощью вы можете сохранять, удалять и считывать объект сущности (entity object). Однако одна из немногих проблем, являющаяся следствием изобилия возможностей, которые дают нам эти интерфейсы, — это выбор правильного метода для вашего конкретного случая. И иногда это совсем не так просто, как могло бы показаться с первого взгляда. Хорошим примером этой проблемы являются методы findById, getOne, getById, и findOne. Судя по их именам, все они делают одно и то же. Так когда и какой из них вы должны использовать?

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

Читать далее
Всего голосов 9: ↑7 и ↓2 +5
Комментарии 0

Java, реактивное программирование, Reactor, Spring Cloud Function, Streams, etc…

Время на прочтение 23 мин
Количество просмотров 17K


Реактивное программирование в Java — полезный инструмент со множеством применений. Его суть в асинхронной обработке поступающих сообщений, и есть несколько вариантов реализации этого механизма.


И Java в целом, и Spring Framework в частности подразумевают несколько аспектов реактивного программирования. Это касается Spring WebFlux в качестве замены Spring MVC. Также можно использовать Project Reactor в Java непосредственно, без Spring Framework. Однако Spring предоставляет средства декларативного определения функции Spring Cloud Function и средства интеграции приложений с использованием внешних очередей в рамках проекта Spring Cloud Stream. В комплексе эти средства позволяют широко использовать реактивное программирование, упрощая создание, размещение, масштабирование и обслуживание приложений.


Помимо создания новых приложений, Spring Cloud Function/Stream позволяют модифицировать и существующие приложения, облегчая жизнь разработчикам в реализации горизонально масштабируемых сервисов.


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

Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 2

Обзор Spring-компонентов. Часть 1 – Spring Boot и фреймворк интеграции

Время на прочтение 18 мин
Количество просмотров 40K

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

Читать далее
Всего голосов 18: ↑17 и ↓1 +16
Комментарии 1

Большой гайд. Пишем микросервисы на Java и Spring Boot, заворачиваем в Docker, запускаем на EKS, мониторим на Grafana

Время на прочтение 37 мин
Количество просмотров 81K

Туториалы делятся на две больших категории: либо "как нарисовать сову", либо подробно расписанные тысячи шагов в формате "напиши туториал для дурака - и только дурак захочет его читать".

Как какой из двух категорий относится эта статья — решать вам.

В этой статье вы увидите пошаговое создание cloud-native микросервиса на Amazon AWS, пригодное для "чтения с листа". Чтобы понять, что здесь происходит, не нужно разворачивать проект - достаточно обладать живым воображением и прочитать текст по диагонали. Если же вы всё-таки захотите повторить шаги, вам будут жизненно нужны знания вида, как создавать классы в IDE и что такое Spring.

Вначале мы напишем пару простых микросервисов на Spring Boot, докеризуем их, зальём в AWS, настроим красивые доменные имена и HTTPS, прикрутим логирование и мониторинг, Prometheus и Grafana. Это небольшое путешествие по всем кругам ада, из которого вы не вернетесь прежним.

Текст написан на основе текстов и демо-проекта microservice-customer за авторством @kamaruzzaman. Если вы потеряли нить повествования, всегда можно зайти на GitHub и найти весь код в пригодном для запуска виде. Если захочется закопаться в тему, то бро Дима Чуйко (@Teapot) написал вам ещё две части статьи "Микросервисы: от CRUD до Native Image" (раз, два).

Последняя важная оговорка. В этом гайде будут использоваться технологии Amazon и обычные дистрибутивы OpenJDK. Автор осознает, что мы живём в России, и возможно, вместо Amazon куда лучше подойдет что-то вроде SberCloud или MTS Cloud, а вместо обычного OpenJDK - Axiom JDK с сертификацией по ФСТЭК. Особенности российских технологий - тема для отдельной статьи. Если вы захотите таковую после чтения этого гайда - отметьтесь в комментариях.

Читать далее
Всего голосов 88: ↑87 и ↓1 +86
Комментарии 27

Обзор Spring-компонентов. Часть 2 – Spring Cloud

Время на прочтение 16 мин
Количество просмотров 24K

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

Читать далее
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 3

Security микросервисов с помощью Spring Cloud Gateway и TokenReley

Время на прочтение 8 мин
Количество просмотров 21K

Данная статья результат поиска некоего каноничного решения организации безопасности доступа к ресурсам в микросервисной архитектуре, построенной в экосистеме Spring. После прочтения десятка статей по данной тематике, к сожалению, не нашел то, что искал. Spring Security оказался одной из самых недопонятых технологий. Основная проблема у всех - изобретение своего велосипеда поверх стандартного функционала Spring Security. Зачастую, данные статьи сопровождаются комментариями никогда так не делать. И у многих, наверно, возникает вопрос, а как собственно можно делать. Ситуацию несколько прояснила официальная документация. Взяв её за основу, я хочу показать, как можно организовать безопасность микросервисов максимально простым и быстрым способом.

Читать далее
Всего голосов 3: ↑3 и ↓0 +3
Комментарии 12

Добавляем Refresh Token

Время на прочтение 4 мин
Количество просмотров 125K


В прошлой статье я рассказывал про основы JWT. Если на пальцах, то это просто ключ, с помощью которого мы открываем дверь к приватным ресурсам. А что, если этот ключ украдут (точнее, сделают дубликат). Тогда кто-то еще сможет входить на сервер под вашим именем, причём мы об этом можем даже не узнать. Такого сценария мы не хотим допустить. Но что делать?

Читать дальше →
Всего голосов 21: ↑19 и ↓2 +17
Комментарии 26

Spring-потрошитель: жизненный цикл Spring Framework

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 43K

Ни для кого не секрет, что Spring Framework один из самых популярных фреймворков для приложений на языке Java. Он интегрировал в себя самые полезные и актуальные технологии, такие как i18n, JPA, MVC, JMS, Cloud и т.п.

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

Читать далее
Всего голосов 19: ↑15 и ↓4 +11
Комментарии 9

Лучшие практики для Java-приложений в Kubernetes

Уровень сложности Средний
Время на прочтение 14 мин
Количество просмотров 11K

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

Однако я рассматриваю все правила в рамках характеристик Java, а также показываю решения и инструменты, доступные для приложений на базе JVM. 

Некоторые из этих рекомендаций по Kubernetes навязаны дизайном при использовании самых популярных Java-фреймворков, таких, как Spring Boot или Quarkus. Я покажу вам, как эффективно использовать их для упрощения жизни разработчиков.

Читать далее
Всего голосов 12: ↑10 и ↓2 +8
Комментарии 0

Мой опыт переезда в Лондон. Часть 2. Собеседования в FAANG

Уровень сложности Простой
Время на прочтение 11 мин
Количество просмотров 13K

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

Читать далее
Всего голосов 26: ↑24 и ↓2 +22
Комментарии 5

Полное понимание асинхронности в браузере

Время на прочтение 24 мин
Количество просмотров 92K
Про асинхронность JavaScript написано много статей, документации и книг. Но вся информация сильно распределена по интернету, поэтому сложно быстро и полностью разобраться, что к чему, и составить цельную картину в голове. Не хватает одного исчерпывающего гайда. Именно эту потребность я и хочу закрыть своей статьёй.

Читать дальше →
Всего голосов 78: ↑78 и ↓0 +78
Комментарии 25

12 неочевидных правил проектирования REST API

Уровень сложности Средний
Время на прочтение 10 мин
Количество просмотров 22K

Раскрываем 12 кейсов проектирования спецификации REST API из практики red_mad_robot, которые помогут сэкономить время для разработки. А также объясняем, почему стоит следовать подходу contract first — писать спецификацию прежде кода.

Читать далее
Всего голосов 16: ↑13 и ↓3 +10
Комментарии 16

Как разработчику стать тимлидом и что это ему даст

Время на прочтение 9 мин
Количество просмотров 13K

Тимлид (или ведущий разработчик, team leader) — это должность, в обязанности которой входит огромное количество задач. И в различных компаниях тимлиды занимаются разными вещами — кто-то больше развивает команду и планирует спринты, другие — проектируют системы или коммуницируют с другими отделами и даже заказчиками.

Летом 2023 года Хекслет запускает бесплатную Школу Тимлида — это курс, который поможет начинающему или будущему руководителю правильно работать со своей командой разработчиков. Преподаватель Школы Саша Толокнов подробно разобрал программу Школы тимлида и объяснил, как эффективно работать с разработчиками, быть классным лидом и при этом не сгореть.

Читать далее
Всего голосов 20: ↑9 и ↓11 -2
Комментарии 15

Spring Cloud DataFlow overview

Время на прочтение 6 мин
Количество просмотров 3.4K

Хабр, добрый день! Что первое приходит в голову, когда вы слышите «ETL»? Скорее всего airflow?

По сути airflow — это стандарт де‑факто в мире обработки и трансформации данных. Но в случае если в разработка ведется на java, то тогда придется либо переучивать разработчиков на python, либо нанимать еще python разработчиков. В большинстве случаев хочется вносить минимум изменений в процесс разработки и тех. стек. Решение есть! Фреймворк Spring Cloud предоставляет DataFlow — фреймворк для организации ETL в spring среде.

Читать далее
Всего голосов 11: ↑9 и ↓2 +7
Комментарии 2

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Backend Developer
Middle
От 200 000 ₽
Java
Git
SQL
Java Spring Framework
Docker
Kubernetes
PostgreSQL