[Перевод] История: Redis и его создатель antirez

antirez за работой (думаем, что за работой, прим. переводчика)

antirez за работой (думаем, что за работой, прим. переводчика)

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

Всё это стало возможно благодаря инновационному дизайну, разработанному создателем Redis Сальваторе Санфилиппо: он известен под ником antirez. Он мастер системного программирования, и поэтому он предпочитает думать, оперируя понятиями структур данных — списками, хэшами и множествами. Более высокоуровневые представления данных, например, таблицы и документы, ему не очень интересны. В начале разработки Redis antirez был новичком в сфере баз данных. Но, возможно, именно нехватка опыта позволила ему привнести в эту отрасль свежие идеи.

Сегодня Redis стал мейнстримом, а его влияние заметно почти во всех веб-сервисах. Согласно опросам на Stack Overflow, Redis пять лет подряд остаётся самой любимой пользователями базой данных.

Ранние годы antirez

Сальваторе родился на Сицилии, его отец был инженером-электриком в нефтехимической компании: здесь он решал задачи промышленной автоматизации. В 80-х отец разработчика Redis начал заниматься программируемыми логическими контроллерами (ПЛК), купил плату на базе микропоцессора Z80 и увлекся его программированием.

8-битный микропроцессор Zilog Z80 (прим. переводчика)

8-битный микропроцессор Zilog Z80 (прим. переводчика)

Когда Сальваторе было шесть лет, в его жизни появился первый персональный компьютер TI99/4A.

Это было интересное устройство, не снискавшее особого коммерческого успеха. Отец написал на нем несколько программ на BASIC, и Сальваторе вскоре присоединился к нему: он научился набирать и копировать программы на BASIC ещё в первом классе.

Став старше, Антирес продолжал программировать, но в 14 лет его начали больше привлекать типичные подростковые интересы — мотоциклы и девушки, а программирование отошло на второй план. Только в 18–19 лет он заново открыл свою любовь к компьютерам, начал экспериментировать с 3D-моделированием и играми, писать простые программы. Он изучал архитектуру в Университете Палермо и применял для черчения BASIC — единственный язык программирования, который знал с детства.

SECLAB

Однажды Антирес хотел купить видеокарту, но по ошибке приобрёл вместо неё модем. Когда продавец отказался вернуть деньги, Сальваторе просто смирился с этим: «Что ж, значит, будет модем!» Это было в 90-х, Интернет как раз набирал популярность. Он вышел в онлайн, установил Linux и погрузился в мир информационной безопасности. antirez купил книгу по языку программирования C и приступил к программированию. Вскоре он обнаружил уязвимость в программе ping.

Уязвимость заключалась в следующем: обычно в Unix есть ограничение — если ты не root, то не можешь отправлять большое количество пакетов за короткий промежуток времени. Но antirez нашёл, как обойти это ограничение при помощи сигналов Unix.

В апреле 1998 года он опубликовал своё открытие в Bugtraq. Bugtraq — это рассылка, посвящённая кибербезопасности, в которой специалисты со всего мира публиковали отчёты об уязвимостях. На следующий день antirez получил междугородный звонок из Милана: его захотела нанять компания SECLAB, занимавшаяся кибербезопасностью.

Удивлённый antirez ответил: «Но я всего лишь студент-архитектор. Я ничего не знаю». Однако владелец SECLAB всё равно предложил ему приехать в Милан и поговорить. После встречи с ним руководитель компании сказал antirez: «Продолжай делать то, что делаешь, но прочитай эти десять книг, а потом снова свяжись со мной». Книги были посвящены сетям: протоколам TCP/IP, файрволлам, безопасности приложений и криптографии. Лето 1998 года antirez провёл, читая эти книги на сицилийском побережье.

В сентябре antirez вернулся в SECLAB. Он взял академический отпуск в университете и переехал в Милан. На первом совещании он не мог понять ни слова из того, что говорят коллеги, и ощущал себя абсолютным самозванцем. В то время в SECLAB работали одни из лучших хакеров Италии. Спустя два месяца antirez начал приносить пользу компании.

