Выбрать главу

Сейбел: Значит, все элементы созданной вами инфраструктуры, такие как memcached и Perlbal, были разработаны в ответ на реальные потребности, связанные с масштабированием Живого Журнала?

Фицпатрик: Да, конечно. Все, что мы создали, делалось только потому, что наш сайт падал, и мы ночь напролет выдумывали новые штуки. Однажды мы даже решили купить систему хранения данных NetApp. Это выглядело так. Мы спросили: «Сколько она стоит?», а они в ответ: «Расскажите нам о вашем бизнесе». — «У нас платные учетные записи». «Сколько у вас клиентов? Какая нагрузка?» — «Мы знаем только, что их число растет, вот и все». — «Тогда цена такая: весь доход, который вы можете заплатить, чтобы не развалиться». — «Да пошли вы». Но все же нам была нужна эта штука, и мы ее купили. Скорость ввода/вывода нас не слишком впечатлила, цена была слишком высока, и здесь по-прежнему оставалась единственная точка отказа. Они попытались продать нам конфигурацию с высокой скоростью доступа, но мы сказали: «Да пошли вы. Мы эту ерунду больше не купим».

Итак, мы начали работу над файловой системой. Я даже не уверен, что к этому моменту был опубликован документ по GFS, кажется, я просто услышал о ней от кого-то. В то время я всегда использовал хеш-значение ключа для указания на фрагмент памяти. Почему бы не сделать то же самое с файлами? Файлы постоянны, поэтому нам нужно записывать, где они хранятся, поскольку при добавлении новых узлов хранения меняется и конфигурация. И дело не только в вводе/выводе и отслеживании местонахождения файлов, но и в высокой доступности системы. Мы нашли решение, и я пришел к следующей схеме: «Нам нужно хранить все обращения к файлам, чтобы знать, где что лежит».

Я написал схему для MySQL, сначала главного устройства, а потом для устройства отслеживания файлов. И меня осенило: «Черт! Да эту роль может выполнять протокол HTTP! Это же совсем не сложно».

Помню, как пришел на работу, всю ночь обдумывая это. У нас в здании была общая комната для совещаний — большая и мрачная. «Итак, ребята, прекращаем работу. Все идем вниз и будем рисовать». Я говорил это каждый раз, когда нам предстояло заняться проектированием, и мы просто находили доску, на которой можно было бы рисовать.

Я объяснил схему, и кто с кем должен общаться, и кто что будет делать с запросом. Потом мы поднялись наверх, и я первым делом заказал все оборудование, потому что на его доставку уходило недели две. Потом мы занялись кодированием, надеясь завершить его до получения оборудования. Нам всегда что-то угрожало. Что-нибудь постоянно ломалось, так что нам все время приходилось создавать новые компоненты инфраструктуры.

Сейбел: Если бы кто-нибудь в самом начале сказал: «Вам нужно знать А, Б и В», — упростило бы это вашу жизнь?

Фицпатрик: Всегда легче сделать что-то как надо с первого раза, а не переносить с уже работающего сервиса. Это всегда большой геморрой. Все, о чем я говорил, вы можете сделать на одном компьютере. Проектируете систему таким образом, чтобы было с чего начать. И не делаете предположений о возможности объединений вот этих пользовательских данных с этими и так далее. Предположим, вам нужно загрузить 20 объектов, и ваша реализация может загрузить их из одной таблицы, но код более высокого уровня, которому нужны эти 20 объектов, может собирать их с нескольких машин. Если бы я делал так с самого начала, куда меньше было бы головной боли с переносом.

Сейбел: Итак, урок в основном таков: «Имейте план на тот день, когда ваши данные перестанут влезать в одну базу».

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

Сейбел: Думаю, вы разрабатывали все эти штуки не только по необходимости, но вам было интересно делать все это.

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

Сейбел: Итак, какие языки вы можете назвать своими, какими языками вы жили и дышали?

Фицпатрик: Perl. Си. Когда-то Бейсик, но не уверен, что его стоит учитывать. Еще я много писал на Лого. В школе у нас были уроки по Лого. Ребята что-то рисовали, а я сумел выйти из графического режима — это можно сделать, когда знаешь, как, — и писал функции. Учитель подошел и сказал: «Что ты делаешь? Ты должен рисовать домики». — «Нет, я пишу на Лого. Посмотрите». — «Ты все делаешь не так». В конце урока у меня уже была библиотека, позволяющая рисовать буквы алфавита любого размера и повернутые под любым углом. Я мог выводить целые сообщения на волнистых баннерах, которые отдалялись, приближались и все такое, и все стали спрашивать: «Какого черта?» Не знаю, считать этот язык или нет.