![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/d8b/a5d/665/d8ba5d665486bf9e9f413f22b60905f3.png)
Вадим Мартынов, руководитель команды платформы надёжности в Яндекс Go, в своём докладе рассказал, как влияют те или иные решения на надёжность системы и как это учитывать при разработке.
User
Вадим Мартынов, руководитель команды платформы надёжности в Яндекс Go, в своём докладе рассказал, как влияют те или иные решения на надёжность системы и как это учитывать при разработке.
Kubernetes, ставший де-факто стандартом для оркестрации контейнеров, значительно упрощает развертывание, масштабирование и управление контейнеризированными приложениями. Однако, по мере роста и усложнения инфраструктуры, требования к сетевым возможностям также увеличиваются. В современных распределенных системах, где различные микросервисы взаимодействуют друг с другом, критически важно обеспечить безопасность, производительность и надежность сетевых коммуникаций. Здесь на помощь приходят продвинутые сетевые функции Kubernetes, такие как:
Многопоточность — это не просто возможность приложения выполнять несколько задач одновременно, это его способность делать это эффективно и безопасно. В Java многопоточность неотделима от синхронизации, ведь именно она помогает управлять состоянием разделяемых ресурсов между потоками.
Всё начинается с потребности в быстродействии и масштабируемости. C несколькими потоками можно обрабатывать больше операций одновременно.
В этой статье мы рассмотрим, как синхронизировать потоки в Java.
Вечер пятницы, у себя дома в ближайшем Подмосковье собираю lego low‑code. Подходит вторая половина — ей поступил платёж на сумму 42 т.р. от неизвестной Анюты Ивановны И. на карту Сбера. Догадываясь, что за этим последует звонок с просьбой вернуть деньги, пишем обращение в чат поддержки. Пока ждем ответ, действительно начинают звонить «потерпевшие» и объяснять, что произошла ошибка: мама переводила деньги сыну на оплату квартиры, эти деньги срочно нужны и надо их немедленно вернуть. Телефон «мамы» похож на отправителя, а второй номер не имеет ничего общего с номером получателя. Объясняем, что процесс пошел, заявление уже подано и скоро всё решится к обоюдному удовольствию.
И тут приходит ответ от Сбера, который резко меняет ситуацию:
В Kotlin есть специальный модификатор suspend, с помощью которого можно отметить обычную функцию и указать компилятору, что функция будет корутиной. Suspend не запускает корутину, а является указанием преобразовать функцию так, что она может быть приостановлена и возобновлена при выполнении.
suspend fun func() { }
после компиляции будет преобразована в функцию с дополнительным параметром Continuation.
Прошло так много времени с прошлой статьи, прошу прощения, что заставил вас ждать. Выпускной курс забирал слишком много времени и не было возможности написать столь серьезный материал.
Итак, начинаем. Сначала кратко расскажу о материале в этой статье. Для разогрева поговорим о скоупе и о том, для чего он вообще нужен, далее перейдем к контексту, там я попробую объяснить сложное на пальцах, и, наконец, затронем к Continuation.
Периодически общаюсь с разработчиками о микросервисах, монолитах и прочих мифических существах. Удивляет, какая эзотерика живёт в головах у людей, иногда слышишь такое, что ёжики в тумане нервно курят в сторонке.
Когда спрашиваю у людей на собесах, или когда в команде решаем, как клепать очередной проект, такое порой слышу, что становится страшновато. Мне кажется, лет через 5 все компании будут обитать в мультивселенной безумия из “микросервисов”, которую они себе радостно построили, уходя от этих ваших страшных “монолитов”.
Дай думаю поделюсь инфой, чтобы наше с вами будущее не было наполнено болью, страданием и борьбой с последствиями тех дурацких решений, которые можно напринимать прямо сейчас с той кашей в голове, которую я вижу у людей по этой теме.
Детей недостаточно учить только питону и ардуине. Нужно еще и цифровой схемотехнике, причем не на симуляторе, так как он для ребенка неубедителен, а на микросхемах малой степени интеграции, лучше которых для иллюстрации функции D-триггера никто с 1968 года ничего не придумал.
Но учить канонично по книжкам 1970-х не обязательно. Например, ну зачем ребенку руками собирать генератор тактового сигнала на микросхеме 555, если его теорию он все равно не поймет, а для понимания функции D-триггера понимание работы генератора нерелевантно? Генератор на 555 можно купить уже собранным на AliExpress.
Также можно заменить батарейку на 9 вольт на питание от USB на 5 вольт; поставить толерантные к 5 вольтам светодиоды, не требующие дополнительных резисторов и поставить кнопочки, не требующие подтягивающих резисторов. В результате все сведется к самой сути - логическим элементам и D-триггерам, откуда уже можно переходить на ПЛИС / FPGA. Вот сравните схему сдвигового регистра. Что вы по этому поводу думаете?
Было:
Эта статья посвящена использованию библиотеки для профилирования методов в приложениях Spring Boot. Она предоставляет механизм для мониторинга времени выполнения методов, используя аннотацию @ActuatorProfiling и Spring Boot Actuator для экспонирования данных профилирования через настраиваемые конечные точки (эндпоинты).
GitHub https://github.com/litefunction/spring-boot-starter-actuator-profiling
Введение
Профилирующее приложение предназначено для помощи разработчикам в мониторинге и анализе времени выполнения методов, аннотацией @ActuatorProfiling. Данные профилирования экспонируются через Spring Boot Actuator.
Особенности
• Профилирование времени выполнения методов.
• Настраиваемые параметры профилирования.
• Информация получения данных профилирования в actuator.
• Потокобезопасное управление данными профилирования.
В Spring Data 3.1 появилось новое API для итерирования по большому объему данных: Scrolling API. Давайте изучим его, посмотрим на практические применения с примерами кода и преимущества по сравнению со всем известным Pageable. А также разберём, чего Scrolling API пока не хватает, и можно ли его вообще брать в свои проекты. Если хотите выяснить, как с новым API в теории ускорить пагинацию больших данных, — заходите под кат.
Привет, Хабр! Представляю вам вторую часть из серии статей, посвященных оптимизации развертывания Kafka кластера (ссылка на первую часть). Это перевод руководства от Confluent. Сегодняшняя статья посвящена тому, как уменьшить задержку и повысить надежность и доступность. Заключительная третья часть будет посвящена мониторингу и бенчмаркингу.
В этой статье я опишу наш путь реализации глобальных индексов в шардированной базе данных. Расскажу обо всех проблемах, с которыми столкнулись, и решениях, которые приняли, чтобы их обойти. Мы поговорим про реализацию на основе базы данных Tarantool, но общий подход применим и к другим шардированным базам данных без встроенной поддержки таких индексов, да и встроенная реализация часто строится по похожим принципам. Эта статья поможет разобраться в деталях, компромиссах и ограничениях работы глобальных индексов.
Привет, Хабр!
Представьте себе, вы приходите домой после долгого рабочего дня, и вас встречает пушистый котик. Вы знаете, что он ждет вас, чтобы вы рассказали ему о своих подвигах на работе. И вот, вы начинаете свой рассказ, а он, этот милый мурлыка, вдруг спрашивает: "А как там у тебя с оптимизацией запросов в PostgreSQL?"
Вы, конечно, удивлены: "Откуда у кота такие знания?" Но котик смотрит на вас с понимающим видом и говорит: "Ведь хороший запрос должен быть как прыжок кошки - быстрым, точным и грациозным..."
Статья будет полезна для тех, кто поддерживает приложения на Java, так как большая ее часть посвящена анализу работы G1 GC, знакомству с соответствующими инструментами и особенностями тюнинга GC, в частности для очень больших heap`ов. А также тем, кто пытается разобраться, на что способен Hazelcast, и для чего его можно применить.
Так исторически сложилось, что на проекте уже использовался Hazelcast, и мы решили попробовать переиспользовать его под новую задачу. Она заключалась в хранении объектов в БД с одним специфичным требованием – данные нельзя записывать на диск, что сильно сужало доступные варианты. Безусловно, мы понимали, что надежность такого хранилища будет низкой, но выбора не было. И, хотя, у нас были мысли развернуть для этого Redis или VoltDB, мы решили опробовать Hazelcast, так как в его возможности, помимо прочего, так же входит in-memory хранилище.
Что из этого получилось – читайте под катом.
Иногда перед разработчиком, аналитиком или даже бизнес-пользователем встает задача выполнить какие-то финансовые расчеты, соблюдая два строгих требования. Во-первых, даже для миллиардных сумм необходимо обеспечить точность до копейки, во-вторых, перекрестные итоги тоже должны сходиться до копейки.
Привет, меня зовут Мялкин Максим, я занимаюсь мобильной разработкой в KTS.
Не за горами выпуск новой версии Kotlin 2.0, основной частью которого является изменение компилятора на K2.
По замерам JB, K2 ускоряет компиляцию на 94%. Также он позволит ускорить разработку новых языковых фич и унифицировать все платформы, предоставляя улучшенную архитектуру для мультиплатформенных проектов.
Но мало кто изучал, как работает K2, и чем он отличается от K1.
Эта статья освещает нюансы работы компилятора, которые будут полезны разработчикам для понимания, что же JB улучшают под капотом, и как это работает.
Сегодня в статье разберем, как Kafka обрабатывает оффсеты сообщений и какие существуют стратегии их сохранения и обновления.
Оффсет в Kafka — это числовой идентификатор, который указывает позицию каждого сообщения внутри партиции топика. Оффсеты представляют собой порядковые номера, начинаемые с нуля, и уникальны в рамках каждой партиции, но не между разными партициями. Т.е сообщение с оффсетом 5 в партиции 1 и сообщение с оффсетом 5 в партиции 2 — это разные сообщения.
Всем привет, на связи Пётр, инженер компании Nixys. В прошлой статье мы разобрали основные концепции Redis. Теперь рассмотрим базовую репликацию Redis и настроим эту БД на высокий уровень отказоустойчивости.
При работе с современными веб-приложениями реального времени незаменима возможность отправлять события с сервера на клиент. Именно этой необходимостью продиктовано то, что за годы работы было изобретено несколько методов для этой цели, каждый с собственным набором достоинств и недостатков. Первоначально единственным вариантом был длинный опрос. Затем в качестве альтернативы появились веб-сокеты — более надёжное решение для двунаправленной коммуникации. Вслед за веб-сокетами появились события, отправляемые сервером (SSE), более простой метод, обеспечивающий однонаправленную связь от сервера к клиенту. Забегая вперёд, сейчас разрабатывается ещё и протокол WebTransport, который может тем более изменить ландшафт этой области, обеспечивая более эффективный и гибкий подход, располагающий к масштабированию. В некоторых нишевых случаях можно присмотреться и к технологии WebRTC, предназначенной для работы с событиями в направлении сервер-клиент.
В этой статье мы подробно разберём данные технологии, сравним их производительность, подчеркнём их достоинства и недостатки, а также порекомендуем, что делать в различных практических случаях, расскажем, как принимать информированные решения при создании веб-приложений реального времени. Эта статья — экстракт моего совокупного опыта, приобретённого в ходе реализации протокола репликации RxDB, обеспечивающего совместимость с различными технологиями серверной части.