Pull to refresh
1
0
Калеганов Александр Викторович @JavaWizard

Ведущий разработчик

Send message

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

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

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

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

Да, вы правы — с PgBouncer и LISTEN/NOTIFY всё не так просто. Я упомянул это скорее как опцию, но без погружения в особенности сессионного режима.

Спасибо за отличный технический комментарий!

Спасибо за комментарий — круто, что вчитались и обратили внимание на такие детали.

Согласен: аннотация на Ingress действительно касается только HTTP и работает только в момент установки WebSocket-соединения. Дальше — уже нет, вы правы. Я добавил её скорее исходя из экспериментов в процессе настройки — посчитал, что кому-то это всё-таки может оказаться полезным, особенно в контексте SSE. Для них эта аннотация реально помогает избежать обрывов по таймауту со стороны ingress-контроллера.

По поводу heartbeat — полностью согласен. Я и сам скорее за то, чтобы такие вещи решать на прикладном уровне. Поэтому в примере и используется Flux.interval — он стабилизирует соединение вполне надёжно, особенно если клиент "висит" в подписке долго.

Спасибо ещё раз за развернутый отклик. Такие комментарии под статьёй — это вообще лучшее, что может быть :) Обсуждение явно получилось не зря.

Спасибо, интересный вариант для роли шины данных! Garnet действительно выглядит интересно — особенно с учётом заявленной производительности и кластера "из коробки". Судя по их тестам, он обгоняет Redis. Посмотрим, как покажет себя в реальных условиях.

В принципе, для таких целей можно использовать и Postgres через LISTEN/NOTIFY — как простую, встроенную шину. Но... давайте честно: PostgreSQL и без того не всегда знает, куда деваться от нагрузки, а тут мы ещё и события хотим через него гонять :)

У нас Redis и так используется как кеш во многих сервисах, поэтому он оказался естественным выбором и для Pub/Sub — ничего нового подключать, конфигурировать или поддерживать не нужно. Проверено, стабильно, понятно всем в команде.

Но в целом круто, что появляются альтернативы вроде Garnet. Особенно если они в будущем дорастут до продакшен-уровня и будут поддерживать всё то, что уже стабильно работает в Redis. Буду с интересом следить за развитием.

Спасибо! Да, уже пару человек сказали, что обсуждение получилось даже "полезнее" статьи — в любом случае приятно, что люди нашли время прочитать и поучаствовать в беседе :)

Спасибо за отличный вопрос — по существу.

Если коротко: в нашей практике Redis сам по себе не падал. Прямых инцидентов с его отказами не было.

Использование Redis с Sentinel у нас — это архитектурно утверждённый стандарт (насколько мне известно). Одиночный Redis считается потенциальной точкой отказа, поэтому отказоустойчивость через Sentinel закладывается на этапе проектирования — не как реакция на сбои, а как часть принятой инженерной политики.

Примеры в статье — рабочие, конфигурация проверена, всё запускается. Специального нагрузочного тестирования Pub/Sub мы не проводили, но на текущей нагрузке система работает более чем стабильно.

Ваш подход с упором на минимально достаточную конфигурацию вполне понятен. Redis даже в одиночном экземпляре обладает хорошим запасом прочности и в большинстве случаев работает надёжно. Если push-уведомления не критичны и система может обойтись без автоматической отказоустойчивости — обычный Redis справляется с задачей. Всё зависит от контекста, объёма и требований конкретной системы.

Да, sticky-сессии могут помочь в простых случаях, но здесь они не решают основную проблему. Событие может произойти в любом поде сервиса и не связано с конкретной сессией пользователя. Если клиент подключён ко второй поде, а событие произошло в первой — он его просто не получит.

В таких сценариях нужен общий канал, через который все поды узнают о событии и смогут передать его клиентам. Для этого используется Redis Pub/Sub, а сама рассылка уведомлений вынесена в отдельный сервис — чтобы не дублировать эту логику в каждом микросервисе.

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

Интересный комментарий, такой подход действительно возможен.

Да, при использовании уникального group.id на каждую реплику Kafka действительно рассылает одно и то же сообщение в каждую consumer group — технически это реализуемо и будет работать.

Но для нашей задачи это оказалось избыточным по нескольким причинам:

1. Kafka будет дублировать доставку сообщения в каждую группу отдельно. При увеличении числа реплик такая схема начинает нагружать брокер.

2. В динамическом окружении, вроде Kubernetes, сложно гарантировать уникальность group.id для каждой поды. Это требует дополнительной обвязки или авто-генерации конфигурации.

3. Если пода была перезапущена (например, во время деплоя), Kafka сохраняет для неё накопившиеся сообщения, и после восстановления она начнёт их вычитывать. Это приведёт к тому, что в UI будут отправлены устаревшие события, которых по факту уже не должно быть, и фронт может сделать лишние запросы к бэкенду.

В нашем случае push-уведомления нужны "на сейчас", история и ретраи не требуются. Если пользователь не получил событие — он просто увидит актуальное состояние при следующем действии.

Поэтому Redis Pub/Sub оказался проще и лучше подходящим для такой задачи — все поды получают событие сразу, без лишней обработки и хранения.

Да, Redis не хранит события, но у нас обычно настроено бесшовное обновление с двумя или более работающими подами. Пока один обновляется, другие продолжают слушать Redis. Уведомления не теряются, всё работает в реальном времени

