Хабрахабр

Random.org — история длиной в 20 лет

Уже совсем скоро в рамках проекта «Сервер в облаках» у нас полетит воздушный шар, чьи координаты места приземления — настоящий генератор истинно случайных чисел, у которого источником энтропии является движение воздушных масс. На момент написания этого поста более 100 хабражителей принимают участие в этой интеллектуальной гонке – угадать/рассчитать место приземления сервера и выиграть сертификат на участие в регате. Присоединяйся!

К тому же сайт скоро будет справлять 20-летие. А пока идет гонка и подготовка к полету, мы вспомнили, что у Random.org, одного из самых популярных онлайн-генераторов, предоставляющего истинно случайные числа, источником энтропии тоже является атмосфера, точнее, атмосферные шумы. И история развития Random.org оказалась настолько феерична, и в духе нашего проекта, что в честь «энтропийного совпадения» и скорого юбилея мы решили перевести её для вас.
Сайт Random.org был запущен в октябре 1998 Мадсом Хааром (Mads Haahr), профессором информатики в ирландском Тринити Колледже, а в октябре 2010 из частного проекта превратился в закрытое акционерное общество.

Задача Random.org — генерировать и предоставлять всем желающим истинно случайные числа на основе атмосферных шумов, то есть шумов в радиоэфире, возникающих из-за естественных атмосферных процессов. На главной странице можно сгенерировать случайное число в диапазоне от 1 до 1 000 000 000.

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

История Random.org

▍Глава 0: Как это всё началось… (1997)

История Random.org началась летом 1997-го, когда я работал на стартап, разрабатывавший движок для азартных онлайн-игр. Это был маленький проект: четыре человека делали прототип в надежде поднять денег для продолжения разработки. Движок имел базовую функциональность и мог дополняться модулями различных игр. Мы реализовали прототип самого движка и нескольких игровых модулей, которые позволяли в браузере играть в лотерею, блэкджек и игровые автоматы.

Почитав о теории случайности, мы решили, что радио, которое фиксирует атмосферные шумы, будет дешёвым и элегантным способом получения энтропии для генерирования случайных чисел. Мы быстро поняли, что серьёзному движку нужен генератор истинно случайных чисел, который поддерживал бы игры, в которых участвуют настоящие деньги (если хотите знать, что может произойти, если не использовать в игровой системе генератор истинно случайных чисел, почитайте статью о ТВ-шоу 1980-х «Press Your Luck»). К тому же генератор будет стоять в нашем офисе, то есть у радио есть преимущество перед системами на основе счётчика Гейгера (которые тоже довольно популярны), поскольку радио не нуждается в источнике радиации.

Его покупка сама по себе была забавной историей. Первую версию нашего генератора мы собрали на основе ресивера за $10 из магазина Radio Shack. Поэтому придя в магазин мы объяснили продавцу, что нам нужно самое дешёвое радио, потому что нашему компьютеру нужно слышать статические шумы. Мы знали, что многие радиоприёмники, даже дешёвые, содержат фильтры помех и играют только в том случае, если вы точно настроились на передачу какой-либо радиостанции. Мы также настояли, чтобы продавец позволил нам протестировать радио в магазине, чтобы мы убедились в качестве шумов и отсутствии фильтра помех. Мужик явно не был уверен в здравости нашего рассудка. Думаю, выглядели мы весьма безумно. Удивительно, но он позволил нам это сделать (уважуха Radio Shack, ведь это была распродажа за $10), и когда мы (кажется, нас было трое) услышали шумы, то радостно вскочили и быстро расплатились.

Он был написан на С/С++, крутился под Windows NT и использовал стандартную звуковую карту, уже не вспомню производителя. За несколько дней мы написали первую версию генератора. Однако этого было достаточно для перемешивания карточных колод для блэкджека, выбора лотерейных номеров и вращения колёс в игровых автоматах. Хотя генератор был полностью функциональным, но получился несколько корявым в том смысле, что генерировал просто случайные биты, а не красивые настраиваемые интервалы, которые вы сегодня видите на Random.org.

