Pull to refresh
3
0.3
Send message

Математика надёжности. Доклад Яндекса

Level of difficultyEasy
Reading time18 min
Views9K

Вадим Мартынов, руководитель команды платформы надёжности в Яндекс Go, в своём докладе рассказал, как влияют те или иные решения на надёжность системы и как это учитывать при разработке.

Читать далее
Total votes 71: ↑67 and ↓4+79
Comments27

Продвинутые сетевые функции Kubernetes

Level of difficultyMedium
Reading time13 min
Views5.8K

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

Читать далее
Total votes 21: ↑17 and ↓4+18
Comments3

Как синхронизировать потоки в Java

Level of difficultyEasy
Reading time6 min
Views2.7K

Многопоточность — это не просто возможность приложения выполнять несколько задач одновременно, это его способность делать это эффективно и безопасно. В Java многопоточность неотделима от синхронизации, ведь именно она помогает управлять состоянием разделяемых ресурсов между потоками.

Всё начинается с потребности в быстродействии и масштабируемости. C несколькими потоками можно обрабатывать больше операций одновременно.

В этой статье мы рассмотрим, как синхронизировать потоки в Java.

Читать далее
Total votes 15: ↑12 and ↓3+13
Comments9

Деньги — чужие, проблемы – Ваши

Level of difficultyEasy
Reading time3 min
Views41K

Вечер пятницы, у себя дома в ближайшем Подмосковье собираю lego low‑code. Подходит вторая половина — ей поступил платёж на сумму 42 т.р. от неизвестной Анюты Ивановны И. на карту Сбера. Догадываясь, что за этим последует звонок с просьбой вернуть деньги, пишем обращение в чат поддержки. Пока ждем ответ, действительно начинают звонить «потерпевшие» и объяснять, что произошла ошибка: мама переводила деньги сыну на оплату квартиры, эти деньги срочно нужны и надо их немедленно вернуть. Телефон «мамы» похож на отправителя, а второй номер не имеет ничего общего с номером получателя. Объясняем, что процесс пошел, заявление уже подано и скоро всё решится к обоюдному удовольствию.

И тут приходит ответ от Сбера, который резко меняет ситуацию:

Читать далее
Total votes 182: ↑176 and ↓6+208
Comments297

Разбираемся с coroutine в Kotlin — 4

Level of difficultyMedium
Reading time6 min
Views3K

В Kotlin есть специальный модификатор suspend, с помощью которого можно отметить обычную функцию и указать компилятору, что функция будет корутиной. Suspend не запускает корутину, а является указанием преобразовать функцию так, что она может быть приостановлена и возобновлена при выполнении.

suspend fun func() { }

после компиляции будет преобразована в функцию с дополнительным параметром Continuation.

Читать далее
Total votes 2: ↑2 and ↓0+4
Comments0

Kotlin Coroutines. Часть 2

Reading time10 min
Views3.3K

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

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

Читать далее
Total votes 6: ↑6 and ↓0+6
Comments2

Микросервисы в представлении среднего разработчика, и как всё на самом деле

Level of difficultyMedium
Reading time11 min
Views58K

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

Когда спрашиваю у людей на собесах, или когда в команде решаем, как клепать очередной проект, такое порой слышу, что становится страшновато. Мне кажется, лет через 5 все компании будут обитать в мультивселенной безумия из “микросервисов”, которую они себе радостно построили, уходя от этих ваших страшных “монолитов”.

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

погрузиться в микросервисы
Total votes 236: ↑232 and ↓4+260
Comments207

Детей недостаточно учить только питону и ардуине

Level of difficultyEasy
Reading time2 min
Views22K

Детей недостаточно учить только питону и ардуине. Нужно еще и цифровой схемотехнике, причем не на симуляторе, так как он для ребенка неубедителен, а на микросхемах малой степени интеграции, лучше которых для иллюстрации функции D-триггера никто с 1968 года ничего не придумал.

Но учить канонично по книжкам 1970-х не обязательно. Например, ну зачем ребенку руками собирать генератор тактового сигнала на микросхеме 555, если его теорию он все равно не поймет, а для понимания функции D-триггера понимание работы генератора нерелевантно? Генератор на 555 можно купить уже собранным на AliExpress.

