Как стать автором
Обновить
1
0
Артем @unit4

Пользователь

Отправить сообщение

1000 и 1 способ сесть на мель в Spring WebFlux при написании высоконагруженного сервиса

Время на прочтение8 мин
Количество просмотров13K

Источник изображения: Shutterstock.com/photowind

Добрый день, меня зовут Тараканов Анатолий, я senior java разработчик SberDevices. 2.5 года программирую на Java, до этого 6 лет писал на C# и 1 год на Scala. Хочу поделиться опытом создания сервиса-оркестратора Voice Processing Service. Он является точкой входа для пользователей семейства виртуальных ассистентов Салют. Через него также проходит часть трафика приложений SmartMarket, где любой разработчик может написать навык для наших виртуальных ассистентов Салют.

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

Немного о сервисе


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

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

Читать дальше →
Всего голосов 20: ↑20 и ↓0+20
Комментарии12

Руководство по Aircrack-ng в Linux для новичков

Время на прочтение10 мин
Количество просмотров116K
Всем привет. В преддверии старта курса «Практикум по Kali Linux» подготовили для вас перевод интересной статьи.




Сегодняшнее руководство познакомит вас с основами для начала работы с пакетом aircrack-ng. Конечно, невозможно предоставить всю необходимую информацию и охватить каждый сценарий. Так что будьте готовы делать домашние задания и проводить исследования самостоятельно. На форуме и в Wiki есть множество дополнительных туториалов и другой полезной информации.
Читать дальше →
Всего голосов 13: ↑9 и ↓4+8
Комментарии12

“Давайте использовать Kubernetes!” Теперь у вас 8 проблем

Время на прочтение6 мин
Количество просмотров13K
Если вы используете Docker, следующим логичным шагом кажется переход на Kubernetes, он же K8s, правильно? Ну, предположим. Однако решения, предназначенные для 500 инженеров-программистов, одновременно разрабатывающих одно приложение, достаточно сильно отличаются от решений для 50 человек. А решение для команды из 5 программистов — это и вовсе другая история.

Если вы работаете в маленькой команде, Kubernetes, вероятнее всего, не для вас. Он принесет вам много боли в обмен на крайне скромные преимущества.
Давайте разберемся, почему это может произойти.
Читать дальше →
Всего голосов 19: ↑13 и ↓6+13
Комментарии106

RBK.money выпустила первый в мире open-source платежный процессинг — творим будущее вместе

Время на прочтение15 мин
Количество просмотров41K


Привет!


Если вы читали наши предыдущие посты (читали же?), то точно помните, что мы в RBK.money очень сильно за опенсорс. Настолько, что выложили в открытый доступ наш антифрод в виде открытых исходников под лицензией Apache 2.0.


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


Зачем мы это сделали? Как это работает внутри? Как теперь жить дальше? Читайте под катом. Я гарантирую, что такого вы еще не встречали — еще никто в мире не опенсорсил платежную систему такого уровня.


История меняется прямо сейчас на ваших глазах!

Читать дальше →
Всего голосов 68: ↑66 и ↓2+82
Комментарии43

45 youtube-каналов на английском языке для ИТ-специалистов

Время на прочтение4 мин
Количество просмотров24K
Хотела узнать, что смотрят коллеги (кроме нетфликсов и амедиатек), провела опрос. Результат получился неожиданный. Я думала, ну, соберу каналов 10, которые смотрят все ИТ-специалисты. Не тут-то было! Во-первых, каналов получилось в 10 раз больше, чем я предполагала. Во-вторых, 80% из них — на английском языке. В-третьих, смотрят коллеги далеко не только каналы о программировании, но и о математике, науке, космосе, истории.
Вот вам подборка из 45 интересных, по мнению коллег из EPAM, youtube-каналов на английском языке.


Читать дальше →
Всего голосов 10: ↑10 и ↓0+10
Комментарии5

Что под капотом компиляторных оптимизаций GraalVM?

Время на прочтение7 мин
Количество просмотров6.4K

Продолжаем разбираться с работой GraalVM, и на этот раз у нас перевод статьи Aleksandar Prokopec «Under the hood of GraalVM JIT optimizations», изначально опубликованной в блоге на Medium. В статье есть несколько интересных ссылок, позже мы постараемся перевести и эти статьи.





