Как стать автором
Обновить
2
@SaltWaterCrocread⁠-⁠only

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

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

Raft в Tarantool. Как это работает и как этим пользоваться

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

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

Синхронная репликация появилась в релизе 2.5.1, а в конце октября в релизе 2.6.1 появилась поддержка автоматических выборов лидера на основе Raft.

Меня зовут Сергей Петренко, и я участвовал в разработке этих больших фич. Сегодня я расскажу, как они устроены, а также коснусь конфигурирования выборов лидера и новых возможностей, которые алгоритм Raft даёт пользователям Tarantool.
Читать дальше →
Всего голосов 51: ↑51 и ↓0+51
Комментарии6

Лечим Java Reactor при помощи Kotlin Coroutines

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

На текущей работе пишем на Reactor. Технология классная, но как всегда есть много НО. Некоторые вещи раздражают, код сложнее писать и читать, с ThreadLocal совсем беда. Решил посмотреть какие проблемы уйдут, если перейти на Kotlin Coroutines, а какие проблемы, наоборот, добавятся.

Приступим к лечению
Всего голосов 8: ↑7 и ↓1+10
Комментарии8

Опыт сопряжения Java, JavaScript, Ruby и Python в одном проекте посредством GraalVM

Время на прочтение18 мин
Количество просмотров7.8K
В прошлом месяце вышла стабильная LTS-версия многоязычной среды выполнения GraalVM 20.3.0 от корпорации Oracle и мне захотелось испробовать её для решения какой-нибудь интересной практической задачи. Для тех кто не в курсе, приведу краткое описание этой новой платформы. GraalVM позволяет использовать в едином окружении различные популярные языки программирования и обеспечивает их разностороннее взаимодействие в рамках некоторой общей среды выполнения.


Схематическое изображение архитектуры GraalVM из официальной документации.

Добавление новых языков в GraalVM осуществляется с помощью специального фреймворка Truffle, выполненного в виде библиотеки Java. Фреймворк предназначен для создания реализаций языков программирования в качестве интерпретаторов для самомодифицируемых абстрактных синтаксических деревьев (AST). При желании на его основе можно создать собственный язык, в официальных репозиториях GraalVM подробно рассмотрен пример реализации такого проекта под названием SimpleLanguage. Интерпретаторы, которые были написаны с использованием фреймворка Truffle, будут автоматически использовать GraalVM как JIT-компилятор непосредственно для самой реализации языка запускаемой на JVM-платформе и, соответственно, иметь возможность взаимодействия и двустороннего обмена данными в одном и том же пространстве памяти посредством специально разработанного протокола и программного интерфейса Polyglot API.

Платформа GraalVM вместе с исполняемой программой на смеси самых разных языков может быть представлена в виде автономного и самодостаточного исполняемого файла, либо работать поверх OpenJDK, Node.js или даже внутри Oracle Database.
Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии8

Java HotSpot JIT компилятор — устройство, мониторинг и настройка (часть 2)

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

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

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

Практический взгляд на хранение в Kafka

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


Kafka повсюду. Где есть микросервисы и распределенные вычисления, а они сейчас популярны, там почти наверняка есть и Kafka. В статье я попытаюсь объяснить, как в Kafka работает механизм хранения.

Читать дальше →
Всего голосов 23: ↑22 и ↓1+33
Комментарии3

Go-приложение с бессерверной архитектурой на Kubernetes с Knative

Время на прочтение8 мин
Количество просмотров3.6K
Автор нашей новой переводной статьи утверждает, что Knative — лучшее, что только могли придумать во Вселенной! Вы согласны?

Если вы уже используете Kubernetes, то, вероятно, слышали о бессерверной архитектуре (serverless). Хотя обе платформы, Kubernetes и Knative, являются масштабируемыми, именно бессерверная архитектура делает всё возможное, чтобы предоставлять разработчикам работающий код и не беспокоить их проблемами инфраструктуры. Кроме того, такая архитектура сокращает расходы на инфраструктуру за счет виртуального масштабирования экземпляров приложения с нуля.
Читать дальше →
Всего голосов 5: ↑3 и ↓2+3
Комментарии0

Как бы я сейчас объяснил молодому себе… зачем существуют требования ACID для баз данных?

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

Я – выскочка. По крайней мере, так я себя иногда ощущаю. Закончив второй курс политологии и журналистики в университете, я увидел американский рейтинг профессий по уровню оплаты труда. Журналист в этом рейтинге был на последнем месте, а на первых местах были data scientists и data engineers (политолога в этом списке, почему-то, не было). Я не знал, кто составлял этот список, и понятия не имел, кто такие эти data-челы с первых строк, но он меня впечатлил. Я бросил пить и начал проходить курсы на Coursera, а потом каким-то чудом заполучил студенческую подработку в стартапе. Так я сделал своё «войти в IT».