Прототип и архитектура были действительно хороши, но в конце концов компания решила прекратить разработку азартных игр, так что мы успели сделать не слишком много. А что случилось с нашим движком? На дворе был 1997-й, и мы считали, что через год-два рынок азартных онлайн-игр взлетит. Думаю, мы несколько опередили время. Random.org — единственная сохранившаяся часть того проекта. Но в реальности это заняло гораздо больше времени. Мои друзья отказались от азартных игр и основали две успешные компании: Pentia и Sitecore.

▍Глава 1: Дни Sun (1998-2001)

В сентябре 1998-го я занялся кандидатской диссертацией по информатике в Тринити Колледже в Дублине. Тема диссертации относилась к мобильным вычислениям и очень мало имела общего со случайными числами. Но поскольку в прошлом году я сделал большую часть работы по созданию генератора и мне действительно нравилась идея использования атмосферных шумов для генерирования случайных чисел, я решил не забрасывать проект. Рассказал о нём Винни Кахилу (Vinny Cahill), руководителю моей исследовательской группы (Distributed Systems Group), и предложил разместить систему в одном из помещений. Винни с энтузиазмом поддержал предложение, и в течение пары месяцев я приспособил старую Sun SPARCstation, стоявшую в лаборатории, переписал генератор под ОС Solaris и сделал первую версию сайта Random.org. Он начал работать в октябре 1998-го.

Зачем нужен был ещё один генератор? В то время ещё не было общедоступных сервисов генерирования случайных чисел на основе атмосферных шумов, но уже существовали HotBits и Lavarand (оригинальная версия Silicon Graphics). Вторая причина — имевшиеся сервисы служили, в основном, для обучения и развлечения. Главная причина — мне было интересно его создавать. С тех пор люди использовали Random.org для целей, о которых я и помыслить не мог, и сервис много раз обновлялся, чтобы его можно было применять для куда более серьёзных задач, чем я предполагал. Я хотел, чтобы Random.org тоже использовали для обучения и развлечения, но в то же время хотел превратить его в сервис, полезный для решения определённых (не критических) задач, для которых требуются случайные числа.

Random.org v1 (с бутылками виски)

Радио — транзисторный приёмник Hitachi, который достался мне бесплатно, потому что встроенный кассетник был сломан. На этой фотографии изображена первая версия оборудования Random.org, так всё выглядело с 1998-го по 2001-й (правда, снято это в 2005-м). Поскольку вся система располагалась на полке в нашей аспирантской лаборатории и я опасался, как бы кто-нибудь не сломал это всё случайно или намеренно, то наклеил на радио бумажку с просьбой не трогать руками.

Не представляю, насколько быстро она работала, но по впечатлениям не быстро, даже совсем. Слева от радио видна задняя панель Sun SPARCstation, которую я приспособил для своих нужд. К тому же у Sun SPARCstation была встроенная звуковая карта, поэтому её легко было подключить к радио. Зато у неё было 96 Мб памяти, много по тем временам, так что проблем с запуском приложений не было. На левом краю полки вы видите 500-мегабайтный (да, мегабайтный) SCSI-диск, на котором хранились все фалы. Машина работал под управлением Solaris, невероятно стабильной ОС, которая идеально подходила для моего сервиса. Позади радио выглядывает ИБП, который я добавил позднее.

В нашей исследовательской группе была традиция, когда твою работу принимают для выступления на конференции или публикации в журнале, ты покупаешь бутылку ирландского виски (или другого приятного напитка) и отмечаешь с коллегами. Что насчёт бутылок? Как видите, на каждой бутылке наклейка, поясняющая, в честь какой конференции или журнала она куплена и кто счастливчик.

▍Глава 2: Генератор с двумя радио (2001-2007)

Осенью 2000-го SPARCstation начала проявлять признаки старения, и я начал подыскивать новую машину. Кроме того, я взял старшекурсника Антонио Араузо Азофра (Antonio Arauzo Azofra), чтобы он кое-что сделал для моего проекта. Задачей студента было реализовать новый статистический модуль, достаточно стабильный, чтобы его можно было развернуть на Random.org. Антонио прекрасно справился с задачей и очень помог с конфигурированием «нового» сервера Siemens Scenic 300 PC, который я раздобыл. Также Антонио убедил меня перейти на Debian GNU/Linux (я склонялся к Red Hat), установил железо и ПО, и даже помогал сопровождать систему после того, как закончил обучение в Дублине и вернулся в Испанию, чтобы работать над кандидатской диссертацией.