Сначала antirez изобрёл атаку под названием Idle Scan, которая по-прежнему остаётся одной из самых известных и изучаемых атак в Nmap. Владелец SECLAB увидел, что вклад antirez более ценен сообществу open-source, чем клиентам, поэтому рекомендовал ему сосредоточить усилия на создании опенсорсного ПО и исследовании кибератак.

Кроме того, antirez создал инструмент командной строки под названием hping, позволяющий отправлять любые пакеты TCP/IP. У него были примерно те же функции, что и ping, но он не обязан был соблюдать протокол ICMP, поэтому способен на большее: например, мог тестировать правила файрволлов, производительность сети и передачу файлов сквозь файрволлы.

После шести месяцев работы в SECLAB, Сальваторе уволился. Он начал поздно ложиться и опаздывать на работу. Бурный Милан оказался слишком манящим для 21-летнего юноши, без хорошей самодисциплины в городе было легко потеряться. Несмотря на небольшой трудовой стаж, antirez успел написать много программ на C и поучаствовать во множестве проектов. Это был поворотный момент в его карьере.

Открытие собственной компании Merzia

В 2000 году Сальваторе устроился в Linuxcare Italia — компанию, занимавшуюся опенсорсным ПО. Он мог работать удалённо из дома, и всё шло отлично, пока не лопнул пузырь доткомов. В один прекрасный день компания разослала своим сотрудникам письмо, в котором говорилось примерно следующее: «Мы сворачиваем деятельность в 18 странах и через месяц вы все будете уволены. Хорошего вечера».

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

В 2005 году зародился Web 2.0, и он со своим другом Фабио Петрола основал компанию Merzia: они хотели приложения Web 2.0 для итальянского рынка. Крупнейшая телекоммуникационная компания Telecom Italia заметила их работу и предложила сотрудничество. В конечном итоге Telecom Italia приобрела два сайта, разработанных Merzia: сайт социальных новостей OKNOtizie и схожий с Delicious веб-сайт для работы с закладками Segnalo.

Рождение LLOOGG и Redis

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

Уникальность LLOOGG заключалась в возможности отслеживания администраторами веб-сайтов активности пользователей в реальном времени. В Google Analytics эта функция появилась только в 2011 году, а LLOOGG был выпущен в 2007 году: продукт опередил своё время.

Поначалу antirez пытался использовать в работе MySQL, но столкнулся с проблемами производительности. При каждом чтении или записи данных MySQL приходилось обращаться к жесткому диску. С ростом объёмов данных узким местом этих операций становилась скорость чтения/записи жёсткого диска, из-за чего работа веб-сайта приостанавливалась. Сегодня опытный бэкенд-разработчик сказал бы вам, что не стоит использовать MySQL для приложений, работающих в реальном времени, но в 2007 году это было не так очевидно.

antirez считал, что использование памяти может решить эту проблему, поэтому он написал прототип памяти базы данных на языке программирования Tcl. Эта база данных LMDB (LLOOGG Memory Database) стала предшественницей Redis. Исходный код был длиной всего чуть больше 300 строк, но этого было достаточно, чтобы представить, каким в будущем станет Redis.

Во-первых, прототип уже поддерживал основные команды типа SET, GET, LPUSH, RPUSH и так далее. Поддерживались два типа данных: строки и списки. Более того, протокол связи между сервером и клиентом был таким же, как и в Redis v1. Он был спроектирован с расчётом на человекочитаемость и высокую скорость парсинга.

Стандартный номер порта Redis (6379) тоже уже был в исходном коде на Tcl. У него интересная предыстория. На телефонной клавиатуре сочетание 6379 соответствует буквам MERZ. Источником вдохновения для этого сочетания послужила итальянская модель Алессия Мерц. Забавные комментарии Алессии на телевидении часто развлекали antirez и его друзей. Друзья часто говорили о чём-то глупом или бессмысленном «это просто мерц!» За десять лет словечко «merz» постепенно распространилось среди их друзей и стало означать нечто кажущееся глупым, но имеющее техническую ценность. Вероятно, отсюда же взялось и название их компании Merzia.