Когда человек, не имеющий университетской подготовки, пытается начать программировать, то он чувствует себя несчастным, который, увидев из окна солнце, вышел на улицу и попал под неожиданный в столь прекрасный день град: шаблоны проектирования, функции, классы, ООП, инкапсуляция, протоколы, потоки, ACID… Хочется прокричать, как Виктор Фёдорович в своё время:

Окно в удивительный мир баз данных...
Всего голосов 15: ↑13 и ↓2+16
Комментарии9

Аварии как опыт #1. Как сломать два кластера ClickHouse, не уточнив один нюанс

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

Про некоторые свои failure stories мы уже писали и раньше, но теперь мне выпала честь формально открыть специальный цикл из таких статей. Ведь аварии, их причины и последствия — это тоже часть нашей жизни, и исследовать эту «тёмную сторону» не менее интересно, чем всё остальное. Тем более, что они всё больше влияют даже на повседневный быт, так что из любой аварии можно и нужно извлекать уроки. Да и читатели не раз просили нас рассказывать о таком почаще — давайте попробуем!

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

Перейдем к технической стороне…

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

Пытаясь композировать некомпозируемое: монады

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

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

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

Атаки на JSON Web Tokens

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


Содержание:


  • Что такое JWT?
    • Заголовок
    • Полезная нагрузка
    • Подпись
    • Что такое SECRET_KEY?
  • Атаки на JWT:
    • Базовые атаки:
      1. Нет алгоритма
      2. Изменяем алгоритм с RS256 на HS256
      3. Без проверки подписи
      4. Взлом секретного ключа
      5. Использование произвольных файлов для проверки
    • Продвинутые атаки:
      1. SQL-инъекция
      2. Параметр поддельного заголовка
      3. Внедрение заголовка ответа HTTP
      4. Прочие уязвимости

Что такое JSON Web Token?


Веб-токен JSON обычно используется для авторизации в клиент-серверных приложениях. JWT состоит из трех элементов:


  • Заголовок
  • Полезная нагрузка
  • Подпись

Заголовок


Это объект JSON, который представляет собой метаданные токена. Чаще всего состоит из двух полей:


  • Тип токена
  • Алгоритм хэширования

Официальный сайт предлагает два алгоритма хэширования:


  • «HS256»
  • «RS256»
Читать дальше →
Всего голосов 14: ↑6 и ↓8+4
Комментарии25

Java HotSpot JIT компилятор — устройство, мониторинг и настройка (часть 1)

Время на прочтение8 мин
Количество просмотров33K
JIT (Just-in-Time) компилятор оказывает огромное влияние на быстродействие приложения. Понимание принципов его работы, способов мониторинга и настройки является важным для каждого Java-программиста. В цикле статей из двух частей мы рассмотрим устройство JIT компилятора в HotSpot JVM, способы мониторинга его работы, а также возможности его настройки. В этой, первой части мы рассмотрим устройство JIT компилятора и способы мониторинга его работы.
Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии3

Программная реализация умножения в полях Галуа

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

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


Итак, я отвлёкся. В детстве-юношестве для помехоустойчивого кодирования можно было бы применить контроль чётности по матричному методу, но сейчас это не серьёзно. Полистав интернет я решил остановиться на кодировании по методу Рида-Соломона. Алгоритм не то, чтобы совсем новый, его ещё в первых CD применяли, но при этом, насколько мне известно, не потерявший своей актуальности и на данный момент. В этой статье о самих кодах Рида-Соломона я не буду сильно распространяться – это за меня на Хабре сделали много раз и много кто. Здесь я хочу описать реализацию алгоритма умножения в GF[256]. Тем не менее, чтобы не заставлять читателя прыгать по ссылкам, кратенько опишу зачем вообще приходится иметь дело с полями Галуа.

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

Автоматизация аналитики Jira средствами Apache NiFi

Время на прочтение7 мин
Количество просмотров5.2K
Приветствую, господа. Я Маша, мне 23, и я уже полгода изучаю и внедряю на практике Apache NiFi.

В тот час, когда технически Apache NiFi — мощное связующее звено между различными сервисами (осуществляет обмен данными между ними, по пути позволяя их обогащать и модифицировать), смотрю я на него с точки зрения аналитика. А все потому, что NiFi весьма удобный инструмент для ETL. В часности, в команде мы ориентируемся на построение им SaaS архитектуры.

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

Несмотря на посвящение данной статьи новичкам, считаю правильным и полезным если более опытные архитекторы (гуру, так скажем) отрецензируют ее в кромментариях или поделятся своими кейсами использования NiFi в различных сферах деятельности. Много ребят, включая меня, скажет вам спасибо.
Читать дальше →
Всего голосов 12: ↑10 и ↓2+12
Комментарии13