В прошлый раз на Medium мы рассматривали вопросы производительности Java Streams API на GraalVM в сравнении с Java HotSpot VM. GraalVM отличается высокой производительностью, и в тех экспериментах мы достигли ускорения от 1.7 до 5 раз. Конечно, конкретные значения выигрыша в производительности всегда будут зависеть от запускаемого кода и нагрузочных данных, поэтому, прежде чем делать какие-то выводы, стоит самостоятельно попробовать запустить ваш код на GraalVM.


В этой статье мы глубже проникнем во внутренности GraalVM и посмотрим, как происходит JIT-компиляция.


Читать дальше →
Всего голосов 26: ↑25 и ↓1+34
Комментарии1

Уровни изолированности транзакций для самых маленьких

Время на прочтение5 мин
Количество просмотров256K


Сегодня хотел бы довести крайне интересный, но часто покрытый тайнами для обычных смертных программистов раздел базы данных (БД) — уровни изолированности транзакций. Как показывает практика, многие люди, связанные с IT, в частности с работой с БД, слабо понимают зачем нужны эти уровни и как их можно использовать себе во благо.

Немного теории


Сами транзакции особых объяснений не требуют, транзакция — это N (N≥1) запросов к БД, которые выполнятся успешно все вместе или не выполнятся вовсе. Изолированность же транзакции показывает то, насколько сильно влияют друг на друга параллельно выполняющиеся транзакции.
Выбирая уровень транзакции, мы пытаемся прийти к консенсусу в выборе между высокой согласованностью данных между транзакциями и скоростью выполнения этих самых транзакций.
Стоит отметить, что самую высокую скорость выполнения и самую низкую согласованность имеет уровень read uncommitted. Самую низкую скорость выполнения и самую высокую согласованность — serializable.
Читать дальше →
Всего голосов 42: ↑36 и ↓6+30
Комментарии17

Домен-фронтинг на базе TLS 1.3

Время на прочтение7 мин
Количество просмотров19K

Введение



Современные корпоративные системы фильтрации контента, от таких именитых производителей как Cisco, BlueCoat, FireEye имеют довольно много общего с более мощными их собратьями — DPI системами, которые усиленно внедряются на национальном уровне. Суть работы и тех и других в том, чтобы производить досмотр входящего и исходящего интернет трафика и, на основании черных/белых списков, принимать решение о запрете интернет-соединения. А так как и те, и другие в основах своей работы полагаются на схожие принципы, то и способы их обхода также будут иметь много общего.

Одной из технологий, позволяющей достаточно эффективно обходить как DPI, так и корпоративные системы, является технология домен-фронтинга. Ее суть состоит в том, что мы идем на заблокированный ресурс, прикрываясь другим, публичным доменом, с хорошей репутацией, который заведомо не будет блокирован ни одной системой, например google.com.

О данной технологии было написано уже достаточно много статей и приведено много примеров. Однако популярные и обсуждаемые в последнее время технологии DNS-over-HTTPS и encrypted-SNI, а также новая версия протокола TLS 1.3 дают возможность рассмотреть еще один вариант домен-фронтинга.
Читать дальше →
Всего голосов 46: ↑44 и ↓2+42
Комментарии36

Сортировка «Американский флаг»

Время на прочтение7 мин
Количество просмотров16K

Чтобы понять принцип действия этой «многополосной» сортировки проще для начала разобраться на примере флага с тремя полосами. А чтобы легко разобраться с трёхцветным флагом, лучше сначала посмотреть, как это работает на примере двухцветного. А чтобы разобраться с двухцветным...
Траффик
Всего голосов 20: ↑18 и ↓2+28
Комментарии3

«Если хочешь создать нечто действительно крутое, надо копать глубже и знать, как твой код работает в системе, на железе»

Время на прочтение11 мин
Количество просмотров8.2K
Хабр, привет! Интересно, как много программистов и разработчиков открыли для себя data science или data engineering, и строят успешную карьеру в области больших данных. Илья Маркин, Software engineer в Directual, — как раз один из разработчиков, перешедших в data engineering. Поговорили об опыте в роли тимлида, любимом инструменте в data engineering, Илья рассказал о конференциях и интересных профильных каналах джавистов, о Directual с пользовательской стороны и технической, о компьютерных играх и пр.

image

— Илья, спасибо, что нашел время встретиться. Поздравляю и с относительно недавним переходом в новую компанию, и с рождением дочки, хлопот и забот у тебя сейчас много. Сразу же первый вопрос: чем таким интересным тебе предложили заниматься в Directual, что ты ушел из DCA?

