[Перевод] Книга об интенсивной обработке данных

Здравствуйте, дорогие читатели. Мы редко пишем о книжных «долгостроях», то есть, о работах, которые никак не выйдут на Западе. Но сегодня хотим познакомить вас с постом из блога Мартина Клеппмана, который уже не первый год трудится над фундаментальной книгой «Designing Data-Intensive Applications»
e1d24ea85b77412da95c7195e2ce2cac.png

В сравнительно небольшой публикации автору удалось изложить базовые идеи столь объемной книги, обрисовать целевую аудиторию и почти убедить нас, что за перевод надо браться. Но вы все равно почитайте и не стесняйтесь голосовать.

В конце 2012 года я написал у себя в блоге пост «Rethinking caching in web apps». В нем почти 4,000 слов, что гораздо длиннее, чем, согласно народной мудрости должен быть хороший пост. Тем не менее, у меня осталось впечатление, что в нем я лишь слегка копнул те проблемы, о которых нужно рассказать.

Поэтому я задумался –, а не написать ли произведение подлиннее, книгу, например. Мне нравится писать, поскольку такой труд стимулирует автора заниматься глубокими исследованиями, продумывать проблему, а затем пытаться все это логично объяснить. Таким образом я прорабатываю проблему гораздо лучше, чем если просто читаю о ней. Или, если выразиться афористичнее:

Писательство помогает понять, насколько неуклюжи твои мысли. — Дик Гиндон

Какие книги уже есть


Я взялся за этот труд, поскольку такой книги, которую я хотел бы прочитать, попросту не существовало. Мне требовалась книга, в которой объяснялись бы системы данных — вся сфера баз данных, распределенных систем, пакетной и потоковой обработки, согласованности, кэширования, индексации — на нужном уровне сложности. Но оказалось, что практически все существующие книги, посты в блогах и т.д. относятся к одной из следующих категорий:
  1. Большинство айтишных книг — это прикладные руководства по конкретной технологии. В них предполагается, что вам сказано использовать базу данных X или язык программирования Y, поэтому там и рассказывается, как это делать. Эти книги хороши, но от них мало пользу в ситуациях, когда вы пытаетесь выбрать, какой инструмент — X или Y — вам действительно нужен. Такие книги обычно сосредоточены на достоинствах конкретной технологии и замалчивают ее недостатки.
  2. В блогах часто встречаются сравнения нескольких технологий, но в таких публикациях затрагиваются преимущественно поверхностные аспекты (контрольные точки, характеризующие производительность, API, лицензия), а фундаментальное устройство технологии полностью игнорируется. Такие посты можно сравнить с карточками по базам данных из игры Top Trumps, каких-либо глубоких представлений по ним не составишь.
  3. Напротив, в учебниках рассматриваются фундаментальные принципы и компромиссы, характерные для различных технологий, но при этом такие книги утрачивают всякую связь с реальностью. Как правило, авторы таких книг — академики с обширным исследовательским опытом в своей теме, не обладающие при этом практическим опытом работы с реальными софтверными системами. Зачастую они излагают технически верные вещи, но эти сведения могут быть бесполезны или просто запутают вас, как только вы возьметесь за создание реальной системы.

Я хотел написать книгу, которая сочетала бы достоинства всех трех категорий. Такую книгу, которая поведает историю больших идей по созданию систем обработки данных, опишет фундаментальные принципы, не меняющиеся при обновлении версий ПО. Но эта книга также не потеряет связи с реальностью, объяснит, что работает на практике, что — нет, и почему. Эта книга исследует инструменты и продукты, уже используемые в реальной практике, сравнит применяемые в них фундаментальные подходы и поможет вам понять, какая технология оптимально подходит для решения конкретной задачи.

Я хотел понять не только как использовать конкретную систему, но и как она работает под капотом. Отчасти это связано с интеллектуальным любопытством, но, что не менее важно, таким образом я отчетливо себе представляю, что делает система. Если возникает какое-то незапланированное поведение, или если вы хотите проверить, каковы истинные возможности той или иной технологии, то исключительно полезно хотя бы приблизительно себе представлять, что творится внутри.

Я обсуждал эти идеи с разными людьми, в том числе, с сотрудниками O«Reilly, и стало ясно, что не мне одному нужна такая книга. Так зародилась идея книги Designing Data-Intensive Applications. И вы ее легко узнаете на полке — ведь на обложке будет такой классный индостанский вепрь.

Книга «Высоконагруженные приложения. Эффективная обработка больших данных» (извините за многословное заглавие — можете называть ее просто «книга с вепрем») пока готовится к выходу, но на сайте уже выложен early release.

Для кого эта книга?


Если вы — программист, занимающийся разработкой серверных приложений (например, машинного интерфейса веб-приложения), то эта книга для вас. Предполагается, что вы уже умеете написать веб-приложение и обращаться с базой данных, и что хотите прокачать свои навыки. Может быть, вы хотите работать со сложной масштабируемой системой, обслуживающей миллионы пользователей, может быть, собираетесь иметь дело с особо сложными и постоянно изменяющимися данными, может быть, хотите придать гибкости какой-нибудь древней унаследованной экосистеме.

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

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

Ни одна из изложенных в книге идей не является по-настоящему инновационной, многим из них десятки лет. Все это где-то уже высказывалось — на конференциях, в исследовательских статьях, постах, примерах кода, в багтрекерах и в программерском фольклоре. Однако, насколько мне известно, никто еще не собирал, не сравнивал и не оценивал все эти идеи в одной книге таким образом.

Надеюсь, как только вы поймете, какие есть варианты, каковы достоинства и недостатки каждого из них, это поможет вам профессионально вырасти. Осознанно идя на компромиссы и грамотно подбирая инструменты, вы будете создавать системы, которые будут надежнее, и поддерживать их в долгосрочной перспективе будет проще. А значит, мы станем лучше справляться с нашей работой и писать более качественные программы.

Комментарии (0)

© Habrahabr.ru