В первых строках исходного кода на Tcl antirez импортировал пакет, но так и не использовал его, оставив только комментарий # For [fork]. Он хотел использовать системный вызов fork () для сохранения данных — механизма для записи данных обратно на жёсткий диск. Так Redis RDB работает и по сей день: fork () создаёт дочерний процесс, записывающий данные на диск, в то время как родительский процесс продолжает выполнение своих исходных задач. В коде на Tcl не используется fork (), antirez только оставил комментарий. Именно тогда он понял, что упёрся в потолок возможностей Tcl, и что настало время переписать код на C.

В феврале 2009 года друг antirez Дэвид Уэлтон помог ему показать Redis миру на Hacker News. Реакция была довольно вялой: кроме Дэвида, пост прокомментировало лишь четыре человека. Трое из них сказали, что похожие проекты уже существуют, и только один ответил положительно и предложил помощь. Этим человеком был Эзра Зыгмунтович (к сожалению, ушедший от нас в 2014 году), в то время уже довольно известный в сообществе Ruby on Rails, сооснователь EngineYard. Эзра написал первую версию Ruby-клиента для Redis (redis-rb), который и сейчас остаётся основным Ruby-клиентом. И redis-rb сыграл ключевую роль в популяризации Redis в сообществе Ruby.

За пять лет Redis обработал для LLOOGG два миллиарда просмотров страниц. К моменту, когда в 2014 году сайт был закрыт, Redis обрабатывал 350–400 команд в секунду. И всё это работало на виртуальной машине, которая стоила всего $150 в месяц.

Redis начинают пользоваться GitHub, Instagram и Twitter

Несмотря на слабую реакцию на Hacker News, antirez продолжил разрабатывать Redis в свободное от работы время. Так продолжалось около года, и у базы данных постепенно появлялись новые пользователи.

В то время у antirez было еще два опенсорсных проекта hping и интерпретатор Jim, но Redis был главным, достойным долговременных вложений. Потеряв интерес к кибербезопасности, он перестал разрабатывать hping. Разочаровавшись в Tcl и перейдя на Ruby, он прекратил работу над интерпретатором Jim. Но он знал, что не может жить без баз данных, поэтому считал, что Redis ждёт успех, и продолжил его разработку. Он знал, что даже если не преуспеет, то будет использовать ее еще долгие годы.

В 2009 году (тот же год, когда был опубликован Redis), CEO стартапа GitHub Крис Ванстрат использовал Redis для создания системы очередей задач Resque, предназначенной для выполнения фоновых задач GitHub. В то время Resque была самой популярной системой очередей задач. Её преемница Sidekiq, появившаяся в 2012 году и тоже созданная на основе Redis, сегодня является самым популярным выбором разработчиков приложений на Rails.

Ещё один стартап, Instagram, начал общаться с antirez в 2010 году. В письмах от него один изсооснователей компании Майк Кригер рассуждал о том, как использовать Redis для создания Instagram. Развитие и Instagram, и Redis тогда только начиналось, а Майк и antirez не знали друг друга. В свои первые годы Instagram был полностью основан на Redis, то есть без Redis мог бы и не существовать Instagram, или, по крайней мере, его выход был бы отложен.

В 2010 в ряды пользователей Redis вступил и Twitter. Twitter несколько раз приглашал antirez в свой главный офис, чтобы поработать над новым решением для страницы timeline на основе Redis. Любопытно, что вскоре после запуска Redis (в марте 2009 года), antirez создал клон Twitter под названием Retwis в качестве демонстрации приложения на Redis.

VMware и спонсирование Redis Labs

Больше года Redis был для antirez просто хобби-проектом. Он совершенствовал его и выпускал новые версии не получая за это денег, пока однажды ему не позвонили из VMware.

«Мы хотим финансово поддержать Redis. У нас есть офис в Италии и мы бы хотели нанять вас. Будете нашим сотрудником?». Когда antirez спросил, что от него потребуется, его уверили: «Нет-нет, вы просто будете продолжать то, чем занимаетесь, а мы будем за это платить. Все, что вам нужно сделать, — это упомянуть на своем сайте, что Redis спонсируется VMware».

