Обзор книги «Building Scalable Websites»
О книге «Building Scalable Websites» Кэла Хендерсона (ведущий разработчик Flickr) я узнал из рецензии на сайте developers.org.ua. Сразу загорелся и, спустя несколько месяцев, достал и прочитал книгу.
Впечатлений от книги осталось много, в основном — плохих. Кэл, похоже, не знает о существовании технологий вне PHP-мира, да и писатель из него странный. Давайте рассмотрим книгу по главам.
Краткое содержание книги
- Глава об архитектуре приложений свелась к тому, что приложение должно иметь слои, а логика представления должна отделяться от логики приложения. В этой же главе рассказано, что «взрослые системы» работают, как правило, в условиях сильно отличающихся от большинства shared hosting’ов. При этом, о шаблонах проектирования таких приложений не сказано вообще. А очень стоило бы сослаться на Мартина Фаулера.
- В главе 3 (Development Environments) рассказывается, для чего нужна система контроля версий (говорится о них очень мало, недостаточно для нормальной работы, о распределенных системах контроля версиями не сказано вовсе), система сборки проекта (в один шаг) и система учета задач. Также сказно, что без общих конвенций кодирования далеко не уедешь. И все!
У Джоэля Спольски эти же вещи описаны значительно лучше, без воды и, всего, в нескольких параграфах!
Убивает рассказ о юнит-тестах, сводящийся к тому, что тесты существуют в природе. Масштабные интернет-системы делаются, как правило, не маленькими командами, потому я бы в главу добавил информации про Continuous Integration. Без CI-систем довольно быстро разработка превращается в вопли разработчиков «Бляяядь, после апдейта снова все сломано!»… С CI же на смену такому режиму приходит «Блядь, я сломал билд, надо срочно откатить код, пока никто не заметил!». Но, ведь, в PHP нету своих CI-систем (на самом деле можно использовать джавовский CruiseControl с PHP-проектами), откуда же о них знать Кэлу Хендерсону?
Удивительно, как можно писать о стандартах кодирования, в то время как книга кишит примерами кода вроде этого:
Что такое store_file_2()? За такие имена методов, вообще-то нужно по рукам бить. Делать логику метода нечеткой и отдавать либо результат операции, либо ноль (хотя операция совсем не обязательно должна возвращать Integer) — один из любимых приемов быдлокодеров. Как правило, он лечится, когда такой разработчик сталкивается со строгой типизацией в других языках, либо с веб-сервисами.function store_file_2($host, $filename){ ... if ($connection_failed){ return 0; } ... if ($operation_failed){ return 0; } return $result; } - Главу об интернационализации и юникоде безболезненно можно ужать до одной страницы, где будет сказано, что может быть одна кодировка — UTF-8 и будет рассказано, как с ней работать в PHP и MySQL, а также в JavaScript и при отправке писем. Автор ухитрился растянуть эту информацию на 20 страниц.
- В главе о безопасности написано о всяких разных XSS-хаках, SQL-injection’ах и способах фильтрации контента. В общем, о том, чем кишат всякие говнограммы вроде PHPBB, Joomla, PHPNuke. Я считаю, разработчик масштабных интернет-систем заведомо обязан это знать. В книге о масштабировании подобная тема нужна, явно, с одной целью — набить килобайтов текста, за которые автору платит издатель.
- Глава об электронной почте — самое ценное, что есть в книге, говорю это без всякого сарказма. На тему мобильной загрузки, мобильного постинга в блоги и методов разбора электронных писем толковых материалов существует не так уж много. Уверен, эту часть Flickr’а Хендерсон сам и разрабатывал… иначе, почему в этой главе много полезной информации и мало воды, а не как в остальных?
- Глава про «remote services», естественно, свелась к перечислению реализаций этих самых сервисов (старичка CORBA, конечно же, не упомянули… ведь в PHP нету его реализаций). Какой-то аналитики на тему «чем сервис X лучше сервиса Y в условиях Z» ожидать не стоит.
- Глава «bottlenecks» написана неплохо, однако ее практическая часть полезна исключительно PHP-разработчикам.
В то же время, презентация Бреда Фицпатрика «Inside LiveJournal’s Backend» гораздо лучше отображает проблему «узких мест». - Главу «Scaling Web Applications» можно считать в книге главной и написана она вполне прилично: тут и теория и практика с примерами из жизни. Нареканий только два: во-первых мало, а во-вторых описан, опять же, исключительно LAMP-стек.
- Затем идут водянистые главы про мониторинг серверов и построение API (эту главу можно рассматривать как продолжение главы о remoting’е).. все, Книга окончена!
Подводя итоги
Книга рассчитана на специалистов интернет-разработок настолько же, насколько книги Дейла Карнеги рассчитаны на профессиональных психологов, а книга «бизнес в стиле фанк» — на бизнесменов… то есть, вообще ни разу не рассчитан! Профессионалы, скорее всего, не найдут в книге ничего нового.
Новичкам книгу тоже не порекомендуешь: общие темы рассмотрены поверхностно(зато впечатляет их количество: тут упомянули использование wiki для документации и, даже, итеративные методологии разработки), наверняка, о них уже написано в более простых книгах. А на основной вопрос «Как строить масштабируемые веб-приложения?» книга так и не отвечает.
Впрочем, книга не такая плохая, как могло показаться из моего описания. Она тянет на уверенную троечку по пятибалльной системе. От того что почитаете эту книгу хуже наверняка не станет, просто, то же время можно потратить с куда большей пользой и почитать High Scalability.
Книгу стоило бы переименовать, скажем, в «Scaling PHP applications in a nutshell» и сократить в 3 раза, стало бы значительно честнее, но за что тогда брать $26.39?
Выводы
Кэл чем-то напоминает плохого журналиста, ну знаете, такого специалиста широкого профиля, который легко пишет и о политике и о культуре и о нано-технологиях: рядовой обыватель это успешно хавает, а специалисты любой из этих областей плюются. Забавно, книга понравилась многим уважаемым мною людям и на Amazon у нее рейтинг тоже высокий.
Для себя я сделал следующие выводы:
- Для желающих разобраться в масштабировании веб-приложений лучшими вариантами остаются High Scalability, общение с коллегами, посещение семинаров вроде Exception и практика-практика-практика.
- Издательство O’Reilly менее добросовестное чем Addison Wesley. Оно вполне может выпускать низкокачественные книги, потому что их раскупят благодаря имени автора.
- Многие готовы купить книгу просто из-за ходового названия и приписки «От создателя Фликра». Мало кто знает, что Flickr не блестал изяществом архитектуры и с машстабированием у него были серьезные проблемы перед продажей гиганту Yahoo.