Также можно заменить батарейку на 9 вольт на питание от USB на 5 вольт; поставить толерантные к 5 вольтам светодиоды, не требующие дополнительных резисторов и поставить кнопочки, не требующие подтягивающих резисторов. В результате все сведется к самой сути - логическим элементам и D-триггерам, откуда уже можно переходить на ПЛИС / FPGA. Вот сравните схему сдвигового регистра. Что вы по этому поводу думаете?

Было:

Читать далее
Total votes 43: ↑34 and ↓9+40
Comments364

Мониторинг и профилирование Spring Boot за две строчки

Level of difficultyEasy
Reading time2 min
Views1.7K

Эта статья посвящена использованию библиотеки для профилирования методов в приложениях Spring Boot. Она предоставляет механизм для мониторинга времени выполнения методов, используя аннотацию @ActuatorProfiling и Spring Boot Actuator для экспонирования данных профилирования через настраиваемые конечные точки (эндпоинты).

GitHub https://github.com/litefunction/spring-boot-starter-actuator-profiling

Введение

Профилирующее приложение предназначено для помощи разработчикам в мониторинге и анализе времени выполнения методов, аннотацией @ActuatorProfiling. Данные профилирования экспонируются через Spring Boot Actuator.

Особенности

• Профилирование времени выполнения методов.

• Настраиваемые параметры профилирования.

• Информация получения данных профилирования в actuator.

• Потокобезопасное управление данными профилирования.

Читать далее
Total votes 7: ↑3 and ↓4+1
Comments0

Блеск и нищета нового Scrolling API в Spring Data

Level of difficultyEasy
Reading time9 min
Views7.9K

В Spring Data 3.1 появилось новое API для итерирования по большому объему данных: Scrolling API. Давайте изучим его, посмотрим на практические применения с примерами кода и преимущества по сравнению со всем известным Pageable. А также разберём, чего Scrolling API пока не хватает, и можно ли его вообще брать в свои проекты. Если хотите выяснить, как с новым API в теории ускорить пагинацию больших данных, — заходите под кат.

Читать далее
Total votes 22: ↑22 and ↓0+28
Comments5

Оптимизация настроек Kafka кластера. Часть 2. Механизмы управления задержкой, надежностью и доступностью

Level of difficultyMedium
Reading time16 min
Views3.1K

Привет, Хабр! Представляю вам вторую часть из серии статей, посвященных оптимизации развертывания Kafka кластера (ссылка на первую часть). Это перевод руководства от Confluent. Сегодняшняя статья посвящена тому, как уменьшить задержку и повысить надежность и доступность. Заключительная третья часть будет посвящена мониторингу и бенчмаркингу.

Читать далее
Total votes 2: ↑2 and ↓0+2
Comments0

Реализация глобальных индексов в распределённой системе

Level of difficultyMedium
Reading time17 min
Views4.8K

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

Читать далее
Total votes 23: ↑23 and ↓0+27
Comments3

Три основных способа оптимизировать ваши запросы в PostgreSQL

Reading time5 min
Views14K

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

Представьте себе, вы приходите домой после долгого рабочего дня, и вас встречает пушистый котик. Вы знаете, что он ждет вас, чтобы вы рассказали ему о своих подвигах на работе. И вот, вы начинаете свой рассказ, а он, этот милый мурлыка, вдруг спрашивает: "А как там у тебя с оптимизацией запросов в PostgreSQL?"

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

Читать далее
Total votes 28: ↑14 and ↓14+4
Comments15

Hazelcast: эксперименты с настройкой и долговременным хранением больших объектов in-memory

Level of difficultyMedium
Reading time50 min
Views2.4K

