Привет! На связи Миша Меркушин. Я тимлид команды Ruby Platform, ответственной за разработку внутренних библиотек и улучшение архитектуры микросервисов на Ruby в СберМаркете. Эта статья про архитектурный паттерн Outbox и инструмент, который мы создали и итерационно развивали внутри команды и лишь недавно «выпустили» его в мир. Он решает проблему обеспечения надежной и согласованной отправки сообщений из приложения, гарантируя, что сообщение будет отправлено после успешного завершения транзакции базы данных.
Веб-разработчик Злых марсиан: бэкенд и всё вокруг
Человечество против искусственного интеллекта: может ли развитие нейросетей привести к катастрофе
История про «восстание машин» давно знакома всем любителям научной фантастики, но после взрывного роста возможностей нейросетевых языковых моделей (вроде ChatGPT) об этом риске заговорили и вполне серьезные исследователи. В этой статье мы попробуем разобраться – есть ли основания у таких опасений, или это всего лишь бред воспаленной кукухи?
Как работает ChatGPT: объясняем на простом русском эволюцию языковых моделей с T9 до чуда
В последнее время нам почти каждый день рассказывают в новостях, какие очередные вершины покорили языковые нейросетки, и почему они уже через месяц совершенно точно оставят лично вас без работы. При этом мало кто понимает — а как вообще нейросети вроде ChatGPT работают внутри? Так вот, устраивайтесь поудобнее: в этой статье мы наконец объясним всё так, чтобы понял даже шестилетний гуманитарий!
Под капотом Ruby. GVL
Давным давно уже уже была написана статья о том что такое GVL (или GIL, кому как привычнее) и как он работает, однако с того времени некоторые вещи поменялись (к примеру, , а так же в Ruby 3.0 завезли Ractor'ы - новую абстракцию для реальной параллельной работы тредов. Мне стало интересно узнать что поменялось в планировщике ruby для реализации множества GVL. В этой статье я попытаюсь понять алгоритм, по которому GVL передается от одного треда к другому, как блокирующее IO позволяет продолжить работать другим тредам, а так же выяснить до сих пор ли операция добавления элемента в массив является атомарной операцией
Киберспорт для детей как новая улица — и как средство социализации
Хочу рассказать про детский киберспорт, потому что это настолько крышесносная тема в плане предрассудков, что можно изучать человеческую природу. Направление киберспорта мы стартовали дважды: один раз нормально, и один раз во время карантина, раз уж освободилось время и люди вокруг вдруг начали понимать, что из игр можно и нужно тащить пользу.
И если футбол или шахматы родители считают однозначно полезными, то с играми ситуация неоднозначная. Руководитель направления Настя начала с интервью. Вообще, Настя умеет общаться с родителями, потому что некогда запустила подписку на наборы развивающих штук «Аистбокс» (каждый месяц приезжает коробка для ребёнка).
Дальше пошёл мягкий психодел. Родители же рассказывали как дети загружены, какое у них сумасшедшее расписание.
Как мне кажется, родитель хочет воспитать нового себя, только лучше. И каждый час простоя ребёнка воспринимает как недополученные знания и навыки. Ну, знаете, пока вы спите, враг качается. Так вот, в среднем у детей опрошенных есть около часа (суммарно) свободного времени в день. Этот час ребёнок проводит в телефоне, то есть отдыхает. Родители — как это ни странно — хотят, чтобы он этот час потратил на английский, бил других детей на секции бокса или ещё как-то утилизировал.
В этот момент уже стало понятно, что если мы превратим компьютерные игры в нечто полезное, то за это будут платить. Забегая вперёд, могу ещё добавить, что это сейчас один из самых эффективных способов социализации, что ускорило прогресс.
А пока давайте чуточку похоливарим!
One Tool to Analyze Them All
Так что если в будущем вам встретится план, похожий на результат обычного
EXPLAIN
, но с некоторыми странными узлами — вы знаете, куда идти.EXPLAIN <-> SQL
В развитие темы сопоставления узлов плана и запроса добавлена возможность быстрого просмотра и переключения между ними:
Как Амплифер использует Logux — инструмент для связи клиента и сервера
Меня зовут Виталий Ризо, я старший фронтенд-разработчик в «Амплифере». Поделюсь, как мы применяем Logux в веб-приложении: организуем обмен данными в реальном времени, уведомления об ошибках без перезагрузки страницы, общение между вкладками браузера и интеграцию с Redux.
Чему меня, как разработчика, научили аварии в космосе
Оригинал: статья «What I learned as a developer from accidents in space», Андрея Ситника, из блога Evil Martians «Martian Chronicles»
Андрей Ситник, автор PostCSS и Автопрефиксера, сделал подборку историй, связанных с освоением космоса Советским Союзом. Вы узнаете, какие уроки из них извлёк Андрей, чтобы вырасти как разработчик и участник опенсорс-движения. Неудачная стыковка, драматический вход в атмосферу и уникальный переход вдоль поручня между космическими кораблями — какое отношение всё это имеет к современной веб-разработке? Обо все этом читайте в посте!
Исследования космоса интересовали меня, сколько я себя помню. Люди, знавшие меня лично, слышали рассказов о космосе больше, чем им хотелось бы. До того, как присоединиться к Evil Martians, я администрировал русскоязычную версию Википедии, и одним из моих любимых увлечений была редактура связанных с космосом статей. Я ездил наблюдать за запусками на Байконуре и мысе Канаверал, и чем больше я узнавал об усилиях по покорению космоса, тем сильнее эти знания влияли на меня как на разработчика.
Хотя писать программы не так сложно, как строить ракеты (по большей части), но всё же мы, программные инженеры, часто работаем в больших командах, создающих сложные системы. И как исследователи космоса, иногда мы проигрываем борьбу со сложностью.
SQL HowTo: собираем «цепочки» с помощью window functions
Это может быть как условие от данных самой записи, так и сложное выражение относительно одной или нескольких предыдущих записей — например, длина интервала между близкими временными отсчетами.
Традиционные решения предусматривают разные варианты «self join», когда выборка соединяется с собой же, либо использование некоторых фактов «за пределами данных» — например, что записи должны иметь строго определенный шаг (N+1, «за каждый день», ...).
Первый вариант зачастую приводит к квадратичной сложности алгоритма от количества записей, что недопустимо на больших выборках, а второй может легко «развалиться», если каких-то отсчетов в исходных данных вдруг не окажется.
Но эту задачу нам помогут эффективно решить оконные функции в PostgreSQL.
Вышла Postgres Pro Standard 12.1
Иногда бывают исключения, когда в Postgres Pro Standard по просьбам юзеров и для их удовлетворения включаются и менее тривиальные фичи, которым по-хорошему место только в Postgres Pro Enterprise. В частности, это PTRACK, о нём ниже.
Не все, но изрядная доля дополнительных расширений и утилит, входящих в Standard, разработана в Postgres Professional. Все патчи Postgres Pro придуманы и реализованы нашими силами. Начнем с улучшений, потребовавших вмешательства в ядро СУБД.
Двойная бухгалтерская запись в реляционной БД
От переводчика: в ходе моей работы в нигерийском финтехе пришлось мне создавать с нуля одну платежную систему. Я тогда ничего толком не понимал в вопросах бухгалтерии, в том как именно лучше хранить платежи и балансы. Но было подозрение, что примитивный вариант с одной циферкой баланса в аккаунте пользователя слишком прост, чтобы быть правильным.
Разобраться и избежать кучи граблей в этом деле мне помогла данная статья. При этом информации по теме "как сделать свою платежную систему" довольно мало, а в учебниках по бухучету программисту сходу разобраться не так просто (и очень нудно). Надеюсь, этот материал окажется полезным тем, кто только собирается что-то такое делать.
Сразу извиняюсь за возможные неточности в русскоязычных финансовых терминах — я все-таки программист, а не бухгалтер, и с русской терминологией в этой сфере недостаточно знаком.
Введение
Многие компьютерные системы, использующие реляционные БД, хранят в них какую-то финансовую информацию о балансах и транзакциях. При этом при проектировании и разработке такой БД часто встает вопрос, а как именно хранить эту информацию. Обычно выбор стоит между дешевой "простой записью" и более сложной "двойной записью".
Лука Пачоли, автор самой старой (15 век) дошедшей до нас книги с описанием принципов двойной записи
В системе с "простой записью" числовые значения записываются только один раз. В системе с "двойной записью" каждое значение записывается дважды, как кредит (положительное значение) и как дебет (отрицательное значение). При этом есть набор правил, определяющих связь между этими значениями. Эти правила вам легко опишет любой опытный бухгалтер, хотя он может и не представлять, как именно они могут быть представлены в реляционной БД.
Основные правила таковы:
Что внутри шаурмы: микросервисы, распределенные системы и Кафка. Делимся материалами со встречи Backend United #5
Привет! Этот пост-отчёт с митапа Backend United, нашей серии тематических встреч для разрабочиков серверной части. Пятая встреча получила название «Шаурма», и здесь мы говорили о микросервисах: о способах синхронного и асинхронного взаимодействия между ними, организации потоков данных и роли Кафки в микросервисной архитектуре.
Заходите под кат, если вам интересны эти темы. Внутри поста — все материалы встречи: видеозаписи докладов, презентации спикеров, отзывы гостей митапа и ссылки на фотоотчёт.
О чем молчит EXPLAIN, и как его разговорить
Традиционный набор причин:
- неэффективный алгоритм
когда вы решили сделать JOIN нескольких CTE по паре десятков тысяч записей - неактуальная статистика
если фактическое распределение данных в таблице уже сильно отличается от собранной ANALYZE'ом в последний раз - «затык» по ресурсам
и уже не хватает выделенных вычислительных мощностей CPU, постоянно прокачиваются гигабайты памяти или диск не успевает за всеми «хотелками» БД - блокировки от конкурирующих процессов
И если блокировки достаточно сложны в поимке и анализе, то для всего остального нам достаточно плана запроса, который можно получить с помощью оператора EXPLAIN (лучше, конечно, сразу EXPLAIN (ANALYZE, BUFFERS) ...) или модуля auto_explain.
Но, как сказано в той же документации,
«Понимание плана — это искусство, и чтобы овладеть им, нужен определённый опыт, …»Но можно обойтись и без него, если воспользоваться подходящим инструментом!
Механизм Heap only tuples в PostgreSQL
Postgresql отличается от других СУБД тем, что в ней при операции UPDATE, изменений в существующей строке не происходит, а вместо этого делается копия строки, которая отличается от оригинала значениями колонок, затронутых апдейтом — в оригинале они старые, а в копии — изменённые. Этот подход с одной стороны позволяет избежать блокировок при одновременном выполнении запросов на чтение и запись а с другой стороны порождает необходимость постоянно вычищать старые версии строк, которые уже никто и никогда не прочитает. В связи с этой архитектурной фичей нередко возникает вопрос, что будет, если нужно хранить в БД что-то вроде времени последнего доступа к данным, которые в остальном не меняются. Не отзовётся ли это на производительности? Не приведёт ли к постоянной перестройке индексов?
Если коротко, то да, Copy On Write никуда не денется, но индексы во многих случаях можно будет не перестраивать, благодаря HOT.
Файл дескриптор в Linux с примерами
Конечно же я ответил, что посмотрю, чем занято это место и если возможно, то почищу место.
Тогда интервьюер спросил, а что если на разделе нет свободного места, но и файлов, которые бы занимали все место, ты тоже не видишь?
На это я сказал, что всегда можно посмотреть открытые файл дескрипторы, например командой lsof и понять какое приложение заняло все доступное место, а дальше можно действовать по обстоятельствам, в зависимости от того, нужны ли данные.
Интервьюер прервал меня на последнем слове, дополнив свой вопрос: «Предположим, что данные нам не нужны, это просто дебаг лог, но приложение не работает из-за того, что не может записать дебаг»?
«окей», — ответил я, «мы можем выключить дебаг в конфиге приложения и перезапустить его».
Интервьюер возразил: «Нет, приложение мы перезапустить не можем, у нас в памяти все еще хранятся важные данные, а к самому сервису подключены важные клиенты, которых мы не можем заставлять переподключаться заново».
«ну хорошо», сказал я, «если мы не можем перезапускать приложение и данные нам не важны, то мы можем просто очистить этот открытый файл через файл дескриптор, даже если мы его не видим в команде ls на файловой системе».
Интервьюер остался доволен, а я нет.
Тогда я подумал, почему человек, проверяющий мои знания, не копает глубже? А что, если данные все-таки важны? Что если мы не можем перезапускать процесс, и при этом этот процесс пишет на файловую систему в раздел, на котором нет свободного места? Что если мы не можем потерять не только уже записанные данные, но и те данные, что этот процесс пишет или пытается записать?
Город без пробок
Глава вторая.
(ссылка на первую главу)
Искусство проектирования дорожных сетей
Транспортные проблемы города глазами человека из «Computer Science»
Если бы мне порекомендовали статью с названием «Искусство проектирования дорожных сетей», я бы тот час поинтересовался, как много дорожных сетей было построено с участием ее автора. Должен признаться, моя профессиональная деятельность лежала далеко от дорожного строительства и была последнее время связанна с проектированием микропроцессоров, где я, в том числе, занимался ресурсоемкостью коммутации данных. Так получилось, что мой стол тогда стоял как раз напротив панорамного окна, открывавшего прекрасный вид на длинный участок Волгоградского шоссе и части ТТК с их нескончаемыми пробками с утра до вечера, от горизонта до горизонта. И тут, в один из дней меня вдруг осенило:«Черт возьми, ведь сложности процесса коммутации данных, с которыми я борюсь на кристалле, точь в точь должны быть похожи на те трудности, с которыми сталкивается поток автомобилей внутри паутины уличных дорог».
Вероятно, именно взгляд со стороны и применение нетрадиционных для исследуемой области методов дали мне шанс разобраться в причине возникновения пробок и выработать рекомендации, как преодолеть их проблему на практике.
Искусственный интеллект Microsoft освоил маджонг
Ученые из Microsoft Research (MSR) Азия создали систему на основе искусственного интеллекта (ИИ), которая обучилась тонкостям игры в маджонг. Маджонг считается одной из наиболее сложных игр с точки зрения освоения алгоритмами, т.к. в ней присутствует случайный фактор.
Super Phoenix (Suphx) стала первой ИИ-системой, которая получила 10-й дан (разряд) на Tenhou, онлайн-платформе для соревнований по риичи-маджонг, насчитывающей более 300 000 участников со всего мира. Такой квалификацией обладают всего 180 человек. Это максимальный на данный момент разряд для алгоритма, на более высоком уровне играют только несколько признанных профессионалов.
Автомасштабирование и управление ресурсами в Kubernetes (обзор и видео доклада)
По традиции рады представить видео с докладом (44 минуты, гораздо информативнее статьи) и основную выжимку в текстовом виде. Поехали!
HBO, cпасибо что напомнил… «Чернобыльская аптечка» беларуского фармацевта
Что бы ни дарили — не станем верить
Егор Летов «Как листовка»
Думаю не стоит лишний раз говорить о нашумевшем сериале Чернобыль и эффективности такого «сериального» воздействия на массы. Особенно на массы, проживающие на территориях, показанных в фильме. Выход каждой новой серии сопровождается всплеском публикаций в FB. В каждой из которых горечь, страх, боль. Что в такой ситуации я могу сделать ("
Ну и пишу, пишу, потому что стали забывать… Пугающе быстро стали забывать. Сначала в аптеках исчез йодид калия (я уж не говорю про описываемые в статье антидоты), потом так же неотвратимо исчезли льготы у ликвидаторов, знания у людей и т.д. и т.п.
В общем, спасибо, сценаристы HBO, за то, что всколыхнули Память. Мой посильный вклад — под катом. Рейтинг доступных (и не очень) антидотов, способных сработать при радиационном выбросе. В закладки — класть строго ВСЕМ! И прочитал сам — перекинь другу.
Uibook — инструмент для визуального тестирования React-компонентов с медиа-запросами
Всем привет! Меня зовут Виталий Ризо, я фронтенд-разработчик в «Амплифере». Мы сделали Uibook — простой инструмент для визуального тестирования React-компонентов с реальными медиа-запросами. Расскажу, как он работает и чем может быть полезен вам.
Информация
- В рейтинге
- Не участвует
- Откуда
- Королев, Москва и Московская обл., Россия
- Дата рождения
- Зарегистрирован
- Активность