Pull to refresh

Technotext

От Isolation к Consistency — дорога длиной в 30 лет

Reading time17 min
Views7.6K

Участвую в стартапе, в котором разрабатывается СУБД нового типа (работает поверх некоторых kv-движков, кардинально расширяя их возможности, про это немного можно прочитать здесь). Для того, чтобы сравнить то, что понемногу получается, с тем, что имеется в индустрии, пришлось на глубоком уровне проработать первоисточники по темам Isolation и Consistency (уточню, что имеется ввиду не та Consistency, что в ACID). Обнаружил интересные нюансы, которые и излагаю в этой статье.


Тезисно:


  • Термин Phantom Read является продуктом испорченного телефона
  • Смысл понятий Lost Update, Write Skew и Read Skew для разделения уровней изоляций неочевиден и относителен
  • Движок, который обеспечивает уровень изоляции Serializable, в распределённом мире может вести себя весьма причудливо, например, всегда возвращать пустой результат для read-only транзакций — и ему за это по стандарту "ничего не будет"
  • Strong consistency в Cosmos DB — предел мечтаний? (спойлер: нет)

Ну, и ещё кое-что по мелочи. В конце рассмотрим вот такой венец творения человеческого разума:


Читать дальше →
Total votes 27: ↑27 and ↓0+27
Comments25

Собеседование Golang разработчика (теоретические вопросы), Часть II. Что там с конкурентностью?

Reading time20 min
Views64K

Что спрашивают на собеседовании Golang разработчика? Асинхронщина? Контексты? Вторая часть статьи с вопросами и ответами, собранными на собеседованиях.

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

Зачем нам понадобился реплатформинг

Reading time7 min
Views1.6K

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

При этом, далеко не все «акулы бизнеса» счастливы сожительствовать с упомянутыми сущностями. Модернизация этих «вавилонских башен» — источник стресса и головной боли для многих ИТ-специалистов. Некоторые из них постигают дзен и мирятся с происходящим, другие, напротив, стремятся перевести монолиты в облако c помощью реплатформинга и другими способами на букву «Р». Мы идем вторым путем. 

Попросили поделиться опытом М.Видео-Эльдорадо руководителя домена Канонические сервисы Александра Зеленюка. Под катом его рассказ.

Читать далее
Total votes 19: ↑18 and ↓1+19
Comments2

Архитектура Шредингера и способы с ней бороться

Reading time21 min
Views4.5K


Представьте, что вы работаете в команде над крупным проектом какое-то время. Проект прошел начальный этап и уже работает в продакшн среде. Им пользуются люди, даже можно сказать, что им пользуются много людей и они рассчитывают на ваш продукт, он для них важен. С какого-то момента вдруг вами овладевает беспокойство, что что-то не так. Каждый спринт дается тяжело. Новые задачи вызывают проблемы с внедрением, а после релиза вы ловите один инцидент за другим. Каждый день вы со страхом смотрите в свой месенджер, боясь увидеть очередное сообщение с очередной проблемой, которую нужно срочно решать. Запросы к базе начинают тормозить, важная информация теряться, все валится из рук, контроль над ситуацией утекает как песок сквозь пальцы. Вы начинаете плохо спать, начинают снится кошмары о бесконечных сообщениях в очередях вашего брокера, которые воркеры не способны переварить. Вам снятся сервера, на которых заканчивается CPU и память, потому что сервисы безмерно потребляют ресурсы. Утилизация дисков на серверах с СУБД уже давно под 100%, ведь сервисы что-то постоянно с них читают или пишут. Ошибки, задержки, падения. Вы просыпаетесь.

Читать дальше →
Total votes 16: ↑15 and ↓1+19
Comments2

Перевод Google TypeScript Style Guide

Reading time4 min
Views9.1K

Здравствуйте, уважаемые читатели Хабра!

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

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

Используем GitLab в качестве удобного Helm-репозитория

Reading time9 min
Views14K

GitLab – это мощный и в то же время простой инструмент для организации проектов. Как и любой крупный и самодостаточный продукт, GitLab постоянно развивается и дорабатывается. И сегодня хотелось бы обсудить новый функционал, который пока ещё находится в разработке, но уже доступен для использования. Речь идёт о поддержке размещения Helm-чартов в GitLab Package Registry. Для простоты далее я буду называть его GitLab Helm repo.

Зачастую основой для описания инфраструктуры, запускаемой в Kubernetes, являются  Helm-чарты. Поэтому при работе команды инженеров с большим количеством проектов невольно приходят мысли о стандартизации подходов работы с этими чартами. С появлением GitLab 14.1 появилась возможность настраивать хранение общих чартов для всех проектов, с которыми ведется работа.

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

