Книга «Масштабирование приложений. Выращивание сложных систем»
Мы живем в мире растущих приложений. Практически любые программные продукты рано или поздно приходится расширять, надстраивать, адаптировать к обслуживанию растущей пользовательской аудитории и к пиковым нагрузкам. Для того чтобы подобное масштабирование протекало гладко и быстро, нужно закладывать такие возможности уже на уровне архитектуры приложения. В этой прикладной книге Ли Атчисон рассказывает не только об архитектурных тонкостях, необходимых для эффективного масштабирования приложений, но и о рисках, присущих такой работе, о грамотной организации масштабирования и об использовании облачных сервисов. Книга описывает ключевые решения и практики масштабируемых систем: доступность, классы сервисов, плановые проверки, матрицы рисков.
Для кого предназначено издание
Эта книга предназначена для программистов, системных архитекторов, технических руководителей и директоров, которые создают и эксплуатируют крупномасштабные приложения и системы. Если вы управляете программистами, инженерами по надежности систем, специалистами DevOps или руководите организацией, применяющей крупномасштабные приложения и системы, то приведенные в книге рекомендации и руководства помогут вам заставить эти приложения работать более гладко и надежно.
Если ваше приложение изначально было небольшим, а сейчас переживает невероятный рост (и сопутствующие ему болезни роста), его надежность и работоспособность могут снизиться. Если вы не можете справиться с техническими долгами и связанными с ними отказами приложения, эта книга покажет вам, как отработать эти долги и таким образом сделать приложение более масштабируемым.
Почему была написана эта книга
Проведя многие годы в Amazon за проектированием крупномасштабных приложений в области как розничной торговли, так и веб-сервисов Amazon (AWS), Ли Отчисон перешел на работу в компанию New Relic, которая переживала период взрывного роста. В компании ощущали болезненную необходимость в системах и процессах для управления крупномасштабными приложениями, но пока не пришли к четко установленному порядку масштабирования своего приложения.
В New Relic он лицом к лицу столкнулся с проблемами компании, масштабирующей свое приложение. Тогда и осознал, что многие компании сталкиваются с теми же проблемами ежедневно.
Цель этой книги — помочь людям, работающим с быстро растущими приложениями, изучить процессы и лучшие практики, которые помогут избежать подводных камней при масштабировании.
Неважно, выросло ли ваше приложение за год в десять раз или на 10 %, выражается ли рост в количестве пользователей, транзакций, хранимых данных или сложности кода, — данная книга поможет вам создавать и поддерживать приложения, способные выдержать рост, но сохраняющие при этом высокий уровень доступности.
Современные проблемы масштабирования
Облачные сервисы растут и расширяются невероятно высокими темпами. Подход «программное обеспечение как сервис» (Software as a Service, SaaS) становится нормой в современной практике разработки в первую очередь из-за наличия спроса на облачные сервисы. SaaS-приложения особо чувствительны к проблемам масштабирования в силу своей многопользовательской природы.
Мир меняется, все больше внимания уделяется SaaS, облачным сервисам и приложениям, обрабатывающим большие объемы данных. Росту размеров и сложности облачных приложений не видно конца.
Механизмы, представляющие сегодня последнее слово техники в области управления масштабированием, завтра станут не более чем базовыми строительными блоками. Решения современных проблем масштабирования будут выглядеть просто и минималистично по сравнению с решениями будущих проблем. Индустрия программного обеспечения будет требовать все более и более сложных систем, способных выдержать будущие нагрузки.
Цель этой книги — предоставить информацию, которая будет актуальна не один год.
Структура книги
Управление масштабированием — это не только управление количеством поступающих запросов, но и управление рисками и доступностью. Все эти аспекты часто описывают одну и ту же проблему с разных сторон, все они идут рука об руку. Следовательно, чтобы в полной мере рассмотреть вопрос масштабирования, необходимо рассмотреть и вопросы доступности, управления рисками, а также современные архитектурные парадигмы, такие как микросервисы и облачные вычисления.
Таким образом, данная книга имеет следующую структуру.
Часть I. Доступность
Доступность и управление доступностью — те области, которые часто первыми ощущают последствия роста приложения.
Глава 1. Что такое доступность. Для начала определим, что такое высокая доступность и чем она отличается от надежности.
Глава 2. Пять приоритетных направлений для улучшения доступности приложения. В этой главе я перечисляю пять основных моментов, на которых при создании приложения следует сосредоточиться для улучшения его доступности.
Глава 3. Измерение доступности. В этой главе рассмотрен стандартный алгоритм измерения доступности, а также глубже исследовано понятие высокой доступности.
Глава 4. Улучшение неудовлетворительной доступности. Если ваше приложение труднодоступно или вы хотите предупредить возникновение этой проблемы в будущем, то приведенные в данной главе организационные шаги помогут вам повысить доступность приложения.
Часть II. Управление рисками
Понимание того, в чем заключаются риски для вашей системы, жизненно необходимо как для повышения ее доступности, так и для улучшения ее масштабируемости до уровня, необходимого сегодня и в будущем.
Глава 5. Что такое управление рисками. В этой главе начинаем раскрывать тему управления рисками в крупномасштабных приложениях, рассматривая основные понятия и суть этой задачи.
Глава 6. Критичность и вероятность. В этой главе рассматриваются различия между критичностью риска и вероятностью его реализации. Оба эти фактора важны, но каждый по-своему.
Глава 7. Матрица рисков. В данной главе я представляю систему для понимания рисков в крупномасштабных приложениях и управления ими.
Глава 8. Смягчение рисков. В этой главе обсуждается, как можно намеренно пойти на риск, в то же время минимизируя негативные последствия для приложения.
Глава 9. Дни большой игры. В этой главе рассматриваются текущая проверка и оценка ваших планов управления рисками, смягчения последствий и восстановления после катастрофических отказов. В ней также приводятся методики их использования в производственной среде и их преимущества.
Глава 10. Создание систем со сниженными рисками. В этой главе я привожу рекомендации относительно того, как уменьшить риски в ваших приложениях и создавать приложения с меньшими рисками.
Часть III. Сервисы и микросервисы
Сервисы и микросервисы — архитектурная стратегия построения крупных и сложных приложений, работающих с большими объемами запросов.
Глава 11. Зачем нужны сервисы. Из этой главы мы узнаем, почему сервисы важны для создания масштабируемых приложений.
Глава 12. Использование микросервисов. В этой главе я даю введение в создание архитектур, основанных на микросервисах. Особое внимание уделяется размерам сервисов и определению их границ с целью улучшения масштабируемости и доступности.
Глава 13. Обработка отказов сервисов. В последней главе этой части мы рассмотрим, как создавать сервисы, грамотно обрабатывающие отказы.
Часть IV. Масштабирование приложений
Масштабирование касается не только количества запросов, но всей вашей организации и ее способности справляться с потребностями растущего приложения.
Глава 14. Запас на две ошибки. В этой главе описывается, как масштабировать вашу систему и обеспечить ее высокую доступность даже при возникновении сбоев.
Глава 15. Владение сервисами. В данной главе мы рассмотрим, как важно уделять внимание владению сервисами для обеспечения масштабирования вашей организации и приложения.
Глава 16. Классы сервисов. Эта глава описывает методику определения значимости ваших сервисов, в результате чего можно предъявлять к их работе определенные требования.
Глава 17. Использование классов сервисов. После того как мы дали определение сервисных классов, начнем применять их для управления последствиями рисков, требованиями ко времени реакции и ожиданиями пользователей.
Глава 18. Соглашения сервисного уровня. В этой главе рассмотрим SLA как механизм управления взаимозависимостями владельцев сервисов.
Глава 19. Непрерывное совершенствование. В этой главе приводятся методики и рекомендации по улучшению масштабируемости приложения в целом.
Часть V. Облачные сервисы
Облачные сервисы начинают играть все более важную роль в создании крупных критических приложений с высокими требованиями к масштабируемости и управлении ими.
Глава 20. Облака и перемены в них. В этой главе рассматривается, как облачные вычисления изменили подходы к построению высокомасштабируемых приложений.
Глава 21. Распределение облака. В данной главе в общих чертах описывается, как эффективно использовать регионы и зоны доступности для улучшения доступности и масштабируемости.
Глава 22. Управление инфраструктурой. В этой главе рассматривается использование управляемых сервисов, таких как RDS, SQS, SNS и SES, для масштабирования приложений и снижения затрат на управление.
Глава 23. Распределение облачных ресурсов. В данной главе мы обсудим, как распределяются ресурсы в облаке и как различные стратегии их распределения влияют на масштабируемость вашего приложения.
Глава 24. Другие средства масштабирования. В этой главе рассматриваются такие модели масштабируемых вычислений, как AWS Lambda. Они используются для улучшения масштабируемости, доступности и управляемости приложений.
Глава 25. AWS Lambda. В последней главе этой части более подробно рассматривается AWS Lambda — технология, предоставляющая сверхширокие возможности для масштабирования событий с небольшими требованиями к вычислительной мощности.
Часть VI. Заключение
Глава 26. Общий обзор всех аспектов масштабирования. В данной главе кратко обобщаются важнейшие темы, рассмотренные в книге. Это позволит вам вспомнить, о чем говорилось в каждой из глав.
Об авторе
Ли Атчисон — главный облачный архитектор New Relic. Он проработал там четыре года. За это время Ли спроектировал продукты инфраструктуры New Relic и руководил их разработкой, а также помог New Relic создать надежную сервисно-ориентированную архитектуру, которая масштабировалась на протяжении всего времени, пока организация росла от простого стартапа SaaS до высоконагруженного крупного предприятия. Наибольший опыт Ли получил при разработке высокодоступных систем.
Ли работает в индустрии 28 лет, изучал облачные масштабируемые системы все семь лет работы главным менеджером в Amazon.com. В Amazon он руководил созданием первого в компании магазина загружаемого программного обеспечения, создал AWS Elastic Beanstalk и руководил командой, переводившей интернет-магазин Amazon с монолитной на сервисно-ориентированную архитектуру.
Для Хаброжителей скидка 20% по купону — Architecting for Scale
Источник