— Наверное, прежде надо рассказать, чем я в DCA занимался. В DCA (Data-Centric Alliance) я попал после прохождения программы «Специалист по большим данным». В тот момент я активно интересовался темой big data и понял, что это именно та область, в которой я хочу развиваться. Ведь там, где много данных, интересных инженерных проблем, которые необходимо решать, тоже предостаточно. Программа помогла мне довольно быстро погрузиться в экосистему мира биг дата, там я получил необходимые начальные знания о Hadoop, YARN, парадигме Map-Reduce, HBase, Spark, Flink, и многом другом, и о том, как это работает под высокой нагрузкой.
Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии3

Как мы в ivi переписывали etl: Flink+Kafka+ClickHouse

Время на прочтение6 мин
Количество просмотров24K
Год назад мы решили переделать схему сбора данных в приложении и данных о действиях клиентов. Старая система работала исправно, но с каждым разом было всё сложнее и опаснее вносить туда изменения.



В этой статье я расскажу, какие технологии мы стали использовать для сбора и агрегации данных в новом проекте.
Читать дальше →
Всего голосов 23: ↑23 и ↓0+23
Комментарии12

Тестирование и отладка MapReduce

Время на прочтение5 мин
Количество просмотров6.1K
В «Ростелекоме» мы используем Hadoop для хранения и обработки данных, загруженных из многочисленных источников с помощью java-приложений. Сейчас мы переехали на новую версию hadoop с Kerberos Authentication. При переезде столкнулись с рядом проблем, в том числе и с использованием YARN API. Работа Hadoop с Kerberos Authentication заслуживает отдельной статьи, а в этой мы поговорим об отладке Hadoop MapReduce.


Читать дальше →
Всего голосов 25: ↑23 и ↓2+21
Комментарии6

Производительность Apache Parquet

Время на прочтение9 мин
Количество просмотров15K

Плохой пример хорошего теста


В последнее время в курилках часто возникали дискуссии на тему сравнения производительности различных форматов хранения данных в Apache Hadoop — включая CSV, JSON, Apache Avro и Apache Parquet. Большинство участников сразу отметают текстовые форматы как очевидных аутсайдеров, оставляя главную интригу состязанию между Avro и Parquet.


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


Как любой уважающий себя инженер, я подумал, что было бы неплохо провести полноценные performance-тесты, чтобы наконец проверить, на чьей стороне правда. Результат сравнения — под катом.


Apache Parquet Logo

Читать дальше →
Всего голосов 9: ↑9 и ↓0+9
Комментарии0

Что такое TLS

Время на прочтение9 мин
Количество просмотров479K
Данный текст является вольным переводом вот этой главы замечательной книги «High Performance Browser Networking» авторства Ильи Григорика. Перевод выполнялся в рамках написания курсовой работы, потому очень вольный, но тем не менее будет полезен тем, кто слабо представляет что такое TLS, и с чем его едят.

Общие сведения о TLS

Протокол TLS (transport layer security) основан на протоколе SSL (Secure Sockets Layer), изначально разработанном в Netscape для повышения безопасности электронной коммерции в Интернете. Протокол SSL был реализован на application-уровне, непосредственно над TCP (Transmission Control Protocol), что позволяет более высокоуровневым протоколам (таким как HTTP или протоколу электронной почты) работать без изменений. Если SSL сконфигурирован корректно, то сторонний наблюдатель может узнать лишь параметры соединения (например, тип используемого шифрования), а также частоту пересылки и примерное количество данных, но не может читать и изменять их.
Читать дальше →
Всего голосов 45: ↑43 и ↓2+41
Комментарии20

Анализ инцидента 21 октября на GitHub

Время на прочтение10 мин
Количество просмотров56K
Роковые 43 секунды, которые вызвали суточную деградацию сервиса

На прошлой неделе в GitHub произошёл инцидент, который привёл к деградации сервиса на 24 часа и 11 минут. Инцидент затронул не всю платформу, а только несколько внутренних систем, что привело к отображению устаревшей и непоследовательной информации. В конечном счете данные пользователей не были потеряны, но ручная сверка нескольких секунд записи в БД выполняется до сих пор. На протяжении почти всего сбоя GitHub также не мог обрабатывать вебхуки, создавать и публиковать сайты GitHub Pages.