Комментарии
Что-то я давненько не читал книг по девелопменту. Как-то к докам привык уже :)
Если бы эта книга попалась мне в руки, скорее всего не читал бы, а просто пролистал в поисках чего интересного. А так, хватает highscalability.com
И в целом, мне кажется писать подобную книгу с упором на PHP вообще как-то не “честно” :) Лично у меня, масштабируемость и быстродействие с PHP не сильно ассоциируется. Да хотя бы потому что, на моменте интерпретации кода идёт солидная потеря производительности и это при каждом обращении… имхо, чтобы достичь действительно high scalability с PHP надо хорошенько почисать яйца…
Ну, на счет PHP тоже все не так просто. Да, он не многопоточен и у него нету компилятора,но:
Так что PHP тоже масштабируется, просто немного иначе, нежели джава или пайтон.
дело в том, что джаву, в частности j2ee, потому и называют enterprise платформой, что там изначально всё расчитано на большие нагрузки и масштабируемость. так, например, меня очень порадовало создание кластера на WebLogic. Достаточно задеплоить приложение на сервера, а в консоли админской просто указать - вот первый, вот второй, вот третий сервер. Всё! Обо всём остальном оно договаривается само.
2 недели назад наблюдал как один физ.сервер с джава машиной обрабатывал 15 000 потоков в момент времени. Заставило задуматься…
А всякие оптимизаторы - это имхо уже костыли…
Я это все понимаю, тоже люблю джаву и не люблю php, но ситуация от этого ведь не меняет :)
BMW изначально занимались вовсе не авто-транспортом и что с того? Не забывай о стоимости того же WebLogic’а… Если бы все было так просто — все большие сервисы в мире работали бы на какой-нибудь вебсфере, с кластерным ораклом, огромной командой поддержки и.т.п.
Когда у тебя есть кластер стандартных серверов с LAMP-стеком и Capistrano для обшего деплоймента — все тоже красиво. В то же время, когда в твой J2EE-стек нужно внести что-то стороннее и совсем новое — тратишь дни и недели на интеграцию, у меня так было когда-то с JSF. Когда изменил строчку в коде джава-приложения и хочешь посмотреть как реагирует приложение — нужно его пересобирать и, либо редеплоить, либо прогонять все тесты.
Это я к тому, что не существует золотой пули и нельзя сказать: “все серьезные проекты лучше всего делать на J2EE/.NET/Django/RoR/Zope/LAMP”. Всегда есть разные решения и разные факторы влияющие на их выбор, при том — не всегда технические.
Не блИстал! Проверка орфографии рулит :)
Хороший пост, полярный моему. Получается, что полезность - понятие относительное, и если я плевался слюной, какая дескать это классная книжка, то для тебя, как более опытного перца, это все оказался детский лепет.
В целом написал ты все честно, так и есть.
Спасиб! Думаю, после проектов с американцами для тебя это тоже уже детский лепет :)
Comment form for «Обзор книги «Building Scalable Websites»»