Личный опыт: переезд на собственное хранилище репозиториев в GitLab CE

Reading time6 min
Views13K

На связи Саша Хрущев, технический директор IT-компании WINFOX. Рассказываю, как мы быстренько развернули свое независимое локальное хранилище репозиториев в GitLab CE, сколько времени это заняло и какие особенности вам нужно учитывать при переезде, чтобы все прошло гладко. 

Читать далее
Total votes 7: ↑5 and ↓2+4
Comments39

30 тыс. строк кода или как мы переходили с Oracle на PostgreSQL с помощью утилиты Ora2Pg 23.0

Reading time9 min
Views12K

Привет, меня зовут Андрей, я работаю ведущим разработчиком в компании СИГМА и отвечаю за решения по автоматизации расчетов технических условий. Сегодня хочу поделиться своим опытом переноса в среду PostgreSQL данных из СУБД Oracle и процедур, разработанных на PL/SQL.

Перед моей командой была поставлена срочная и нетривиальная задача перенести разрозненный функционал, ранее разработанный на базе СУБД Oracle, в единую систему управления распределительными электрическим сетями (по-простому СИГМА СУС), которая работает на основе PostgreSQL и сочетает в себе подсистемы DMS, SCADA, GIS, NIS, OMS и другие.

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

Как узнать принцессу среди 500 амурских тигров с помощью vision transformers

Reading time5 min
Views2.6K

Рассказываем, как мы, ML princesses [Napoleon IT] стали победителями кейса от Минприроды «Защита редких животных», и решили задачу по созданию сервиса, способного распознавать в дикой природе особо редкий вид хищников- амурского тигра. Десятый региональный хакатон проходил в рамках федерального проекта «Искусственный интеллект».

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

Архитектура для пользователей

Reading time23 min
Views17K

Когда говорят о выборе архитектуры IT-системы, почти всегда упускают один ма-а-аленький нюанс: мы делаем продукты для пользователей, не для себя. А пользователям совершенно неважно, какая у сервиса архитектура. Никто в отзывах не ставит звёздочки за event-driven подход или классную реализацию service mesh — разве что в редких случаях, когда речь о продуктах для разработчиков. 

Техническое совершенство — современные инструменты, предельная оптимизация, чистота кода и лаконичная, но гибкая и масштабируемая архитектура — всё это нужно нам, технарям. А как это всё связано со счастьем пользователей, как его измерять и учитывать при проектировании сервиса, разберёмся под катом.  

Читать далее
Total votes 53: ↑49 and ↓4+67
Comments19

Анатомия асинхронных фреймворков в С++ и других языках

Reading time20 min
Views42K
Привет! В этой статье я расскажу об устройстве асинхронных движков с корутинами и без них. Для начала сосредоточимся не на конкретном движке, а на том, почему во всех популярных языках программирования появились корутины и чем они так хороши. Это может быть интересно не только C++-разработчикам, но и всем, кто занимается разработкой сетевых приложений или интересуется архитектурой современных фреймворков.

Пройдёмся по разным архитектурам построения серверов — от самой простой синхронной к более интересным, посмотрим на типичную архитектуру корутинового движка, а после окунёмся в дебри C++ и взглянем на самое страшное на примере нашего фреймворка userver.

Пишем синхронный сервер


Представьте, что у вашего сервиса очень маленькая нагрузка — 100 rps, и вам дали задачу написать простой сервер, понятный каждому второму школьнику. У вас получится что-то наподобие следующего:

void naive_accept() {
  for (;;) {
    auto new_socket = accept(listener);

    std::thread thrd([socket = std::move(new_socket)] {
      auto data = socket.receive();
      process(data);
      socket.send(data);
    });

    thrd.detach();
  }
}
Читать дальше →
Total votes 56: ↑53 and ↓3+63
Comments32

RadSensor v1.0: собираем портативный персональный дозиметр из готовых компонентов

Reading time7 min
Views15K

Собираем свой первый мобильный датчик радиации из готовых электронных компонентов. Второй мануал из цикла про diy-дозиметры.

К этому материалу мы шли долгие 3 года. И продолжаем путь. В статье почти нет шуток, воды и экскурсов в историю. Только электронное мясо: BOM со ссылками на Али, код, модели корпуса, фото-инструкция и задел на будущее.

Читайте, повторяйте, опровергайте и спорьте. Только не будьте равнодушны к российскому DIY.