Статья будет полезна для тех, кто поддерживает приложения на Java, так как большая ее часть посвящена анализу работы G1 GC, знакомству с соответствующими инструментами и особенностями тюнинга GC, в частности для очень больших heap`ов. А также тем, кто пытается разобраться, на что способен Hazelcast, и для чего его можно применить.

Так исторически сложилось, что на проекте уже использовался Hazelcast, и мы решили попробовать переиспользовать его под новую задачу. Она заключалась в хранении объектов в БД с одним специфичным требованием – данные нельзя записывать на диск, что сильно сужало доступные варианты. Безусловно, мы понимали, что надежность такого хранилища будет низкой, но выбора не было. И, хотя, у нас были мысли развернуть для этого Redis или VoltDB, мы решили опробовать Hazelcast, так как в его возможности, помимо прочего, так же входит in-memory хранилище.

Что из этого получилось – читайте под катом.

Читать далее
Total votes 10: ↑9 and ↓1+10
Comments0

Финансовая арифметика в PostgreSQL

Level of difficultyEasy
Reading time5 min
Views10K

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

Читать далее
Total votes 30: ↑26 and ↓4+28
Comments53

Как новый компилятор K2 ускоряет компиляцию Kotlin на 94%

Level of difficultyMedium
Reading time10 min
Views14K

Привет, меня зовут Мялкин Максим, я занимаюсь мобильной разработкой в KTS.

Не за горами выпуск новой версии Kotlin 2.0, основной частью которого является изменение компилятора на K2. 

По замерам JB, K2 ускоряет компиляцию на 94%. Также он позволит ускорить разработку новых языковых фич и унифицировать все платформы, предоставляя улучшенную архитектуру для мультиплатформенных проектов.

Но мало кто изучал, как работает K2, и чем он отличается от K1. 

Эта статья освещает нюансы работы компилятора, которые будут полезны разработчикам для понимания, что же JB улучшают под капотом, и как это работает.

Читать далее
Total votes 69: ↑69 and ↓0+75
Comments16

Управление оффсетами в Kafka

Level of difficultyEasy
Reading time6 min
Views4.8K

Сегодня в статье разберем, как Kafka обрабатывает оффсеты сообщений и какие существуют стратегии их сохранения и обновления.

Оффсет в Kafka — это числовой идентификатор, который указывает позицию каждого сообщения внутри партиции топика. Оффсеты представляют собой порядковые номера, начинаемые с нуля, и уникальны в рамках каждой партиции, но не между разными партициями. Т.е сообщение с оффсетом 5 в партиции 1 и сообщение с оффсетом 5 в партиции 2 — это разные сообщения.

Читать далее
Total votes 9: ↑6 and ↓3+8
Comments0

Разбираемся с динамической памятью (кучей) в приложениях Java

Reading time8 min
Views6.8K
Начнём с простого вопроса. В самом ли деле каждый Java-разработчик понимает, как в Java работает память? Одна из обязанностей любого Java-разработчика — гарантировать, что в результате тонкой настройки приложения на Java из него получится выжать такую производительность, какую только возможно. Требуется время, чтобы научиться управлять памятью в Java и понять этот процесс, это касается всех, кто имеет дело с Java. В этой статье попробую объяснить, как овладеть этими умениями.
Читать дальше →
Total votes 13: ↑12 and ↓1+18
Comments6

Это база: нюансы работы с Redis. Часть 2, репликация

Level of difficultyMedium
Reading time11 min
Views7.8K

Всем привет, на связи Пётр, инженер компании Nixys. В прошлой статье мы разобрали основные концепции Redis. Теперь рассмотрим базовую репликацию Redis и настроим эту БД на высокий уровень отказоустойчивости.

Читать далее
Total votes 14: ↑14 and ↓0+16
Comments2

Сравнение технологий WebSockets, Server-Sent-Events, Long-Polling, WebRTC и WebTransport

Reading time16 min
Views12K

При работе с современными веб-приложениями реального времени незаменима возможность отправлять события с сервера на клиент. Именно этой необходимостью продиктовано то, что за годы работы было изобретено несколько методов для этой цели, каждый с собственным набором достоинств и недостатков. Первоначально единственным вариантом был длинный опрос. Затем в качестве альтернативы появились веб-сокеты — более надёжное решение для двунаправленной коммуникации. Вслед за веб-сокетами появились события, отправляемые сервером (SSE), более простой метод, обеспечивающий однонаправленную связь от сервера к клиенту. Забегая вперёд, сейчас разрабатывается ещё и протокол WebTransport, который может тем более изменить ландшафт этой области, обеспечивая более эффективный и гибкий подход, располагающий к масштабированию. В некоторых нишевых случаях можно присмотреться и к технологии WebRTC, предназначенной для работы с событиями в направлении сервер-клиент.

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

Читать далее
Total votes 24: ↑22 and ↓2+27
Comments4
1
23 ...

Information

Rating
2,023-rd
Registered
Activity

Specialization

Specialist
PostgreSQL
OOP
Java
Git
High-loaded systems
Elasticsearch
MongoDB
RabbitMQ
Java Spring Framework
Apache Kafka