JUnit расширение DbChange
Многие разработчики работают с приложениями взаимодействующими с базой. При написании интеграционных тестов для таких приложений могут возникать потребности: выполнять подготовку тестовых данных в базе, откатывать изменения, делать дополнительные проверки в базе.
Если вы пишите тесты с использованием JUnit, то стоит обратить внимание на замечательное расширение DbChange. При помощи него вы можете декларативно описать шаги взаимодействия с базой. Мне очень понравился такой подход. Рекомендую попробовать.
https://habr.com/ru/post/684692/
Многие разработчики работают с приложениями взаимодействующими с базой. При написании интеграционных тестов для таких приложений могут возникать потребности: выполнять подготовку тестовых данных в базе, откатывать изменения, делать дополнительные проверки в базе.
Если вы пишите тесты с использованием JUnit, то стоит обратить внимание на замечательное расширение DbChange. При помощи него вы можете декларативно описать шаги взаимодействия с базой. Мне очень понравился такой подход. Рекомендую попробовать.
https://habr.com/ru/post/684692/
Хабр
Введение в DbChange JUnit расширение
Простой и декларативный способ выполнять sql запросы в JUnit тестах. Введение Структура JUnit теста следует модели тестового сценария (test case): ПредУсловия (PreConditions) - это действия, которые...
👍5
Вышла Java 19
В этот релиз попало более двух тысяч закрытых задач и 7 JEP'ов.
https://habr.com/ru/post/689344/
В этот релиз попало более двух тысяч закрытых задач и 7 JEP'ов.
https://habr.com/ru/post/689344/
Хабр
Вышла Java 19
Вышла общедоступная версия Java 19 . В этот релиз попало более двух тысяч закрытых задач и 7 JEP'ов . Release Notes можно посмотреть здесь . Изменения API – здесь . Ссылки на скачивание: Oracle...
👍6
Обобщенное программирование – обзор реализаций
В статье дается довольно занимательное сравнение поддержки обобщенного программирования в C++, Java, C#(.Net). Наилучшего подхода не существует, любой подход – это всегда компромисс, при котором одними преимуществами жертвуют ради других.
https://habr.com/ru/company/piter/blog/656377/
В статье дается довольно занимательное сравнение поддержки обобщенного программирования в C++, Java, C#(.Net). Наилучшего подхода не существует, любой подход – это всегда компромисс, при котором одними преимуществами жертвуют ради других.
https://habr.com/ru/company/piter/blog/656377/
Хабр
Обобщенное программирование – обзор реализаций
В большинстве сильно типизированных языков поддерживается обобщенное программирование. Круг проблем, которые решаются на этих языках, один и тот же, но сами проблемы решались в разное время разными...
Better Java logging, inspired by Clojure and Rust
Недавно наткнулся на интересную статью про логирование. Там сравниваются подходы к логированию в Clojure, Rust и Java. Самое вкусное в этой статье - это попытка автора реализовать в Java более лучший способ логирования. Он в реализации использует новые фичи из последних версий Java и интересно проследить ход его мысли. Он по шагам добавляет новый функционал.
С практической точки зрения я не во всем согласен с автором. Особого профита от namespace-ов я особо не вижу. В моем представлении реализация получилась достаточно перегруженной и самое главное нет возможности отключить не нужные фичи. Возможно стоит доработать решение. Не нужно забывать еще и про GG. В частности в том же log4j есть режим "garbage free".
Про log4j есть режим "garbage free" - https://logging.apache.org/log4j/2.x/manual/garbagefree.html
https://mccue.dev/pages/9-25-22-better-java-logging
Недавно наткнулся на интересную статью про логирование. Там сравниваются подходы к логированию в Clojure, Rust и Java. Самое вкусное в этой статье - это попытка автора реализовать в Java более лучший способ логирования. Он в реализации использует новые фичи из последних версий Java и интересно проследить ход его мысли. Он по шагам добавляет новый функционал.
С практической точки зрения я не во всем согласен с автором. Особого профита от namespace-ов я особо не вижу. В моем представлении реализация получилась достаточно перегруженной и самое главное нет возможности отключить не нужные фичи. Возможно стоит доработать решение. Не нужно забывать еще и про GG. В частности в том же log4j есть режим "garbage free".
Про log4j есть режим "garbage free" - https://logging.apache.org/log4j/2.x/manual/garbagefree.html
https://mccue.dev/pages/9-25-22-better-java-logging
👍1
Shift Left Approach for API Standardization
Как я уже писал в одном из прошлых постов разработчики не любят читать "длинных инструкций" и нужны автоматизированные средства проверки. С разработкой API тоже беда. Вы можете разработать стандарты и взять за основу Microsoft REST API Guidelines https://github.com/Microsoft/api-guidelines или Google API design guide https://cloud.google.com/apis/design/ или посмотреть примеры на API Stylebook http://apistylebook.com/ но чем больше мануал тем меньше вероятность что прочтут до конца и самое главное правильно поймут.
Решение: воспользоваться автоматизацией. Если разговор про OpenAPI, то есть целый класс инструментов линтеров https://nordicapis.com/8-openapi-linters/
В статье приводится пример для Zally. У данного инструмента есть также Gradle plugin. https://github.com/thiyagu06/zally-gradle-plugin
https://www.infoq.com/articles/shift-left-api/
Как я уже писал в одном из прошлых постов разработчики не любят читать "длинных инструкций" и нужны автоматизированные средства проверки. С разработкой API тоже беда. Вы можете разработать стандарты и взять за основу Microsoft REST API Guidelines https://github.com/Microsoft/api-guidelines или Google API design guide https://cloud.google.com/apis/design/ или посмотреть примеры на API Stylebook http://apistylebook.com/ но чем больше мануал тем меньше вероятность что прочтут до конца и самое главное правильно поймут.
Решение: воспользоваться автоматизацией. Если разговор про OpenAPI, то есть целый класс инструментов линтеров https://nordicapis.com/8-openapi-linters/
В статье приводится пример для Zally. У данного инструмента есть также Gradle plugin. https://github.com/thiyagu06/zally-gradle-plugin
https://www.infoq.com/articles/shift-left-api/
GitHub
GitHub - microsoft/api-guidelines: Microsoft REST API Guidelines
Microsoft REST API Guidelines. Contribute to microsoft/api-guidelines development by creating an account on GitHub.
👍1
Работа с проверяемыми исключениями при использовании Stream-ом
Я думаю, что многих из вас раздражают проверяемые исключения "всплывающие" при попытке выстроить "красивый код" со Stream-ами. Ряд библиотек приходят к нам на помощь и предлагают свои решения. В статье приводится пример проблемы и того как разные библиотеки предлагают ее решать. Решение предлагаемое в библиотеке Vavr мне кажется более полным так как позволяет в функциональном стиле описать в том числе и обработку исключения.
https://blog.frankel.ch/exceptions-lambdas/
Я думаю, что многих из вас раздражают проверяемые исключения "всплывающие" при попытке выстроить "красивый код" со Stream-ами. Ряд библиотек приходят к нам на помощь и предлагают свои решения. В статье приводится пример проблемы и того как разные библиотеки предлагают ее решать. Решение предлагаемое в библиотеке Vavr мне кажется более полным так как позволяет в функциональном стиле описать в том числе и обработку исключения.
https://blog.frankel.ch/exceptions-lambdas/
A Java geek
Exceptions in lambdas
Java introduced the concept of checked exceptions. The idea of forcing developers to manage exceptions was revolutionary compared to the earlier approaches. Nowadays, Java remains the only widespread language to offer checked exceptions. For example, every…
👍5
Настраиваем память JVM-приложения в Kubernetes
Я думаю, что многие из вас сталкиваются в работе либо с Kubernetes либо OpenShift и как известно там есть особенности в том сколько "видит" памяти ваше JVM приложение. В статье неплохо раскрывается эта тема и самое главное без лишней "воды". Также предлагается скрипт для автоматизации. Думаю, что в работе будет однозначно полезно.
https://habr.com/ru/company/domclick/blog/691240/
Я думаю, что многие из вас сталкиваются в работе либо с Kubernetes либо OpenShift и как известно там есть особенности в том сколько "видит" памяти ваше JVM приложение. В статье неплохо раскрывается эта тема и самое главное без лишней "воды". Также предлагается скрипт для автоматизации. Думаю, что в работе будет однозначно полезно.
https://habr.com/ru/company/domclick/blog/691240/
Хабр
Настраиваем память JVM-приложения в Kubernetes
Друзья, всем привет! Как известно, в Kubernetes у каждого pod’а есть ограничение на использование памяти ( limits.memory ), и, как показывает опыт, далеко не всегда очевидно, как JVM-приложение...
👍2
Apache Kafka 3.3 заменяет ZooKeeper новым протоколом консенсуса KRaft
Apache Software Foundation выпустила Apache Kafka 3.3.1 со множеством новых улучшений. В частности, это первый выпуск, который помечает протокол консенсуса KRaft (Kafka Raft) как готовый к промышленной эксплуатации.
KRaft — это протокол консенсуса, разработанный для управления метаданными непосредственно в Apache Kafka. Это значительно упрощает архитектуру Kafka, возлагая ответственность за метаданные на саму Kafka без необходимости использования стороннего инструмента, такого как Apache ZooKeeper. KRaft улучшает масштабируемость и отказоустойчивость разделов, а также упрощает развертывание Apache Kafka.
https://developer.confluent.io/learn/kraft/
Apache Software Foundation выпустила Apache Kafka 3.3.1 со множеством новых улучшений. В частности, это первый выпуск, который помечает протокол консенсуса KRaft (Kafka Raft) как готовый к промышленной эксплуатации.
KRaft — это протокол консенсуса, разработанный для управления метаданными непосредственно в Apache Kafka. Это значительно упрощает архитектуру Kafka, возлагая ответственность за метаданные на саму Kafka без необходимости использования стороннего инструмента, такого как Apache ZooKeeper. KRaft улучшает масштабируемость и отказоустойчивость разделов, а также упрощает развертывание Apache Kafka.
https://developer.confluent.io/learn/kraft/
Confluent
KRaft - Apache Kafka Without ZooKeeper
Apache Kafka Raft (KRaft) simplifies Kafka architecture by consolidating metadata into Kafka, removing the ZooKeeper dependency. Learn how it works, benefits, and what this means for Kafka's scalability.
👍4
Archunit инструмент автоматизации проверки качества архитектуры.
Сейчас все помешаны на автоматизации и стараются ее применить во всем. Я достаточно давно наткнулся на очень интересный проект Archunit. Использовать его для валидации промышленного кода пока не доводилось, но выглядит он достаточно интересно. Рекомендую обратить внимание.
https://archunit.org/
Сейчас все помешаны на автоматизации и стараются ее применить во всем. Я достаточно давно наткнулся на очень интересный проект Archunit. Использовать его для валидации промышленного кода пока не доводилось, но выглядит он достаточно интересно. Рекомендую обратить внимание.
https://archunit.org/
ArchUnit
Unit test your Java architecture
Start enforcing your architecture within 30 minutes using the test setup you already have.
The Polyglot Developer Reference
Недавно наткнулся на интересный инструмент позволяющий сравнивать возможности разных языков программирования. Как минимум можно сравнивать там разные версии Java, но сравнения возможностей Java с другими языками тоже достаточно интересны. Я думаю, что экосистему определяет не только синтаксис языка, но так же очень важную роль играют и доступные фреймворки и библиотеки. Думаю было бы интересно получить такое же сравнение для наиболее типовых кейсов. Например сравнение реализации типовых REST, gRPC и интеграций через Kafka.
https://codethesaur.us/
Недавно наткнулся на интересный инструмент позволяющий сравнивать возможности разных языков программирования. Как минимум можно сравнивать там разные версии Java, но сравнения возможностей Java с другими языками тоже достаточно интересны. Я думаю, что экосистему определяет не только синтаксис языка, но так же очень важную роль играют и доступные фреймворки и библиотеки. Думаю было бы интересно получить такое же сравнение для наиболее типовых кейсов. Например сравнение реализации типовых REST, gRPC и интеграций через Kafka.
https://codethesaur.us/
codethesaur.us
Code Thesaurus - Welcome
Code Thesaurus: A polyglot developer reference tool
🔥2👏1
VM Options Explorer
Chris Newland, один из авторов книги "Optimizing Java - Practical Techniques for Improving JVM Application Performance", создал ресурс на котором собрал информацию по опциям JVM и полезным ссылкам.
https://chriswhocodes.com/
Chris Newland, один из авторов книги "Optimizing Java - Practical Techniques for Improving JVM Application Performance", создал ресурс на котором собрал информацию по опциям JVM и полезным ссылкам.
https://chriswhocodes.com/
Chriswhocodes
VM Options Explorer - OpenJDK11 HotSpot
Может ли Java-приложение использовать больше памяти, чем размер кучи?
В этой статье хорошо раскрыта тема устройства памяти JVM. Также затронута тема инструментов диагностики и параметры JVM.
Лично для меня там была интересна тема про Native Memory Tracking.
https://habr.com/ru/company/otus/blog/705982/
В этой статье хорошо раскрыта тема устройства памяти JVM. Также затронута тема инструментов диагностики и параметры JVM.
Лично для меня там была интересна тема про Native Memory Tracking.
https://habr.com/ru/company/otus/blog/705982/
Хабр
Может ли Java-приложение использовать больше памяти, чем размер кучи
1. Введение Возможно, вы замечали, что Java-приложение может превышать лимит памяти, указанный в параметре -Xmx (максимальный размер кучи). Дело в том, что JVM помимо кучи использует и другие области...
👍2🔥1
В рассылке OpenJDK предложен новый проект Galahad.
В рамках проекта планируется внедрение в OpenJDK технологий GraalVM, связанных с Java, а именно JIT-компилятора GraalVM (полностью написанного на Java) в качестве альтернативы существующему JIT-компилятору Hotspot. Затем, следующим шагом будет использование AOT-компилятора GraalVM для компиляции JIT-компилятора, а позднее – портирование Native Image в качестве общего решения для любых Java-приложений.
Начиная с JDK 20, GraalVM будет выходить 2 раза в год (а не 4, как раньше). Следующая версия GraalVM выйдет одновременно с JDK 20 в марте и будет называться GraalVM for JDK 20.
https://mail.openjdk.org/pipermail/discuss/2022-December/006164.html
В рамках проекта планируется внедрение в OpenJDK технологий GraalVM, связанных с Java, а именно JIT-компилятора GraalVM (полностью написанного на Java) в качестве альтернативы существующему JIT-компилятору Hotspot. Затем, следующим шагом будет использование AOT-компилятора GraalVM для компиляции JIT-компилятора, а позднее – портирование Native Image в качестве общего решения для любых Java-приложений.
Начиная с JDK 20, GraalVM будет выходить 2 раза в год (а не 4, как раньше). Следующая версия GraalVM выйдет одновременно с JDK 20 в марте и будет называться GraalVM for JDK 20.
https://mail.openjdk.org/pipermail/discuss/2022-December/006164.html
👍1
Что писать в комментариях к коду?
Вопрос казалось бы достаточно простой, но сама по себе тема холиварная. Если капнуть глубже, то можно на просторах интернет найти много разных противоречивых ответов. Более того есть адепты разных движений, которые достаточно яростно будут отстаивать "свое самое правильное" решение.
Я бы рекомендовал рассматривать комментарии как инструмент позволяющий дополнять "историю" рассказываемую кодом т.е. комментарии не должны пересказывать код.
Возникает резонный вопрос, а что же стоит в них писать. В статье к этому посту предлагается достаточно интересный подход. Попробуйте в комментарии ответить на вопрос "Почему?", а код написать так, чтобы он отвечал на вопросы "Что?" и "Как?". Код описывает то как достичь результата и в нем невозможно описать зачем вы это делаете. Комментарий прекрасное место, для того чтобы дополнить код и ответить на вопрос Почему этот код написан т.е. какую проблему он должен решить.
UPD. Я подумал, что этот подход может технически хорошо вписаться\дополнить парадигму разработки через тестирование (test-driven development, TDD). По факту при TDD вы сначала в тестах (на уровне кода) описываете поведение своего кода и уже потом приступаете к реализации этого поведения. В этом пазле как раз не хватает начальной постановки т.е. ради чего все это делается. Технически можно начать с комментария к классу, в котором будет зафиксировано какую проблему должен решать класс без уточнения того как он этого добьется (ответ на вопрос "Почему?").
https://dzone.com/articles/why-should-i-comment-my-code
Вопрос казалось бы достаточно простой, но сама по себе тема холиварная. Если капнуть глубже, то можно на просторах интернет найти много разных противоречивых ответов. Более того есть адепты разных движений, которые достаточно яростно будут отстаивать "свое самое правильное" решение.
Я бы рекомендовал рассматривать комментарии как инструмент позволяющий дополнять "историю" рассказываемую кодом т.е. комментарии не должны пересказывать код.
Возникает резонный вопрос, а что же стоит в них писать. В статье к этому посту предлагается достаточно интересный подход. Попробуйте в комментарии ответить на вопрос "Почему?", а код написать так, чтобы он отвечал на вопросы "Что?" и "Как?". Код описывает то как достичь результата и в нем невозможно описать зачем вы это делаете. Комментарий прекрасное место, для того чтобы дополнить код и ответить на вопрос Почему этот код написан т.е. какую проблему он должен решить.
UPD. Я подумал, что этот подход может технически хорошо вписаться\дополнить парадигму разработки через тестирование (test-driven development, TDD). По факту при TDD вы сначала в тестах (на уровне кода) описываете поведение своего кода и уже потом приступаете к реализации этого поведения. В этом пазле как раз не хватает начальной постановки т.е. ради чего все это делается. Технически можно начать с комментария к классу, в котором будет зафиксировано какую проблему должен решать класс без уточнения того как он этого добьется (ответ на вопрос "Почему?").
https://dzone.com/articles/why-should-i-comment-my-code
DZone
Why Should I Comment My Code?
How to write source code comments that help to understand the code much faster.
👍3
Суффикс Impl и префикс I зло!
Я ненавижу суффикс Impl в именах классов и префикс I в именах интерфейсов. Первый появился с легкой руки IBM, а второй Microsoft. Оба чужды идеологии ООП и Java в частности. В Java этот визуальный шум "занесли" выходцы из других языков. Еше хуже когда в одном проекте их начинают мешать друг с другом.
Я настоятельно не рекомендую их использовать.
Для клиента используемый тип данных должен быть прозрачным и ему должно быть безразлично общается он с интерфейсов или конкретной реализацией. I создает лишь визуальный шум.
Для поставщика функционала важны детали реализации и в названии конкретных классов он захочет выразить эту разницу. Impl не несет никакой смысловой нагрузки. Еще хуже если для первой реализации используется название интерфейса с префиксов Impl так как она только запутывает и не дает ответа на вопрос о том чем первая реализация будет отличаться от всех последующих.
https://octoperf.com/blog/2016/10/27/impl-classes-are-evil/#why-impl-is-bad
Я ненавижу суффикс Impl в именах классов и префикс I в именах интерфейсов. Первый появился с легкой руки IBM, а второй Microsoft. Оба чужды идеологии ООП и Java в частности. В Java этот визуальный шум "занесли" выходцы из других языков. Еше хуже когда в одном проекте их начинают мешать друг с другом.
Я настоятельно не рекомендую их использовать.
Для клиента используемый тип данных должен быть прозрачным и ему должно быть безразлично общается он с интерфейсов или конкретной реализацией. I создает лишь визуальный шум.
Для поставщика функционала важны детали реализации и в названии конкретных классов он захочет выразить эту разницу. Impl не несет никакой смысловой нагрузки. Еще хуже если для первой реализации используется название интерфейса с префиксов Impl так как она только запутывает и не дает ответа на вопрос о том чем первая реализация будет отличаться от всех последующих.
https://octoperf.com/blog/2016/10/27/impl-classes-are-evil/#why-impl-is-bad
Octoperf
Impl classes are evil - OctoPerf
Why you should never name your class with Impl suffix.
👍8🤔3❤1🔥1
А вы знали что можно делать через pg_logical_emit_message() в PostgreSQL?
Сегодня прочитал очень занимательную статью про интересные способы использования pg_logical_emit_message(). На Oracle я такое никогда не делал и был приятно удивлен. Не знаю на сколько такое решение производительно, но звучит очень соблазнительно.
Через pg_logical_emit_message() можно писать в write-ahead log (WAL) базы и есть стандартный открытый апи для чтения из него (log-based change data capture CDC).
Способы использования:
1. Outbox Pattern. Если коротко, то он позволяет решить проблему с распределенными транзакциями. Например изменения в базе и уведомление через кафку смежников.
2. Логирование. Для меня пока выглядит слишком…экзотически, но возможно нужно привыкнуть к этой мысли и попытаться найти оправдания такому подходу. Еще помедитирую на эту тему.
3. Логи аудита. Пока кажется, что это частный случай пункта 2.
4. Advancing Replication Slots. Репликация для баз на одной машине. Возможно есть кто такое использует.
Краткий итог. Лично для меня больше интересен пункт 1. Я о таком даже не думал. Стоит попробовать и посмотреть на сколько это пригодно под нагрузками.
https://www.infoq.com/articles/wonders-of-postgres-logical-decoding-messages/
Сегодня прочитал очень занимательную статью про интересные способы использования pg_logical_emit_message(). На Oracle я такое никогда не делал и был приятно удивлен. Не знаю на сколько такое решение производительно, но звучит очень соблазнительно.
Через pg_logical_emit_message() можно писать в write-ahead log (WAL) базы и есть стандартный открытый апи для чтения из него (log-based change data capture CDC).
Способы использования:
1. Outbox Pattern. Если коротко, то он позволяет решить проблему с распределенными транзакциями. Например изменения в базе и уведомление через кафку смежников.
2. Логирование. Для меня пока выглядит слишком…экзотически, но возможно нужно привыкнуть к этой мысли и попытаться найти оправдания такому подходу. Еще помедитирую на эту тему.
3. Логи аудита. Пока кажется, что это частный случай пункта 2.
4. Advancing Replication Slots. Репликация для баз на одной машине. Возможно есть кто такое использует.
Краткий итог. Лично для меня больше интересен пункт 1. Я о таком даже не думал. Стоит попробовать и посмотреть на сколько это пригодно под нагрузками.
https://www.infoq.com/articles/wonders-of-postgres-logical-decoding-messages/
InfoQ
The Wonders of Postgres Logical Decoding Messages
In this article, author Gunnar Morling discusses Postgres database's logical decoding function to retrieve the messages from write-ahead log, process them, and relay them to external consumers, with help of use cases like outbox, audit logs and replication…
👍3
Поиск утечек потоков (Thread Leaks) с помощью JDK Flight Recorder и немного SQL
Я думаю, что многие уже успели по достоинству оценить возможности JFR и JDK Mission Control. Они очень помогают в анализе. В статье освещается еще один интересный инструмент JFR Analytics. Он позволяет использовать SQL подобный язык при анализе JFR. Учитывая декларативную природу SQL звучит заманчиво.
https://www.morling.dev/blog/finding-java-thread-leaks-with-jdk-flight-recorder-and-bit-of-sql/
Я думаю, что многие уже успели по достоинству оценить возможности JFR и JDK Mission Control. Они очень помогают в анализе. В статье освещается еще один интересный инструмент JFR Analytics. Он позволяет использовать SQL подобный язык при анализе JFR. Учитывая декларативную природу SQL звучит заманчиво.
https://www.morling.dev/blog/finding-java-thread-leaks-with-jdk-flight-recorder-and-bit-of-sql/
www.morling.dev
Finding Java Thread Leaks With JDK Flight Recorder and a Bit Of SQL
The other day at work, we had a situation where we suspected a thread leak in one particular service,
i.e. code which continuously starts new threads, without taking care of ever stopping them again.
Each thread requires a bit of memory for its stack space…
i.e. code which continuously starts new threads, without taking care of ever stopping them again.
Each thread requires a bit of memory for its stack space…
Новые последовательные типы коллекций в JDK 21 (Sequenced Collection Types)
JEP 431: Sequenced Collections был повышен со статуса Candidate до Proposed to Target для JDK 21. В этом JEP предлагается ввести «новое семейство интерфейсов, которые представляют концепцию коллекции с элементами расположенными в четко определенной последовательности».
https://www.infoq.com/news/2023/03/collections-framework-makeover/
JEP 431: Sequenced Collections был повышен со статуса Candidate до Proposed to Target для JDK 21. В этом JEP предлагается ввести «новое семейство интерфейсов, которые представляют концепцию коллекции с элементами расположенными в четко определенной последовательности».
https://www.infoq.com/news/2023/03/collections-framework-makeover/
InfoQ
Java's Collections Framework Gets a Makeover with New Sequenced Collection Types
JEP 431: Sequenced Collections has been promoted from Candidate to Proposed to Target status for JDK 21. It proposes introducing "a new family of interfaces that represent the concept of a collection whose elements are arranged in a well-defined sequence…
Spring Modulith: достигли ли мы зрелости модульности
В статье довольно интересный взгляд на проблему модульности. Перевод не везде сделан идеально, но в крайнем случаи можно полистать и первоисточник.
То что микросервисы не панацея от всех бед стало очевидно для многих достаточно быстро, но "умелые маркетологи" упорно продолжали их "продавать" на разных площадках. Вокруг идеи микросервисов возникла целая индустрия с курсами, книгами...
Я считаю, что под каждую задачу нужно выбирать подходящий инструмент\технологию\архитектуру. Есть определенные субъективные критерии. Думаю, что их описание заслуживает отдельной статьи и возможно выступление на JPoint\Jocker ))
А есть ли альтернативы?
Довольно интересная альтернатива - модульный монолит (modular monolithic (modulithic) Java applications). Она тоже не является панацеей от всех бед, но в определенных кейсах может оказаться довольно привлекательной альтернативой.
https://github.com/moduliths/moduliths
https://habr.com/ru/articles/701984/
В статье довольно интересный взгляд на проблему модульности. Перевод не везде сделан идеально, но в крайнем случаи можно полистать и первоисточник.
То что микросервисы не панацея от всех бед стало очевидно для многих достаточно быстро, но "умелые маркетологи" упорно продолжали их "продавать" на разных площадках. Вокруг идеи микросервисов возникла целая индустрия с курсами, книгами...
Я считаю, что под каждую задачу нужно выбирать подходящий инструмент\технологию\архитектуру. Есть определенные субъективные критерии. Думаю, что их описание заслуживает отдельной статьи и возможно выступление на JPoint\Jocker ))
А есть ли альтернативы?
Довольно интересная альтернатива - модульный монолит (modular monolithic (modulithic) Java applications). Она тоже не является панацеей от всех бед, но в определенных кейсах может оказаться довольно привлекательной альтернативой.
https://github.com/moduliths/moduliths
https://habr.com/ru/articles/701984/
GitHub
GitHub - moduliths/moduliths: Building modular, monolithic applications using Spring Boot
Building modular, monolithic applications using Spring Boot - moduliths/moduliths
Спорно конечно, но заставляет задуматься…
С одной стороны хочется более прогнозируемого результата, но с другой стороны нужно учитывать и риски. Часто задачек в моменте больше чем хотелось бы.
https://youtu.be/uLp-Ht_cRk8
С одной стороны хочется более прогнозируемого результата, но с другой стороны нужно учитывать и риски. Часто задачек в моменте больше чем хотелось бы.
https://youtu.be/uLp-Ht_cRk8
🔥1