Приступить к сборке
Total votes 28: ↑27 and ↓1+30
Comments47

Как создать Minecraft на Python? Обзор библиотеки Ursina Engine

Reading time11 min
Views37K

Среди любителей Minecraft много энтузиастов: пока одни просто играют, другие запускают целые серверы и пишут модификации. А кто-то идет дальше и разрабатывает собственные песочницы. Последнее достаточно просто сделать на Python.

Под катом делюсь основами работы с библиотекой Ursina Engine и показываю, как с помощью нее создать мир из кубов.
Читать дальше →
Total votes 49: ↑48 and ↓1+58
Comments21

Как самому за один вечер собрать минимальную ОС Linux из исходного кода

Level of difficultyMedium
Reading time11 min
Views78K
image

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

Ещё больше не даёт покоя мне тот факт, что все ядра операционной системы Linux, которые работают на различных устройствах и серверах, собраны из исходного кода, находящегося в репозитории на сайте kernel.org.

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

Мне всегда хотелось собрать операционную систему Linux самому из исходного кода, но процесс этот всегда казался сложным и запутанным, да и многого я не понимал. Но всё-таки в определённый момент времени я накопил достаточное количество знаний, чтобы осуществить свою мечту. В этой статье я хочу рассказать вам, как собрать минимальную Linux из исходного кода и запустить её у себя на компьютере.
Читать дальше →
Total votes 83: ↑82 and ↓1+108
Comments77

Разработка hexapod с нуля (часть 12) — новое ядро передвижения

Reading time11 min
Views8.6K

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

Также в гексаподе появилась стабилизация тела относительно горизонта на базе MPU6050. Прошивка сама компенсирует углы наклона во время движения — в будущем это очень пригодится, когда я буду реализовывать адаптацию к неровностям. В этом направлении уже ведутся разработки (датчики касания на базе тензорезисторов), настало время для следующего шага.

В этой статье расскажу, насколько простая может быть математика ядра передвижения гексапода и какие красивые движения можно выполнять с помощью неё. Разработка продолжается, и я переписал около 80% математики. Это позволило выкинуть явное указание координат точек назначения во время движения — траектории теперь строятся в реальном времени. Все технические подробности в статье. Как всегда, вас ждёт фото и видео.
Читать дальше →
Total votes 54: ↑53 and ↓1+76
Comments8

Как услышать голос клиента: внедряем Data Driven подход в управление клиентским опытом

Reading time6 min
Views4.9K

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

Ещё один современный тренд — клиентский опыт становится цифровым. Трансформируются не только стандарты общения, но и технологии сбора обратной связи, аналитика данных.

По статистике только 3% клиентов участвуют в опросах и заполняют анкеты обратной связи. Альфа-Банк вывел этот показатель на космический уровень. Наши опросы регулярно проходят более 10% физических и юридических лиц. Как достичь такой конверсии и настроить сбор и обработку информации для управления клиентским опытом — расскажем в статье.

Читать дальше
Total votes 17: ↑15 and ↓2+13
Comments1

Создание yastation — консольного клиента для управления Яндекс станцией

Reading time1 min
Views9.4K

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

Читать далее
Total votes 21: ↑19 and ↓2+22
Comments15

Два сервера GAGAR>N и несколько жизненных тестов: насколько хороша новая платформа?

Reading time9 min
Views7.9K

Привет, Хабр! Сегодня мы расскажем о нашем опыте тестирования серверов GAGAR>N. Интерес к этим решениям, построенным на российской платформе сегодня достаточно высокий. И, договорившись с производителем, мы решили проверить, на что способны эти серверы, действительно ли они нормально работают с современным софтом, а главное — определить, когда имеет смысл запускать GAGAR>N в свой ЦОД. Чтобы было интереснее мы взяли на тест сразу пару штук в немного различающихся конфигурациях. Что из этого вышло — читайте под катом.

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

Ментор в беде не бросит: как онбордить новичка, чтобы он тестил в свое удовольствие

Reading time5 min
Views3.4K

Всем привет. Меня зовут Ильмир, я QA Manual Engineer в inDriver. В статье расскажу о своем опыте менторства. Я занимаюсь этим уже больше 2 лет и хочу поговорить про этапы, которые могу выделить как основные. 

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

По сути, это аккумуляция моего личного опыта, которым я решил поделиться с вами. Статья в большей степени предназначена для тестировщиков, так как в ней много QA-based-нюансов. Погнали!

Читать далее
Total votes 13: ↑12 and ↓1+12
Comments8