Сердцем компьютера был Pentium III, работавший с частотой до 500 МГц. С лета 2001-го Random.org работал на компьютере Siemens с двумя радио. Компьютер был оснащён тремя звуковыми картами Cirrus Logic Crystal CS4281 и двумя FM-тюнерами (один Sony, второй Tensai), которые я купил подержанными примерно за €40 в Blackberry Market в Dublin. Изначально в машине стояло 128 Мб памяти, но позднее я нарастил до 384 Мб. Siemens стоит на двух других компьютерах, а на нём стоят два радио. На фотографии ниже показано, как всё выглядело. Хотя система находилась уже не в лаборатории, в моём личном офисе, меня всё же волновали посетители (например, уборщики), которые могли случайно сбить настройки радио и нарушить работу сервиса, поэтому я написал на бумажке просьбу быть осторожнее.

Random.org v2

0 (‘Woody’) (это был мой первый опыт работы с Debian, и я всё ещё поклонник —  уважуха команде Debian за превосходную работу). В качестве ОС я использовал обалденно стабильную Debian GNU/Linux 3. То есть с каждого радио снималось 1500 случайных битов в секунду, всего 3000 битов в секунду. Генератор был сконфигурирован так, чтобы с частотой сэмплирования 8 КГц брать шум с радиотюнеров в виде аудиопотока из 8-битных сэмплов в моно.

▍Глава 3: Система с тремя радио (2007-2009)

С начала 2007-го по конец 2009-го Random.org использовал две разные аппаратные конфигурации. Большую часть 2007-го работал Dell Dimension 4550, который мне подарили Рене Мейер (René Meier) и Джим Доулинг (Jim Dowling) из исследовательского проекта Digital Business Ecosystem. В компьютере стоял Pentium 4 с частотой 2,53 ГГц и 1 Гб памяти. Позднее я установил три звуковые карты C-Media Electronics CM8738, а в качестве радио стояли те же два FM-тюнера, но к ним добавил Akai, купленный за €12 в магазине подержанных товаров в Копенгагене.

Хотя процессор был слабее, чем в Dell, eServer легко справлялся с нагрузкой. В конце 2007-го я заменил Dell Dimension на IBM eServer с 1280 Мб памяти и Pentium III 1,266 ГГц. Звуковые карты и радио остались те же. При этом он был настоящим сервером со SCSI-дисками, хорошо подходившими для моих задач.

В качестве ОС применялась Debian GNU/Linux, но уже версий 3. Эта аппаратная система с каждого радио генерировала около 3000 битов в секунду. 0 (‘Etch’). 1 (‘Sarge’) и 4. Очень рекомендую. Они были столь же стабильны, как предшественницы, но куда легче в конфигурировании.

▍Глава 4: Random.org сегодня (2009-)

В конце 2009-го Random.org прошёл через реструктуризацию в ответ на увеличение количества клиентов, которым нужна хорошая надёжность и производительность. Теперь это географически распределённая система с несколькими генерирующими случайность узлами. Данные с них подвергаются статистическому тестированию, а затем поток очищенных случайных битов передаётся в облачный хостинг, в котором крутится сервис Random.org. У этой архитектуры выше надёжность и производительность, поэтому Random.org подходит для решения серьёзных задач (например, розыгрышей лотерей). Проверенные временем, случайные числа до сих пор генерируются на основе атмосферных шумов, но железо и ПО далеко ушли от десятидолларового ресивера из Radio Shack, с которого всё начиналось в 1997-м.

▍Глава N: Будущее?

Random.org всё ещё активно развивается, в работе находится много классных проектов. Следите за новостями или подписывайтесь на нашу рассылку (и можете выиграть iPod).
Кстати, о рандоме. На данный момент оценка вероятностей места приземления нашего сервера хабражителями выглядит так:

После конкурса мы попробуем применить метод Монте-Карло и оценить, насколько координаты, поставленные на карте нашими участниками, оказались случайными.

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»