• Собственные метрики JFR и их анализ

    • Tutorial

    Недавно я описывал как осуществлять запуск и управление Java Flight Recorder (JFR). Теперь решил затронуть тему записи в JFR метрик, специфичных для приложения, а так же способов их анализа в Java Mission Control (JMC). Это позволяет расширить понимание происходящего с приложением и значительно упростить анализ производительности и поиск узких мест.

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

    Читать далее
  • Управление Java Flight Recorder

    • Tutorial


    Не так давно в мире Java случилось грандиозное событие. Во всех актуальных версиях OpenJDK стал доступен Java Flight Recorder (или просто JFR).


    Что такое Java Flight Recorder?

    JFR – это механизм легковесного профилирования Java-приложения. Он позволяет записывать и в последствии анализировать огромное количество метрик и событий, происходящих внутри JVM, что значительно облегчает анализ проблем. Более того, при определённых настройках его накладные расходы настолько малы, что многие (включая Oracle) рекомендуют держать его постоянно включённым везде, в том числе прод, чтобы в случае возникновения проблем сразу иметь полную картину происходившего с приложением. Просто мечта любого SRE!


    Раньше этот механизм был доступен только в коммерческих версиях Java от корпорации Oracle версии 8 и более ранних. В какой-то момент его реимплементировали с нуля в OpenJDK 12, затем бекпортировали в OpenJDK 11, которая является LTS-версией. Однако вот OpenJDK 8 оставалась за бортом этого праздника жизни. Вплоть до выхода апдейта 8u272, в который наконец-то тоже бекпортировали JFR. Теперь все (за редким исключением) пользователи OpenJDK могут начинать использовать эту функциональность.


    Но вот незадача: большая часть документации в интернете относится к старой, коммерческой, версии JFR и во многом не соответствует версии, которая присутствует в OpenJDK. Да и та, что есть, весьма скудная и не способствует пониманию того, как это всё использовать.


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

    Читать дальше →
    • +18
    • 5,6k
    • 1
  • Интеграция в стиле BPM


      Привет, Хабр!


      Наша компания специализируется на разработке программных решений класса ERP, в составе которых львиную долю занимают транзакционные системы с огромным объемом бизнес-логики и документооборотом а-ля СЭД. Современные версии наших продуктов базируются на технологиях JavaEE, но мы также активно экспериментируем с микросервисами. Одно из самых проблемных мест таких решений – интеграция различных подсистем, относящихся к смежным доменам. Задачи интеграции всегда доставляли нам огромную головную боль, независимо от применяемых нами архитектурных стилей, технологических стэков и фреймворков, однако в последнее время в решении таких задач наметился прогресс.


      В предлагаемой вашему вниманию статье я расскажу об имеющихся у НПО «Криста» опыте и архитектурных изысканиях в обозначенной области. Также мы рассмотрим пример простого решения интеграционной задачи с точки зрения прикладного разработчика и выясним, что скрывается за этой простотой.

      Читать дальше →
    • Конструктор интерактивных туров


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


        Процесс обучения


        Современные компании-разработчики стараются взять под контроль и теоретическое, и практическое обучение пользователя. Это подразумевает присутствие учителя (специалиста предметной области) в процессе обучения. Ему необходимо в режиме реального времени контролировать обучение, чтобы пользователь получил теоретические знания о работе с функционалом программы, а также закрепил их на практике.


        Одной из компаний, которая занимается не только разработкой программного обеспечения, но и помогает пользователям своих решений освоить управление ими, является НПО «Криста». Для этого на базе компании создан специальный учебный центр.

        Читать дальше →
      • Eще один бэкап — больше, чем скрипт, проще, чем система

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



          Добрый день, Habr!
          Меня зовут Наталья. Я тимлид группы администраторов приложений в НПО «Криста». Мы Ops для группы проектов нашей компании. У нас довольно своеобразная ситуация: мы устанавливаем и сопровождаем наше ПО как на серверах нашей компании, так и на серверах, расположенных у клиентов. При этом бэкапить сервер целиком нет необходимости. Важны лишь «существенные данные»: СУБД и отдельные каталоги файловой системы. Конечно, клиенты имеют (или не имеют) свои регламенты резервного копирования и часто предоставляют некое внешнее хранилище для складывания туда резервных копий. В этом случае после создания бэкапа мы обеспечиваем отправку во внешнее хранилище.

          Какое-то время для целей бэкапа мы обходились bash-скриптом, но по мере разрастания вариантов настроек пропорционально росла и запутанность этого скрипта, и в один прекрасный момент мы пришли к необходимости его «разрушить до основанья, а затем....».
          а как же готовые решения?
        • IntelliJ IDEA: Structural Search & Replace


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


          Простой пример одной такой функции

          А вы знаете, что, если в IDEA нажать F2, курсор перескочит к ближайшей ошибке в файле? А если нет ошибки, то к замечанию? Как-то так получается, что об этом знают далеко не все.


          Одной такой функцией является Structural Search & Replace (SSR). Она может быть невероятно полезна в тех ситуациях, когда пасует всё богатое разнообразие других функций.


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


          1. 3D-движка для создания игр jMonkeyEngine, как пример большого проекта, в котором всегда можно найти что-то интересненькое.
          2. моего собственного проекта plantuml-native-image, в котором я провожу эксперименты по компиляции PlantUML в нативный исполняемый код с помощью GraalVM native-image.

          Собственно, случай во втором проекте и побудил меня к написанию статьи. Но обо всём по порядку...

          Читать дальше →
        • Опыт построения системных отношений «вуз-предприятие»



            Ну вот и наступило время новой, совершенно неожиданной реальности… Совсем недавно слова «самоизоляция», «эпидемия», «коронавирус» относились исключительно к медицинской терминологии, и вот весь мир ушел в затвор, и мы, естественно, не остались в стороне от этих процессов. А еще отличительная черта современности: все человечество одномоментно перешло на дистанционное обучение. Школы, колледжи, вузы – все образовательные учреждения слетели с привычной орбиты и несутся в неизвестном направлении. Мы, ИТ-работодатели, привыкшие к выстроенным, отлаженным годами процессам взаимодействия с вузами, привыкшие к очень тесной, контактной ежедневной работе со студентами (нашим кадровым ресурсом), тоже сошли с рельсов, называемых годовым процессом очного обучения.


            Время приостанавливается, процессы замедляются, наступает период переосмысления и обобщения накопленного в этой многолетней суете, называемой «лучшей практикой», опыта – полезного и вредного, созидательного и деструктивного. И вот как раз обобщением нашего богатого опыта ежедневной работы с вузами хотелось бы заняться в период карантина.


            Каждая ИТ-компания, выходя на достаточно серьезный уровень развития, сознает неизбежность системного подхода к воспроизводству кадровых ресурсов. То есть это не тот классический подбор персонала, с которым все знакомы, а именно СИСТЕМНЫЙ ПОДХОД, то есть имеющий в своей основе набор управляющих принципов и определенный способ мышления.


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

            читать дальше
          • Корпоративные тренинги: лидеры учат лидеров



              Здравствуй, Хабр! Хочу рассказать о том, как у нас, в НПО «Криста», проходят корпоративные тренинги в рамках проекта #КристаКоманда, разработанного для подготовки кадрового резерва компании.

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

              Прежде мне доводилось участвовать в различных тренингах. Как правило, ведут их достаточно квалифицированные, опытные тренеры. Обычно тренинг идёт 2 – 3 дня по 8 часов. Теоретический материал чередуется с практическими заданиями. К концу тренинга его участникам предлагается сделать небольшой проект для закрепления знаний. Казалось бы, всё было правильно, но всякий раз после участия в тренинге такого формата я ловил себя на мысли, что мне чего-то не хватило. Тренинги нашего проекта #КристаКоманда стали для меня настоящим открытием и позволили сделать шаг в профессиональном развитии. Чем же они отличаются от других тренингов?
              читать дальше
            • #Назаметку. Осторожно, атомарные операции в ConcurrentHashMap

              • Tutorial


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

              Warning: в статье использованы цитаты исходного кода OpenJDK 8, распространяемого под лицензией GNU General Public License version 2.
              читать дальше
            • Ищем аномалии и предсказываем сбои с помощью нейросетей

                image


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


                Что же делать? Здесь нам на помощь спешит искусственный интеллект. Речь в статье пойдет о предиктивном обслуживании (predictive maintenance). Этот подход активно набирает популярность. Написано большое количество статей, в том числе и на Хабре. Крупные компании вовсю используют такой подход для поддержки работоспособности своих серверов. Изучив большое количество статьей, мы решили попробовать применить этот подход. Что из этого вышло?

                Читать дальше
              • Кто есть кто в ИТ?



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

                  В статье рассматриваются вопросы, актуальные для специалистов по работе с персоналом ИТ-компаний: причинно-следственные связи в эволюции производственных ролей, последствия неверного толкования содержания ролей для кадровой работы в целом, а также возможные варианты повышения эффективности подбора специалистов.
                  Читать дальше
                • SonarQube и IntelliJ IDEA: правильная интеграция

                  • Tutorial

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


                  На данный момент этот инструмент плотно вошёл в нашу жизнь, следя за единым стилем кода и уберегая от самых разных видов ошибок. Поиск ошибок происходит при сборке на CI или перед принятием pull request в версионное хранилище. Все найденные ошибки отображаются в Web-интерфейсе, где можно изучать их и управлять ими.


                  Однако беда в том, что удобный Web-интерфейс не означает удобство по устранению найденных замечаний в коде проекта. Для того, чтобы внести исправление, приходится сначала смотреть, в каком именно файле это замечание обнаружено, потом открывать этот файл и только затем вносить исправление. Также это приводит к тому, что разработчик узнает о проблеме с очень большим отставанием (иногда анализ в SonarQube может занимать десятки минут), что не способствует поддержанию чистоты кода.


                  Для того, чтобы облегчить жизнь разработчикам нашей компании, использующим IntelliJ IDEA, я составил инструкцию. А в дальнейшем понял, что она может быть полезной более широкому кругу специалистов, и решил выложить её в публичный доступ.

                  Осторожно, много скриншотов
                  • +16
                  • 14,8k
                  • 1

                Самое читаемое