Все мы в GitHub хотели бы искренне извиниться за проблемы, которые возникли у всех вас. Мы знаем о вашем доверии GitHub и гордимся созданием устойчивых систем, которые поддерживают высокую доступность нашей платформы. С этим инцидентом мы вас подвели и глубоко сожалеем. Хотя мы не можем отменить проблемы из-за деградации платформы GitHub в течение длительного времени, но можем объяснить причины произошедшего, рассказать об усвоенных уроках и о мерах, которые позволят компании лучше защититься от подобных сбоев в будущем.
Читать дальше →
Всего голосов 108: ↑108 и ↓0+108
Комментарии37

Как мы устраивали соревнование смен между рабочими производства (как в СССР)

Время на прочтение4 мин
Количество просмотров17K


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

У нас задача была чуть сложнее, потому что изначально нужно было не подстегнуть операторов линий, а дать каждому понять, успевает он выполнить план в нужном темпе работы или нет. То есть как-то визуализировать этот процесс. И тут вскрылась одна очень интересная особенность конкретного производства.

Итак, есть линия упаковки продуктов. Это цепочка из специальных станков, в которых полно движущихся деталей. В эти станки «приезжает» много-много продуктов, которые потом выстреливаются, как из пулемёта, в герметичной упаковке. Оператор нужен, чтобы делать часть работы по упаковке и в целом наблюдать за линией. Таких линий не одна и даже не десять.
Читать дальше →
Всего голосов 40: ↑36 и ↓4+32
Комментарии41

Как мы восстанавливали поврежденный .wav файл

Время на прочтение2 мин
Количество просмотров14K

Был интересный опыт, когда с другом восстанавливали .wav файл. Я решил описать наш мучительный процесс, вдруг кому-то пригодится.


Предыстория


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

Читать дальше →
Всего голосов 37: ↑29 и ↓8+21
Комментарии10

Вопросы не мальчика, а джуна. 22 вопроса работодателю на собеседовании на позицию «Middle Python-разработчик»

Время на прочтение10 мин
Количество просмотров68K
image

Введение


За 2 года мне посчастливилось посетить более сорока собеседований в качестве кандидата на позицию «Middle Python-разработчик». На последних пятнадцати собеседованиях я понял необходимость задавать вопросы работодателю, чтобы в дальнейшем не столкнуться с неожиданностями по работе. Помимо базовых вопросов, которые обычно задают кандидаты работодателю я решил сформировать свои вопросы. Когда я задавал эти вопросы на собеседованиях, я получал самые различные реакции со стороны собеседующих. Кто-то говорил, что я дотошный, кто-то считал эти вопросы слишком банальными, а кто-то даже начинал нервничать(краснеть) и немедленно прерывать собеседование с нелепой отговоркой о том, что у него совещание. В этой статье я хотел бы рассказать об общих идеях посещения таких мероприятий а также привести мои 22 вопроса, которые я задаю на собеседовании работодателю.
Читать дальше →
Всего голосов 72: ↑58 и ↓14+44
Комментарии132

Компилируем Kotlin: JetBrains VS ANTLR VS JavaCC

Время на прочтение6 мин
Количество просмотров7.6K

Насколько быстро парсится Kotlin и какое это имеет значение? JavaCC или ANTLR? Годятся ли исходники от JetBrains?

Сравниваем, фантазируем и удивляемся.
Читать дальше →
Всего голосов 20: ↑20 и ↓0+20
Комментарии41

MapStruct решение задачи с ManyToMany

Время на прочтение4 мин
Количество просмотров24K


Здравствуйте, уважаемые читатели! Те, кто разрабатывает Web приложения на Java с использованием фреймворка Spring, те кто комментирует эти приложения и просто интересующиеся.

В предыдущей статье «Spring Boot решение задачи с ManyToMany»

я приводил пример выполненного тестового приложения, в котором между двумя классами имеется bidirectional отношение ManyToMany. В статье приводился пример решения проблемы зацикливания при получении rest ответа с помощью использования DTO класса. Читатели в комментариях предложили использовать для решения проблемы зацикливания библиотеку MapStruct.

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

В данной статье я приведу пример решения той же задачи в виде приложения Spring Boot с использованием библиотеки MapStruct. Исходный код доступен на Гитхабе
Читать дальше →
Всего голосов 7: ↑5 и ↓2+3
Комментарии5
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Новосибирск, Новосибирская обл., Россия
Зарегистрирован
Активность