Y Combinator: Как распределять доли между основателями стартапа (Майкл Сайбл)

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

Майкл Сайбл — сооснователь (в 25 лет) стартапов Justin.tv/Twitch (капитализация $15 млрд) и Socialcam, член правления Reddit. Ex-CEO Y Combinator.

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

Вот некоторые из наиболее часто приводимых причин неравного разделения долей в стартапе:

  • Я придумал идею
  • Я начал работать за N месяцев до моего сооснователя
  • Мы так договорились
  • Мой сооснователь получал зарплату за N месяцев, а я — нет
  • Я начал работать полный рабочий день за N месяцев до моего сооснователя
  • Я старше/опытнее своего сооснователя
  • Я привлек своего сооснователя после того, как собрал N тысяч долларов
  • Я привлек своего сооснователя после запуска своего MVP
  • Нам нужен кто-то для тай-брейка в случае спора основателей


Основатели, как правило, совершают ошибку, разделяя доли на основе ранее проделанной работы.

Все эти рассуждения приводят к четырем фундаментальным ошибкам:
Всего голосов 8: ↑5 и ↓3+8
Комментарии8

Константин Смирнов: «Барон контракт подписал, отгрузил компьютеры и стал ждать оплаты. Но тут Союз развалился»

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


Александр Труханов — соавтор книг «А я был в компьютерном городе» и «Энциклопедия профессора Фортрана» — побеседовал со своим знакомым, ныне бизнесменом, Константином Смирновым о ввозе иностранных компьютеров в СССР: про дырку в железном занавесе, про немецкого барона-контрабандиста и британского люмпена-авантюриста.
Читать дальше →
Всего голосов 18: ↑16 и ↓2+25
Комментарии7

Что такое горутины и каков их размер?

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

Я почти уверен, что любой, кто изучал когда-либо Go, слышал, что «горутины похожи на легковесные потоки» и что «можно спокойно запускать сотни и тысячи горутин». Некоторые люди узнавали, что «горутина весит около 2 килобайт», скорее всего, из примечаний к релизу Go 1.4, и еще меньше людей узнавали, что это изначальный размер ее стека.

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

В рамках этого исследования я буду использовать ветку Go 1.14, поэтому все фрагменты кода будут ссылаться на нее.

Читать далее
Всего голосов 11: ↑9 и ↓2+10
Комментарии1

Как не испортить своего джуна

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


Меня зовут Дима Вдовин, я разработчик команды корпоративных рисков. Сегодня я хотел бы поговорить о джунах и их интеграции в команду разработки. С одной стороны, тема банальная и известна всем, а с другой, о ней часто забывают или игнорируют. Почему-то многие команды и руководители считают, что джун вольется в коллектив и работу над проектом как-то «самостоятельно», без активной поддержки, а если не вольется — значит он не справляется и не подходит. Это не так.

Мы крупный банк, к нам приходит работать много молодых ребят и в большинстве случаев для них это первая работа такого рода. Это тянет за собой целый ворох проблем, связанный со страхами неизвестности, неуверенностью, боязнью «уронить прод». Они боятся совершить серьезную ошибку, которая поставит крест на карьере в IT. Это сейчас подавляющее большинство из нас — опытных разработчиков — уверенные в себе профессионалы. Мы можем позволить себе хотя бы на время отказаться от подобной саморефлексии и делать «быстрее, выше, сильнее». Многих же джунов одолевают страхи, которые если и не парализуют, то заставляют их выверять каждый шаг.
Читать дальше →
Всего голосов 41: ↑36 и ↓5+44
Комментарии64

Все об OpenShift Egress. Часть 1

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


Про управление входящим в OpenShift трафиком (оно же Ingress) написано много в документации и различных статьях по его настройке. Но, кроме контроля входящего в кластер трафика, в работе зачастую требуется контроль исходящего трафика (Egress). А на эту тему информации, систематизирующей подходы и технические решения, значительно меньше. Постараемся заполнить эту нишу серией постов.

Итак, в каких ситуациях нужен контроль исходящего из кластера трафика?
Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии5

Есть ли перспективы у монолитных web-приложений?

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

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

В фокусе моих интересов не гигантские web-приложения типа Gmail, Facebook, Twitter, а web-приложения, созданные на базе таких платформ, как Wordpress, Drupal, Joomla, Django, Magento и им подобным. Под катом мои субъективные мысли на этот счёт. Ничего нового - всё те же 33 буквы кириллицы и 26 букв латиницы вперемешку.

Читать далее
Всего голосов 15: ↑12 и ↓3+14
Комментарии42

Зачем тратить деньги на юристов?

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

Зачем тратить деньги на юристов?


image


Опыт общения и сотрудничества с различными стартаперами и начинающими предпринимателями показывает, что чаще всего они не придают должное значение правовому оформлению и сопровождению своего бизнеса.


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

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

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность