SeaTunnel - это высокопроизводительный инструмент распределенной интеграции данных нового поколения, способный ежедневно синхронизировать огромные объемы данных.
SeaTunnel способен стабильно и эффективно синхронизировать данные в режиме реального времени и уже используется в продакшене почти 100 компаниями.
Написан полностью на Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤5🔥3
Forwarded from Java Guru 🤓
Что будет результатом кода?
Anonymous Quiz
23%
[10, 20, 30, 40]
7%
[20, 30, 40, 10]
56%
[20, 30, 40]
12%
[10, 20, 30]
2%
[30, 40, 20]
👍8🔥3
webmagic охватывает весь жизненный цикл краулера: загрузку, управление url, извлечение контента и его сохранение.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥8❤5
Полезный инструмент для работы с JSON 👇
JSON-файлы с высокой вложенностью часто сложно прочитать.
𝐉𝐬𝐨𝐧𝐂𝐫𝐚𝐜𝐤 создает графические диаграммы из JSON-файлов и делает их легко читаемыми.
Кроме того, созданные диаграммы можно скачать в виде изображений.
Также поддерживает YAML и XML форматы.
✅ Java библиотека #java
JSON-файлы с высокой вложенностью часто сложно прочитать.
𝐉𝐬𝐨𝐧𝐂𝐫𝐚𝐜𝐤 создает графические диаграммы из JSON-файлов и делает их легко читаемыми.
Кроме того, созданные диаграммы можно скачать в виде изображений.
Также поддерживает YAML и XML форматы.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤6🔥3🎄1
Логирование, трассировка и метрики
Логирование, трассировка и метрики — это три столпа наблюдаемости системы
🟡 Логирование
Логирование фиксирует дискретные события в системе. Например, мы можем записывать входящие запросы или обращения к базам данных как события. Это самый объемный тип данных. Для построения платформы анализа логов часто используют стек ELK (Elastic-Logstash-Kibana). Мы часто определяем стандартизированный формат логов для разных команд, чтобы использовать ключевые слова при поиске среди большого объема логов.
🟡 Трассировка
Трассировка обычно привязана к запросам. Например, пользовательский запрос проходит через API-шлюз, балансировщик нагрузки, сервис A, сервис B и базу данных — это можно визуализировать в системах трассировки. Это полезно для выявления узких мест в системе. OpenTelemetry используется для демонстрации типичной архитектуры, которая объединяет три столпа в одной платформе.
🟡 Метрики
Метрики — это обычно агрегируемая информация из системы. Например, QPS сервиса, отзывчивость API, задержка сервиса и т.д. Сырые данные записываются в базы данных временных рядов, такие как InfluxDB. Prometheus извлекает данные и преобразует их на основе предопределенных правил оповещений. Затем данные отправляются в Grafana для отображения или в менеджер оповещений, который затем рассылает уведомления по email, SMS или в Slack.
❓ Какие инструменты вы используете для мониторинга системы?
✅ Java библиотека #java
Логирование, трассировка и метрики — это три столпа наблюдаемости системы
Логирование фиксирует дискретные события в системе. Например, мы можем записывать входящие запросы или обращения к базам данных как события. Это самый объемный тип данных. Для построения платформы анализа логов часто используют стек ELK (Elastic-Logstash-Kibana). Мы часто определяем стандартизированный формат логов для разных команд, чтобы использовать ключевые слова при поиске среди большого объема логов.
Трассировка обычно привязана к запросам. Например, пользовательский запрос проходит через API-шлюз, балансировщик нагрузки, сервис A, сервис B и базу данных — это можно визуализировать в системах трассировки. Это полезно для выявления узких мест в системе. OpenTelemetry используется для демонстрации типичной архитектуры, которая объединяет три столпа в одной платформе.
Метрики — это обычно агрегируемая информация из системы. Например, QPS сервиса, отзывчивость API, задержка сервиса и т.д. Сырые данные записываются в базы данных временных рядов, такие как InfluxDB. Prometheus извлекает данные и преобразует их на основе предопределенных правил оповещений. Затем данные отправляются в Grafana для отображения или в менеджер оповещений, который затем рассылает уведомления по email, SMS или в Slack.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤4🔥2
Ядро Vert.x содержит достаточно низкоуровневую функциональность, включая поддержку HTTP, TCP, доступ к файловой системе и различные другие возможности. Можно использовать Vert.x непосредственно в своих приложениях.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤7🔥7
Паттерн Компоновщик (Composite)
Composite — это структурный паттерн, который позволяет организовать объекты в древовидные структуры для представления иерархий "часть-целое". Он позволяет клиентам единообразно работать как с отдельными объектами, так и с их группами.
Использование:
🟡 Когда нужно представить иерархическую структуру объектов, например, дерево файловой системы или меню на сайте.
🟡 Когда клиентский код должен одинаково работать как с отдельными объектами, так и с их контейнерами.
🟡 Когда необходимо удобно добавлять новые виды компонентов в систему, поддерживая единый интерфейс.
Преимущества:
1️⃣ Позволяет обрабатывать составные и простые элементы одинаково.
2️⃣ Новый тип компонента можно добавить, просто реализовав общий интерфейс.
3️⃣ Можно динамически изменять дерево объектов (добавлять, удалять узлы).
Недостатки:
1️⃣ Усложнение кода: Может сделать систему сложнее из-за необходимости реализации общего интерфейса.
2️⃣ Затраты на проверку типов: Клиентский код иногда должен дополнительно проверять тип узлов, если это необходимо.
📌 Composite отлично подходит для работы с иерархиями, будь то дерево файлов, граф интерфейса или структурированные данные.
✅ Java библиотека #java
Composite — это структурный паттерн, который позволяет организовать объекты в древовидные структуры для представления иерархий "часть-целое". Он позволяет клиентам единообразно работать как с отдельными объектами, так и с их группами.
Использование:
Преимущества:
Недостатки:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍6
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍6🔥5😁1
Новый HTTP Client от Amplicode на Kotlin Script для Spring приложений и не только
🌐 🗣 СМОТРЕТЬ VKVIDEO
📺 🗣 СМОТРЕТЬ RUTUBE
📝 🗣 СМОТРЕТЬ DZEN
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤2🔥2
Аннотация @EventListener позволяет подписываться на события в приложении. Это мощный инструмент для создания слабосвязанных компонентов: один класс публикует событие, а другой реагирует на него, ничего о нем не зная.
Как это работает?
Spring предоставляет встроенный механизм событий. События — это просто Java-объекты, наследующие ApplicationEvent (начиная с Spring 4.2. наследование стало необязательным).
Публикуете событие через ApplicationEventPublisher:
@Component
public class EventPublisher {
private final ApplicationEventPublisher publisher;
public EventPublisher(ApplicationEventPublisher publisher) {
this.publisher = publisher;
}
public void publishEvent(String message) {
System.out.println("Publishing event: " + message);
publisher.publishEvent(new MyEvent(this, message));
}
}
public class MyEvent {
private final String message;
public MyEvent(Object source, String message) {
super();
this.message = message;
}
public String getMessage() {
return message;
}
}
С помощью @EventListener можно подписаться на любое событие:
@Component
public class EventListenerExample {
@EventListener
public void handleEvent(MyEvent event) {
System.out.println("Event received: " + event.getMessage());
}
}
— Слабая связность: Публикатор не знает ничего о слушателях, и наоборот.
— Асинхронность: Можно легко сделать обработку событий асинхронной с помощью @Async.
🧐 Где это использовать?
— Аудит и логирование
Отправляйте события о ключевых действиях пользователя в отдельный аудит-лог.
— Обработка бизнес-логики
Делегируйте сложную обработку событий (например, отправку писем) в отдельные компоненты.
— Модульная архитектура
Сделайте ваши модули независимыми, обмениваясь событиями вместо вызовов методов.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍23❤7🔥6
Forwarded from Java Guru 🤓
Что будет результатом кода?
Anonymous Quiz
7%
Ошибка компиляции
1%
null
45%
Hello
4%
World
43%
Hello World
😁21👍10🔥4💯4
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤5🔥4
Что такое MVP?
MVP (Minimum Viable Product) — этоминимально жизнеспособный продукт, представляющий собой начальную версию продукта, которая включает только ключевые функции, необходимые для проверки гипотезы или удовлетворения базовых потребностей пользователей.
Ключевые аспекты MVP:
— MVP содержит толькоте функции, которые являются критически важными для решения основной проблемы пользователя. Остальные функции откладываются на более поздние этапы.
— MVP создаётся для тестированиярыночного спроса или реакции пользователей на продукт с минимальными затратами времени и ресурсов.
— После выпуска MVP собираютсяотзывы от пользователей, чтобы понять, в правильном ли направлении развивается продукт, и внести изменения.
Важно: MVP — это не просто "сырой" продукт, он должен решать основную задачу, при этом быть полезным и функциональным.
✅ Java библиотека #java
MVP (Minimum Viable Product) — это
Ключевые аспекты MVP:
— MVP содержит только
— MVP создаётся для тестирования
— После выпуска MVP собираются
Важно: MVP — это не просто "сырой" продукт, он должен решать основную задачу, при этом быть полезным и функциональным.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27❤12🔥6
This media is not supported in your browser
VIEW IN TELEGRAM
Изучаешь Java - создай проект. Перезагрузка.
Выпуск 1. Запускаем проект. Список программ.
Вступительное слово и список ПО, которое будет использоваться.
🌐 🗣 СМОТРЕТЬ VKVIDEO
✅ Java библиотека #java
Выпуск 1. Запускаем проект. Список программ.
Вступительное слово и список ПО, которое будет использоваться.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤3🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤8🔥4
Как работает ConcurrentSkipListSet под капотом?
ConcurrentSkipListSet — это потокобезопасная и отсортированная реализация интерфейса NavigableSet. Она построена на основе ConcurrentSkipListMap, что позволяет ей быть не только упорядоченной, но и эффективной для параллельного доступа. В основе её работы лежит структура данных skip list (список с пропусками).
Skip list — это многослойная структура данных, состоящая из нескольких уровней связных списков. На нижнем уровне содержатся все элементы в отсортированном порядке, а верхние уровни хранят лишь часть элементов для ускорения операций поиска. Благодаря этому достигается логарифмическая сложность операций add, remove и contains — O(log n).
Пример структуры:
💡 Основные механизмы:
🟢 Skip List: Многослойная структура, где верхние уровни позволяют быстро "перепрыгивать" через диапазоны элементов. Это минимизирует количество переходов по связным спискам.
🟢 Под капотом ConcurrentSkipListSet использует ConcurrentSkipListMap, где ключи — это элементы множества, а значения — фиктивные объекты.
🟢 Потокобезопасность достигается благодаря минимальному блокированию и использованию атомарных операций (CAS — Compare-And-Swap).
🟢 Элементы всегда упорядочены в соответствии с их натуральным порядком или компаратором, переданным в конструктор.
⚠️ Особенности:
🟡 Эффективен для операций чтения (contains, iterators), так как они выполняются без блокировок.
🟡 Операции модификации (add, remove) потокобезопасны, но слегка дороже из-за использования CAS.
🟡 Поддерживает сортировку элементов в натуральном порядке или порядке, определённом компаратором.
🟡 Высокая производительность для сценариев с преобладанием чтений и умеренным количеством обновлений.
🚀 Когда использовать ConcurrentSkipListSet?
- Если нужен потокобезопасный доступ к отсортированному множеству.
- При необходимости частого чтения упорядоченных данных (например, для диапазонов).
- Для сценариев с конкурентным доступом, где важна производительность операций чтения.
🔗 Документация
✅ Java библиотека #java
ConcurrentSkipListSet — это потокобезопасная и отсортированная реализация интерфейса NavigableSet. Она построена на основе ConcurrentSkipListMap, что позволяет ей быть не только упорядоченной, но и эффективной для параллельного доступа. В основе её работы лежит структура данных skip list (список с пропусками).
Skip list — это многослойная структура данных, состоящая из нескольких уровней связных списков. На нижнем уровне содержатся все элементы в отсортированном порядке, а верхние уровни хранят лишь часть элементов для ускорения операций поиска. Благодаря этому достигается логарифмическая сложность операций add, remove и contains — O(log n).
Пример структуры:
lvl 3: A ------- H
lvl 2: A --- D -- H
lvl 1: A - B - D - F - H - J
🚀 Когда использовать ConcurrentSkipListSet?
- Если нужен потокобезопасный доступ к отсортированному множеству.
- При необходимости частого чтения упорядоченных данных (например, для диапазонов).
- Для сценариев с конкурентным доступом, где важна производительность операций чтения.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍4❤2
Ускорение Spring REST API на 200%
Spring Framework уже многие годы является базой, на которой разрабатывается подавляющее большинство серверных приложений на Java. Он предоставляет абстракции над множеством различных технологий, в том числе и абстракции для разработки REST API. Все эти абстракции имеют свою цену в плане производительности, и иногда эта цена является очень большой, если речь идёт о высоконагруженном приложении. В этой небольшой статье я покажу, как можно избавиться от ненужных накладных расходов и значительно увеличить производительность вашего API.
Читать статью
Spring Framework уже многие годы является базой, на которой разрабатывается подавляющее большинство серверных приложений на Java. Он предоставляет абстракции над множеством различных технологий, в том числе и абстракции для разработки REST API. Все эти абстракции имеют свою цену в плане производительности, и иногда эта цена является очень большой, если речь идёт о высоконагруженном приложении. В этой небольшой статье я покажу, как можно избавиться от ненужных накладных расходов и значительно увеличить производительность вашего API.
Читать статью
VK
Ускорение Spring REST API на 200%
Spring Framework уже многие годы является базой, на которой разрабатывается подавляющее большинство серверных приложений на Java. Он пред..
👍22🔥4❤2