Так выглядел redis.io в ноябре 2010 года

Так выглядел redis.io в ноябре 2010 года

Так у Redis появился первый крупный спонсор. antirez работал над Redis в VMware в течение нескольких лет. Когда от VMware отделилась Pivotal, он перешёл в Pivotal.

Redis привлекал всё больше пользователей, и появилась предлагающих консалтинговые услуги по Redis. Среди них была и компания Redis Labs из Тель-Авива. Изначально называвшаяся Garantia Data она начинала как поставщик баз данных, но затем переименовалась в Redis Labs и связала свой бизнес с Redis.

У Pivotal и Redis Labs был общий инвестор, который однажды сказал antirez: «Что вы делаете в VMware? Переходите в Redis Labs, ведь там находится центр поддержки вашего продукта». antirez перешёл в Redis Labs, где работает и по сей день. В августе 2021 года Redis Labs официально сменила название на Redis и превратила веб-сайт проекта redis.io в веб-сайт компании.

Десять лет спустя

Спустя десять лет после рождения Redis, в январе 2020 года, antirez стоял на сцене на конференции Redis Day и рассказывал на своём фирменном английском с итальянским акцентом о новых возможностях Redis 6.0. В Twitter можно найти несколько фотографий посетителей конференции и antirez.

Давайте проанализируем, как развивался Redis в течение этих десяти лет:

Дата

Версия

Новые функции

Февраль 2009

Строки, списки

Сентябрь 2009

1.0

Наборы, сортированные наборы, сохраняемость (RDB, AOF), …

Сентябрь 2010

2.0

Хэши, pub/sub, битмапы, скрипты Lua, HyperLogLog, …

Апрель 2015

3.0

Кластеры, геопространственные индексы

Июль 2017

4.0

Модули: RediSearch, RedisJSON, RedisGraph, …

Октябрь 2018

5.0

Потоки

Январь 2020

6.0

SSL, ACL, …

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

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

Разумеется, antirez понимал, что такой подход непрактичен. Когда твоё ПО начинают использовать в больших масштабах, приходится идти на кучу компромиссов, из-за которых проект станет менее идеальным, но более полезным для людей. Поддерживать Redis становилось всё сложнее, ему приходилось разрываться между искусством и утилитарностью. В результате этой борьбы Антирес чувствовал себя измотанным и подавленным, он стремился вернуть свою идентичность как творца и заниматься исключительно искусством в форме программирвоания.

Покинув проект Redis, antirez написал научно-фантастическую книгу Wohpe об искусственном интеллекте, опубликованную в июле 2022 года. В апреле того же года команда Redis выпустила версию 7.0. Она стала первой основной версией после ухода antirez из проекта.

Источники

  1. #storiedidevelopers — Salvatore Sanfilippo aka Antirez — YouTube

  2. L«open source è un fiume in piena | Salvatore Sanfilippo | TEDxCapoPeloro — YouTube

  3. Curriculum Vitae — блог antirez

  4. Open Source Builders: How Redis Upended the Database Market — The News Stack

  5. The Evolution of Redis — YouTube

  6. Bugtraq: pingflood.c

  7. TCP Idle Scan (-sI) | Nmap Network Scanning

  8. 深入浅出Redis — 知乎

  9. LMDB — первая версия Redis, написанная на Tcl

  10. LMDB — первая версия Redis, написанная на Tcl | Hacker News

  11. Redis | Hacker News

  12. Redis Turns 10 — How it started with a single post on Hacker News

  13. Redis as an LRU cache — блог antirez

  14. One year of Redis — блог antirez

  15. Introducing Resque | The GitHub Blog

  16. Storing hundreds of millions of simple key-value pairs in Redis | Instagram Engineering

  17. LLOOGG has shut down | Sir Authur«s Den

  18. The end of the Redis adventure —

  19. WOHPE di Salvatore Sanfilippo aka «antirez»: e se una #AI fosse la nostra ultima speranza? — YouTube

Habrahabr.ru прочитано 8054 раза