Инверсия зависимостей - один из принципов SOLID, который лежит в основе построения гексагональной архитектуры приложения. Существует множество статей, которые раскрывают суть принципа и объясняют как его применять. И, возможно, читатель уже знаком с ними. Но в рамках данной статьи будет продемонстрирован подробный разбор "тактических" приемов для успешного использования инверсии зависимостей и, возможно, в этом смысле даже искушенный читатель сможет найти для себя что-то новое. Примеры представлены на языке программирования Java с соответствующим окружением, но при этом для чтения достаточно понимания похожих языков программирования.
Java Developer
Архитектура приложений Web 3.0
Архитектура приложений Web 3.0 (или «DApps») полностью отличается от приложений Web 2.0.
Возьмем, к примеру, Medium, простой блог-сайт, который позволяет пользователям публиковать свой собственный контент и взаимодействовать с контентом других.
Как приложение Web 2.0 это может показаться простым, но в архитектуру Medium входит многое, чтобы сделать все это возможным:
Во-первых, должно быть место для хранения важных данных, таких как информация о пользователях, сообщения, теги, комментарии, лайки, и так далее. Для этого требуется постоянно обновляемая база данных.
Во-вторых, бэкэнд (написанный на таком языке, как Node.js, Java или Python) должен определять бизнес-логику Medium. Например, что происходит, когда новый пользователь регистрируется, публикует новый блог или комментирует чей-то еще блог?
В-третьих, фронтэнд (обычно написанный на JavaScript, HTML и CSS) должен определять логику пользовательского интерфейса Medium. Например, как выглядит сайт и что происходит, когда пользователь взаимодействует с каждым элементом на странице?
Собрав все это вместе, когда вы пишете сообщение в блоге на Medium, вы взаимодействуете с его фронтэндом, который общается с его бэкэндом, который общается с его базой данных. Весь этот код размещается на централизованных серверах и отправляется пользователям через интернет-браузер. Это хороший общий обзор того, как сегодня работает большинство приложений Web 2.0.
Глубокое погружение в Java Memory Model
Я провел в изучении JMM много часов и теперь делюсь с вами знаниями в простой и понятной форме.
В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике. Да, в интернете накопилось достаточно много информации про JMM/happens-before, и, кажется, что очередную статью про такую заезженную тему можно пропускать мимо. Однако я постараюсь дать вам намного большее и глубокое понимание JMM, чем большинство информации в интернете. После прочтения этой статьи вы будете уверенно рассуждать о таких вещах как memory ordering, data race и happens-before. JMM — сложная тема и не стоит верить мне на слово, поэтому большинство моих утверждений подтверждается цитатами из спеки, дизассемблером и jcstress тестами.
Большой гайд. Пишем микросервисы на Java и Spring Boot, заворачиваем в Docker, запускаем на EKS, мониторим на Grafana
Туториалы делятся на две больших категории: либо "как нарисовать сову", либо подробно расписанные тысячи шагов в формате "напиши туториал для дурака - и только дурак захочет его читать".
Как какой из двух категорий относится эта статья — решать вам.
В этой статье вы увидите пошаговое создание 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 с сертификацией по ФСТЭК. Особенности российских технологий - тема для отдельной статьи. Если вы захотите таковую после чтения этого гайда - отметьтесь в комментариях.
Spring Test Containers как бины
TestContainers это отличный инструмент, позволяющий тестировать свой код в prod-like окружении.
Однако трудности возникают когда появляется потребность провести сложное интеграционное тестирование используя несколько таких контейнеров, например, базы + очереди, нескольких очередей и т.д.
В этой статье мы разберём как подружить несколько контейнеров, особенно когда один контейнер использует такие настройки, которые генерирует второй контейнер во время своего старта.
Достигнем этого при помощи кастомизации тестового контекста + всеми любимого BeanFactoryBostProcessor'а.
Пишем свой Validation API для Spring Boot приложения
Добрый день, уважаемый читатель Хабра! Меня зовут Вартанян Артур и я работаю в компании Reksoft Java-разработчиком. В данной статье мы напишем свой собственный вариант реализации валидации для объектов и его полей, используя Java Reflection Api и Spring AOP.
Асинхронное взаимодействие Spring-микросервисов с помощью Kafka
В этой статье разберемся, как реализовать обмен сообщениями между Java-микросервисами на Spring с помощью Kafka.
Полезные и неизвестные возможности Java
В этой статье вы узнаете о некоторых полезных функциях Java, о которых вы, вероятно, не слышали.
Это мой личный список функций, использованных мной недавно или с которыми я столкнулся при чтении статей о Java.
Я сосредоточусь не на языковых аспектах, а на API. Я уже опубликовал все примеры, относящиеся к этой статье, в Твиттере в форме, показанной ниже. Вы также можете найти их в моей учетной записи Twitter или просто под #java
хэштегом.
Да что это такое, ваше качество кода?
Салют, коллеги.
Лично я, очень люблю поговорить про качество, поддерживаемость и выразительность кода (эти умные слова, часто звучат на код ревью)
К сожалению, такие разговоры часто и быстро скатываются в холивар. Но, кажется, я нашел способ "вести разговоры о высоком без боли".
Мысль такая, если приземлить обсуждение на конкретную практическую задачу, то будет сильно проще понять, какой именно смысл вкладывает в слово "выразительность" собеседник.
Как справиться с Debezium + MySql + Spring Could Streams, Part 1
Добрый день, Хаброжители!
Это моя первая статья на Хабре, любые замечания, предложения, пожелания приветствуются!
В этой статье (часть 1), я попытаюсь рассказать и показать как поднять и настрить stand along Debezium CDC + MySql server.
Понимание утечек памяти в Java
Одним из основных преимуществ Java является автоматизированное управление памятью с помощью встроенного сборщика мусора (или сокращенно GC). GC неявно заботится о выделении и освобождении памяти и, таким образом, способен решать большинство проблем, связанных с ее утечкой.
Хотя GC эффективно обрабатывает значительную часть памяти, он не гарантирует надежного решения проблемы с ее утечкой. GC достаточно умен, но не безупречен. Утечки памяти все еще могут закрасться даже в приложения, созданные добросовестным разработчиком.
По-прежнему возможны ситуации, когда приложение создает значительное количество лишних объектов, расходуя ресурсы памяти, что иногда приводит к его полному отказу.
Утечки памяти — это настоящая проблема в Java. В этом руководстве мы рассмотрим, каковы потенциальные причины утечек, как распознавать их в рантайме и как справиться с ними в нашем приложении.
За двумя зайцами погонишься — чеклист для HighLoad системы гуглить будешь
Эта статья будет полезна, если вы начинаете проект, который может перерасти в HL (HighLoad) или у вас уже есть проект, который имеет высокую нагрузку. Каждый пункт этого чек-листа поможет избежать определенных проблем, возникающих в процессе эксплуатации таких систем. И хотя некоторые пункты могут показаться довольно очевидными, а иные даже лишними, я рекомендую ознакомиться со всем списком, т.к. судя по статьям на хабре, периодически с некоторыми из этих проблем встречаются компании, которые уже обрели некоторую популярность. Дополняя систему каким то компонентом довольно просто забыть о таких вещах, как KeepAlive между двумя сервисами, а процессы изменения и дополнения в IT происходят постоянно.
Я не буду тут говорить про вертикальное и горизонтальное масштабирование, о микросервисах, балансировке нагрузки, важности тестирования и прочем таком. Будем считать, что читатели все это уже знают, ну а если кто-то не знает, пусть гуглит сейчас. Кроме того, тут вы не найдете инструкции, как проектировать и строить такие системы, цель этой статьи проста - собрать воедино какой-никакой удобоваримый чек-лист для HighLoad системы. Пункты взяты не с потолка - это результат исследовательской деятельности перемежающейся с личным опытом.
Сравнение подходов к реализации распределенных транзакций для микросервисов
Как архитектор-консультант в Red Hat, я имел возможность поработать над множеством проектов для наших клиентов. У каждого из них есть свои особенности, которые, однако, имеют некоторые общие черты. Большинство клиентов хотят знать, как скоординировать запись в несколько систем одновременно. Ответ на этот вопрос обычно включает подробное объяснение двойной записи, распределенных транзакций, современных альтернатив, а также возможных сценариев сбоев и недостатков каждого подхода. Как правило, именно в этот момент заказчик понимает, что разделение монолитного приложения на микросервисы - долгий и сложный путь, обычно требующий компромиссов.
Gradle: управляя зависимостями
В статье рассматриваются основы управления зависимостями в Gradle, приводятся углублённые практические примеры, небольшие лайфхаки и ссылки на нужные места в документации.
Spring Data: нюансы @Transactional
Любите Spring? А Spring Data? Я тоже люблю. Если хотите разобраться, почему же возникает этот unexpected transaction rollback
, а также быть уверенным, что транзакция отменится, а не закоммитится, добро пожаловать под кат.
Spring Boot + ControllerAdvice + ResponseBodyAdvice или как обернуть ответ контроллеров
Всем привет, друзья! Сегодня хочу рассказать про способ использование Controller Advice для оборачивания объекта, возвращаемого контроллерами, в новый класс на уровне DispatcherServlet.
Как проходят архитектурные секции собеседования в Яндексе: практика дизайна распределённых систем
Технический уровень кандидата у нас оценивается за счет всего двух типов интервью: секции с кодом и секции дизайна компьютерных систем. Первый тип мы назначаем всем претендентам вне зависимости от их уровня, а вот у кандидатов, которые претендуют на должность старшего специалиста, нужно проверять не только способность писать эффективный и работоспособный код, но и способность разрабатывать сложные системы в целом.
Что такое дизайн информационных систем
Основная цель любой IT-компании — производить сервисы, которые решают задачи пользователей. Мы должны уметь собирать элементы системы в единый механизм, который будет эффективно выполнять поставленную цель, и если первый тип собеседований нацелен в первую очередь на проверку необходимого минимума, то интервью про дизайн систем проверяет достаточность навыков кандидата в достижении конечной цели. Далекому от IT пользователю принципы и устройство систем могут казаться бесконечно сложными, но мы, их разработчики, должны иметь (не обязательно детальное) представление о принципах функционирования и роли каждого компонента.
Опытный читатель может сказать — в мире полно платных и бесплатных решений, из которых я могу собрать систему как из деталей конструктора, зачем мне понимать устройство этих деталей?
Применение интерфейса Collector для работы с потоками в реальных Java-проектах
Collector
и сопутствующие механизмы используются в реальных проектах.В Java-программировании при работе с потоками широкое применение находят методы класса
Collectors
. Эти методы позволяют возвращать либо объекты, в основе которых лежит базовый класс Collection
, либо — скалярные значения. В первом случае, то есть — для возврата коллекций, применяют один из методов, имя которого выглядит как toXXX()
, а во втором случае используется, например, метод reducing()
.Представим себе интернет-магазин, в котором есть корзина. Модель корзины выглядит так, как показано ниже.
Модель корзины
Если перевести эту диаграмму классов в код, опустив некоторые детали, то получится следующее.
Linux-дистрибутивы для анонимной работы в интернете — что нового?
Самый известный из секьюрных дистрибутивов — Tails, он выпускается с 2009 года. Там всё привычно и знакомо: вставил флэшку, загрузился, поработал, почистил RAM за собой. При этом периодически появляются альтернативные решения, такие как Whonix, Qubes OS или совсем новый дистрибутив Obscurix.
Личная безопасность — не та сфера, где следят за модой. Это не какое-то хобби, мобильная разработка или дизайн, здесь речь о сохранении жизни и свободы. Нововведения — не дань эстетике или комфорту, а попытка обеспечить ещё более надёжную защиту.
1000 и 1 способ сесть на мель в Spring WebFlux при написании высоконагруженного сервиса
Источник изображения: Shutterstock.com/photowind
Добрый день, меня зовут Тараканов Анатолий, я senior java разработчик SberDevices. 2.5 года программирую на Java, до этого 6 лет писал на C# и 1 год на Scala. Хочу поделиться опытом создания сервиса-оркестратора Voice Processing Service. Он является точкой входа для пользователей семейства виртуальных ассистентов Салют. Через него также проходит часть трафика приложений SmartMarket, где любой разработчик может написать навык для наших виртуальных ассистентов Салют.
Одним словом, на сервис приходится немалая нагрузка. Давайте посмотрим, какие проблемы при его создании возникли и как мы их решали, а также сколько времени ушло на поиск причин. И всё это в контексте реактивного фреймворка Spring WebFlux.
Немного о сервисе
Начнем с обзора архитектуры нашего сервиса-оркестратора. Он управляет процессом обработки входящего трафика от пользователей, формированием и передачей ответа. Среди смежных систем, к которым он обращается, есть такие сервисы:
- идентификации по токену, а также голосовым и видеоданным;
- насыщения запроса дополнительными данными о пользователе и истории взаимодействия;
- преобразования речевого сигнала в текстовое представление;
- обработки естественного языка;
- преобразования текста в голосовое представление;
- запуска пилотных фич;
- распознавания музыки и другие.
Информация
- В рейтинге
- Не участвует
- Откуда
- London, England - London, Великобритания
- Дата рождения
- Зарегистрирован
- Активность