Ну и на всякий случай: если уведомление потеряется — всё равно можно нажать F5 ;)

Спасибо за хороший вопрос! Да, Kafka, NATS, RabbitMQ — это отличныеи и мощные брокеры. Но у нас немного другой кейс.

Нам нужно просто отправить уведомления в UI: пользователь должен сразу увидеть изменение (например, что вагон разгрузили). Эти события не критичны, мы специально не храним их историю. Если что-то «улетело» — не страшно, фронт всегда может получить актуальное состояние вручную.

Kafka и ей подобные — отличны для сложных сценариев, но вот с какими моментами придётся столкнуться в нашем случае:

  • offset'ы: если сервис уведомлений был недоступен какое-то время, Kafka при восстановлении высыпит всю очередь сообщений — что нам тут вообще не нужно. В итоге на UI приходят старые и ненужные события, и фронт начёт спамить по бэку запросами.

  • consumer-группы: нам важно, чтобы все поды получали события. А с Kafka надо городить схемы с разными groupId, чтобы не получилось, что один получил — а второй не узнал.

  • история: повторюсь — нам не понадобится она для этой задачи, события "одноразовые" и живут ровно до момента отображения.

А Redis даёт простой и быстрый Pub/Sub. Все поды получают события одновременно, нет лишнего слоя абстракции и инфраструктуры. Плюс бонусом — это ещё и распределённый кэш, который пригодится не только для real-time.

Поэтому в таких задачах Redis выглядит как самое простое и при этом эффективное решение.

'азино три топора - поднять бобла'...)))

Благодарю за ваш интерес! Мы активно используем ChatGPT для автоматизации процесса создания документации архитектуры приложений. Например, инструмент может подключиться к контексту приложения и автоматически генерировать подробные описания модулей и их взаимодействия, что значительно ускоряет и упрощает документирование. Ранее этот процесс занимал у нас несколько дней, а теперь может быть завершен в течение нескольких часов, освобождая нашу команду для сосредоточения на более стратегических задачах.

Кроме того, ChatGPT помогает нам анализировать обратную связь от пользователей. Например, он классифицирует отзывы и выделяет повторяющиеся темы, позволяя нам быстро идентифицировать области для улучшения. В проектах автоматизации поддержки клиентов ChatGPT используется в чат-ботах, которые обрабатывают более 70% стандартных запросов пользователей, что значительно повышает эффективность нашей работы и улучшает общий пользовательский опыт.

Согласен с вами. Сначала нужно найти кандидата, что может занять около двух недель или больше. Затем важно, чтобы кандидат устроил всех по зарплате и соответствовал требованиям собеседования. Часто кандидат, подходящий по всем критериям, называет зарплату на 50 - 100 тысяч больше, чем тот, кто ушел. Пока проект стоит, время идет. В итоге соглашаются на сотрудника с более высокими зарплатными ожиданиями, чем у ушедшего.

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

Когда я пришёл в НЛМК 4 года назад, у меня был определённый скепсис. Несмотря на рассказы о высокотехнологичной и приятной рабочей среде, я не был до конца уверен.

Начав работать, я убедился, что здесь действительно есть всё необходимое: современное оборудование, крутой стек технологий, включая Java, которая на момент моего прихода была версией 11, но теперь все пишут на Java 21, и сервисы активно мигрируют на новую версию. Здесь используются микросервисы, машинное зрение, OKD, Elasticsearch, отлично отлаженные CI/CD процессы и грамотная команда девопсов. Легкая интеграция достигается за счёт использования асинхронных технологий, таких как Apache Kafka. Более того, в разработке активно стали использовать ChatGPT для автоматизации процессов и улучшения взаимодействия с данными.

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

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

Не надо из хобби делать работу ;) иначе это будет работа

Сейчас я вам расскажу, как правильно нужно расти, в it. Пришел на проект. На проект поишел еще один разраб. Отработал пол года и сходил по собесам, принес офер на 100 тыс больше. Дальше разговор простой либо мне тут дают столько же либо я пошел. Мне дали я остался отработал еще пол года. Сходил по собесам принес офер еще на 100 больше мне опять увеличели зп. Я еще годик работал справно и честно и изо всех сил. ( плюс была ежегодная индексация). Потом работодатель заметил что я хорошо работаю и решили сделать мне ассесмент и еще одному разрабу. Так вот он все это время не ходил и не просил денег и получается что у меня зп повышалась 2 раза и еще сейчас третий. А у него почтиза три года первый раз и разница у нас в зп колоссальная. И т.к. сделали ассесмент я считаю можно еще годик честно поработать и дальше опять по собесам т.к. ассесмент не светит. Если контр офер не дадут то уйду к новому работодателю я ничего не теряю. Вот. Так надо рости просто так тебе зп никто не добавит и я сейчас на коне, а тот разраб который не просил ни разу денег - он под конём. Выводы делайте сами.

Ps: совет когда hr спрашивает чем мы вас можем заинтересовать кроме денег- я всегда отвечаю честно : " Где нет денег - там и интереса нет... "

История выдуманная, все совпадения случайны. ;) или может не случайны?

Лав код это интимное))) скаем таки не показтель

soft-delete не является deprecated и каждый инструмент подходит под решение разных задач. Мы не испытываем проблем при работе с ним.

1

Information

Rating
Does not participate
Location
Чаны, Новосибирская обл., Россия
Works in
Date of birth
Registered
Activity