Начать бесплатный период
EnglishEnglish
EspañolSpanish
简体中文Chinese
繁體中文Chinese (Traditional)
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Searching...
SoBrief
Масштабирование веб-приложений для начинающих инженеров

Масштабирование веб-приложений для начинающих инженеров

Артур Эйсмонт 2015 416 стр.
4.50
343 оценок
Слушать
Amazon Kindle Audible
Попробуйте полный доступ на 3 дня
Откройте прослушивание и многое другое!
Продолжить

Ключевые идеи

1. Масштабируемость зависит от правильных принципов проектирования ПО

Многие проблемы с масштабируемостью в реальных проектах сводятся к нарушению базовых принципов проектирования.

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

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

Компромиссы неизбежны. Применение принципов проектирования всегда связано с выбором между разными вариантами. Универсального решения нет, и инженерам приходится взвешивать плюсы и минусы каждого решения. Чрезмерная сложность может быть так же вредна, как и пренебрежение принципами.

2. Простота — путеводная звезда масштабируемых систем

Делайте всё максимально просто, но не проще.

Главная ценность. Простота должна быть ключевой целью в проектировании ПО. Простые системы легче понять, поддерживать и масштабировать. Сложность же порождает трения и увеличивает вероятность ошибок.

Как достичь простоты:

  • Абстракция: Скрывайте сложность за чёткими интерфейсами.
  • Избегайте излишней сложности: Не поддавайтесь желанию создавать чрезмерно сложные решения.
  • Разработка через тесты (TDD): Пишите тесты сначала, чтобы код был сфокусированным и необходимым.
  • Учитесь на примерах: Изучайте системы, известные своей простотой, например Grails, Hadoop и Google Maps API.

Долгосрочные выгоды. Простота — это не только удобство сейчас, но и гарантия лёгкой поддержки и расширения в будущем. Простая система лучше адаптируется к меняющимся требованиям и масштабируется со временем.

3. Слабая связанность: минимизация зависимостей для гибкости

Связанность — это мера того, насколько два компонента знают друг о друге и зависят друг от друга.

Снижение взаимозависимости. Слабая связанность уменьшает зависимости между частями системы. Это позволяет изменять, заменять или масштабировать компоненты независимо, не затрагивая остальные. Высокая связанность же создаёт эффект домино: изменение в одном месте требует изменений в других.

Преимущества слабой связанности:

  • Повышенная гибкость: Легче модифицировать и расширять отдельные компоненты.
  • Улучшенная масштабируемость: Компоненты можно масштабировать отдельно, исходя из их потребностей.
  • Снижение сложности: Проще понимать и поддерживать отдельные части.
  • Повышение продуктивности команд: Несколько команд могут работать параллельно над разными компонентами.

Как добиться слабой связанности:

  • Управляйте зависимостями: Тщательно контролируйте связи между классами, модулями и приложениями.
  • Кодируйте по контракту: Определяйте чёткие интерфейсы и строго их соблюдайте.
  • Избегайте ненужной связанности: Будьте осторожны с практиками, которые увеличивают связанность, например, открытием приватных свойств.

4. Автоматизация: масштабирование продуктивности через эффективность

Одно из самых ценных правил — избегать дублирования.

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

Области для автоматизации:

  • Тестирование: Автоматизируйте юнит-, интеграционные и сквозные тесты.
  • Сборка и деплой: Внедряйте конвейеры непрерывной интеграции и доставки (CI/CD).
  • Мониторинг и оповещения: Настраивайте автоматический мониторинг и систему оповещений для быстрого реагирования.
  • Агрегация логов: Централизуйте и индексируйте логи для эффективного устранения неполадок.

Преимущества автоматизации:

  • Снижение ошибок: Автоматизация минимизирует человеческий фактор.
  • Быстрые релизы: Автоматические деплои позволяют выпускать обновления чаще.
  • Повышенная надёжность: Автоматический мониторинг ускоряет обнаружение и устранение проблем.
  • Рост эффективности: Инженеры могут сосредоточиться на задачах с высокой добавленной стоимостью.

5. Фронтенд: управление состоянием и оптимизация доставки

Ключ к эффективному использованию ресурсов — это безсостояные автономные вычислительные узлы.

Первая линия обороны. Фронтенд — это точка первого контакта с пользователями и место с наибольшим трафиком. Эффективное управление состоянием и оптимизация доставки контента критичны для масштабируемости.

Основные компоненты:

  • DNS: Используйте надёжного провайдера DNS для быстрой резолюции доменных имён.
  • Балансировщики нагрузки: Распределяйте трафик между несколькими веб-серверами.
  • Веб-серверы: Обслуживайте статический и динамический контент.
  • Кэширование: Внедряйте HTTP-кэширование и кэширование объектов для снижения нагрузки на серверы.
  • CDN: Используйте сети доставки контента для глобального ускорения доставки статических ресурсов.

Безсостояность — залог успеха. Фронтенд-серверы должны быть безсостояными, чтобы обеспечить лёгкое горизонтальное масштабирование. Данные сессий, файлы и прочее состояние следует хранить вне серверов.

6. Веб-сервисы: проектирование для повторного использования и независимого масштабирования

Сервис-ориентированные архитектуры похожи на снежинки — ни одна не похожа на другую.

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

Подходы к проектированию:

  • Веб-сервисы как дополнительный интерфейс: Добавляйте веб-сервисы к существующему приложению в качестве дополнительного слоя.
  • API-First: Сначала проектируйте контракт API, затем реализуйте сервис и клиентов.
  • Прагматичный подход: Сочетайте лучшие практики в зависимости от потребностей проекта.

Масштабирование веб-сервисов:

  • Держите сервисы безсостояными: Храните данные сессий и состояние вне сервисов.
  • Кэшируйте ответы: Используйте HTTP-кэширование для снижения нагрузки.
  • Функциональное разделение: Разбивайте слой веб-сервисов на мелкие независимые сервисы.

7. Слой данных: выбор базы данных и стратегии масштабирования

Архитектура — это искусство проведения линий. И интересное правило: все зависимости, пересекающие линию, должны указывать в одном направлении.

Основа масштабируемости. Слой данных часто становится самым сложным для масштабирования. Правильный выбор базы данных и эффективные стратегии масштабирования жизненно важны для работы с большими объёмами данных и высокой нагрузкой.

Масштабирование с MySQL:

  • Репликация: Создавайте несколько реплик для распределения чтения.
  • Шардирование: Делите данные на части и распределяйте их по разным серверам.

Масштабирование с NoSQL:

  • Примите eventual consistency: Меняйте строгую согласованность на высокую доступность и масштабируемость.
  • Быстрое восстановление: Снижайте среднее время восстановления (MTTR).
  • Выбор модели данных: Подбирайте модель, соответствующую паттернам доступа приложения.

8. Кэширование: ключевая стратегия для производительности и масштабируемости

Высшее искусство войны — побеждать врага без боя.

Снижение нагрузки. Кэширование — базовый приём для повышения производительности и масштабируемости. Хранение часто запрашиваемых данных в памяти уменьшает необходимость обращаться к медленным источникам.

Типы кэшей:

  • HTTP-кэши: Кэши браузера, прокси, обратные прокси и CDN.
  • Кэши объектов приложения: Локальные и распределённые кэши.

Правила кэширования:

  • Кэшируйте как можно выше в стеке вызовов: Чем выше, тем больше ресурсов экономится.
  • Повторное использование кэша между пользователями: Максимизируйте попадания в кэш, кэшируя данные, общие для многих.
  • Инвалидация кэша — сложная задача: Минимизируйте её, используя короткие TTL или альтернативные подходы.

9. Асинхронная обработка: использование очередей сообщений и событийно-ориентированной архитектуры

Ключ к эффективному использованию ресурсов — безсостояные автономные вычислительные узлы.

Развязка и параллелизм. Асинхронная обработка и очереди сообщений позволяют разъединять компоненты и обрабатывать запросы параллельно, повышая устойчивость и пропускную способность.

Основные понятия:

  • Очереди сообщений: Буферизуют и распределяют асинхронные запросы.
  • Производители сообщений: Создают и публикуют сообщения в очередь.
  • Потребители сообщений: Получают и обрабатывают сообщения из очереди.
  • Событийно-ориентированная архитектура (EDA): Компоненты реагируют на события, а не делают прямые запросы.

Преимущества очередей сообщений:

  • Асинхронная обработка: Отложенная обработка ресурсоёмких задач.
  • Легкое масштабирование: Масштабируйте производителей и потребителей независимо.
  • Сглаживание пиков нагрузки: Буферизация запросов в периоды пиков.
  • Изоляция сбоев и самовосстановление: Сбой в одном компоненте не влияет на другие.
  • Развязка компонентов: Снижение взаимозависимостей.

10. Поиск данных: индексация и моделирование для эффективного извлечения

Архитектура — это искусство проведения линий. И интересное правило: все зависимости, пересекающие линию, должны указывать в одном направлении.

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

Техники индексации:

  • Индексы: Создают отсортированные списки для ускорения поиска.
  • Составные индексы: Объединяют несколько полей для уточнения результатов.
  • Обратные индексы: Позволяют полнотекстовый поиск.

Принципы моделирования данных:

  • Моделируйте под запросы: Проектируйте модель данных с учётом паттернов доступа.
  • Денормализация: Снижайте количество соединений, встраивая связанные данные в один документ.
  • Используйте специализированные поисковые движки: Для сложных запросов применяйте специализированные решения.

Обновлено:

Report Issue
Want to read the full book?

Частые вопросы

What is "Web Scalability for Startup Engineers" by Artur Ejsmont about?

  • Comprehensive guide for startups: The book provides a holistic roadmap for engineers to understand and implement web application scalability, focusing on both technical and organizational aspects relevant to startups.
  • Core concepts and techniques: It covers essential topics such as caching, asynchronous processing, data modeling, operational scalability, and engineering culture.
  • Emphasis on tradeoffs: Artur Ejsmont stresses that scalability is about making informed tradeoffs, not following one-size-fits-all solutions, and encourages open-mindedness in technology choices.
  • Practical, real-world advice: The book is filled with actionable guidance and real-world examples to help engineers build scalable systems efficiently in fast-paced startup environments.

Why should I read "Web Scalability for Startup Engineers" by Artur Ejsmont?

  • Bridges knowledge gaps: The book is tailored for engineers who may lack deep scalability experience, providing accessible, practical knowledge to help them "level up."
  • Covers technical and organizational growth: It addresses not only system design but also team scaling, personal productivity, and avoiding burnout, making it valuable for both engineers and leaders.
  • Focus on startup challenges: The advice is specifically relevant to startups, where rapid growth, resource constraints, and agility are critical.
  • Real-world best practices: Readers gain insights from industry standards and the author's hands-on experience, helping them avoid common pitfalls and design robust systems.

What are the key takeaways from "Web Scalability for Startup Engineers" by Artur Ejsmont?

  • Scalability is multi-dimensional: The book explains that scalability involves handling more data, higher concurrency, and increased interaction rates, each with unique challenges.
  • Tradeoffs are essential: There are no silver bullets; every architectural or technology choice involves tradeoffs between performance, consistency, complexity, and cost.
  • Holistic approach: Success requires attention to software design, infrastructure, automation, team processes, and personal productivity.
  • Continuous learning and adaptation: The book encourages engineers to stay open-minded, mix technologies as needed, and focus on building what customers truly need.

What are the core concepts of scalability explained in "Web Scalability for Startup Engineers"?

  • Definition of scalability: Scalability is the ability to adjust system capacity cost-efficiently to meet demand, handling more users, data, or requests without degrading user experience.
  • Three dimensions of scaling: The book highlights scaling for data volume, concurrency (simultaneous users), and interaction rate (request frequency).
  • Evolution of scalable systems: It outlines the journey from single-server setups to vertical scaling, service isolation, horizontal scaling, and global scalability with multiple data centers.
  • Startup-specific focus: The book addresses the unique scaling needs and constraints faced by startups, such as rapid growth and limited resources.

What are the key software design principles for scalability in "Web Scalability for Startup Engineers"?

  • Simplicity and abstraction: Keep software as simple as possible, hiding complexity and avoiding overengineering to aid maintainability and scalability.
  • Loose coupling: Minimize dependencies between components, enabling independent development and scaling of system parts.
  • Single responsibility and open-closed principle: Design modules with one responsibility and make them open for extension but closed for modification, supporting easier scaling and maintenance.
  • Dependency injection: The book also discusses using dependency injection to further decouple components and improve testability.

How does Artur Ejsmont recommend building a scalable front-end layer in "Web Scalability for Startup Engineers"?

  • Stateless front-end servers: Push all state (sessions, files, locks) out to shared stores or clients, allowing easy horizontal scaling by adding server clones.
  • Externalize state management: Use cookies or external data stores for sessions, distributed file storage for files, and shared caches or distributed locks for other stateful needs.
  • Caching and load balancing: Integrate CDNs for static content, use reverse proxies and object caches to reduce load, and deploy load balancers to distribute traffic efficiently.
  • Focus on horizontal scalability: Statelessness and externalized state enable seamless scaling by simply adding more front-end servers.

What approaches to web service design are discussed in "Web Scalability for Startup Engineers"?

  • Monolithic with web service extension: Start with a single application and add web services as an alternative interface, which is fast but less scalable long-term.
  • API-first approach: Design and build the API contract before clients and implementation, promoting reuse, decoupling, and scalability, though it requires more upfront planning.
  • Pragmatic hybrid: Begin monolithic and add services as needed, balancing speed and scalability, which is common in evolving startups.
  • Tradeoff awareness: Each approach has its own benefits and drawbacks, and the book encourages choosing based on current and future needs.

What types of web services and protocols does "Web Scalability for Startup Engineers" cover, and how do they impact scalability?

  • Function-centric (RPC/SOAP) services: Allow clients to invoke functions remotely, but are complex, less cacheable, and often stateful, making scalability harder.
  • Resource-centric (REST) services: Use standard HTTP methods on resources, are stateless, cacheable, and simpler to implement and scale, especially for web and mobile clients.
  • Tradeoffs between SOAP and REST: SOAP offers strict contracts and enterprise features but is heavyweight; REST is lightweight and scalable but less strict.
  • Startup preference: The book notes that REST is generally more suitable for startups due to its simplicity and scalability.

How does "Web Scalability for Startup Engineers" by Artur Ejsmont explain caching strategies and their importance?

  • Cache hit ratio fundamentals: Cache effectiveness depends on cache key space, cache size, and object longevity (TTL); optimizing these improves hit ratio.
  • Types of caches: The book distinguishes between HTTP-based caches (browser, proxies, CDNs) and custom object caches (client-side, co-located, distributed), each with different scalability and complexity tradeoffs.
  • Cache invalidation challenges: Invalidation is notoriously hard; the book recommends using short TTLs or hybrid solutions over complex invalidation logic.
  • Practical advice: Effective caching can dramatically reduce load and latency, but requires careful design to avoid stale or inconsistent data.

What does "Web Scalability for Startup Engineers" teach about asynchronous processing, messaging, and event-driven architecture?

  • Synchronous vs. asynchronous: Synchronous processing blocks execution and can cause latency, while asynchronous processing enables parallelism and responsiveness.
  • Message queues and brokers: Message queues buffer requests and decouple producers from consumers; brokers manage routing, persistence, and delivery.
  • Event-driven architecture (EDA): EDA allows components to announce events without knowing consumers, leading to high decoupling and scalable, flexible systems.
  • Benefits and challenges: Messaging and EDA enable scalability and failure isolation but introduce complexity, race conditions, and message ordering issues.

How does "Web Scalability for Startup Engineers" approach data modeling and searching for scalable web applications?

  • NoSQL data modeling: Focuses on access patterns and queries rather than normalization, using denormalization and data duplication to optimize for scalability.
  • Wide columnar stores example: Demonstrates modeling with Cassandra, using compound indexes and duplicating data in multiple tables for efficient querying.
  • Tradeoffs: Denormalization and data duplication improve scalability but complicate updates and increase redundancy.
  • Search engines for complex queries: Recommends using tools like Elasticsearch or Solr for full-text search, leveraging inverted indexes for efficient keyword and phrase searches.

What operational scalability and automation advice does Artur Ejsmont provide in "Web Scalability for Startup Engineers"?

  • Automate testing and deployment: Advocates for automated testing and continuous integration/delivery pipelines to reduce manual effort and enable rapid releases.
  • Monitoring and alerting: Recommends automated monitoring, alerting, and centralized log aggregation to speed up failure detection and debugging.
  • Scaling operations and teams: Stresses the importance of configuration management, automated deployments, and clear on-call procedures for efficient operations.
  • Team and personal productivity: Discusses building cross-functional teams, managing workload, and avoiding burnout through sustainable work practices.

What are the best quotes from "Web Scalability for Startup Engineers" by Artur Ejsmont and what do they mean?

  • On caching: “There are only two hard things in computer science: cache invalidation and naming things and off-by-one errors.” – Phil Karlton. This highlights the notorious difficulty of cache invalidation and the need for pragmatic solutions.
  • On automation: “If you want something to happen, ask. If you want it to happen often, automate it.” – Ivan Kirigin. This underscores the importance of automation in scaling productivity and operations.
  • On architecture: “Good architecture maximizes the number of decisions not made.” – Robert C. Martin. This advises designing flexible, simple systems that avoid premature or unnecessary decisions.
  • On decoupling: “Whenever we can separate two components to a degree that they do not know about each other’s existence, we have achieved a high degree of decoupling.” This emphasizes the value of loose coupling for scalability and maintainability.
  • On resilience: “Hope for the best, prepare for the worst.” This reminds engineers to anticipate failures and design resilient systems and workflows.

Скачать PDF

To save this Масштабирование веб-приложений для начинающих инженеров summary for later, download the free PDF. You can print it out, or read offline at your convenience.
Download PDF

Скачать EPUB

To read this Масштабирование веб-приложений для начинающих инженеров summary on your e-reader device or app, download the free EPUB. The .epub digital book format is ideal for reading ebooks on phones, tablets, and e-readers.
Download EPUB
Want to read the full book?
Follow
Слушать
Now playing
Масштабирование веб-приложений для начинающих инженеров
0:00
-0:00
Now playing
Масштабирование веб-приложений для начинающих инженеров
0:00
-0:00
1x
Queue
Home
Swipe
Library
Get App
Try Full Access for 3 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
Read unlimited summaries. Free users get 3 per month
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 4
📜 Unlimited History
Free users are limited to 4
📥 Unlimited Downloads
Free users are limited to 1
Risk-Free Timeline
Сегодня: мгновенный доступ
Слушайте полные саммари 26 000+ книг. Это более 12 000 часов аудио!
День 2: напоминание о пробном периоде
Мы отправим вам уведомление об окончании пробного периода.
День 3: начало подписки
Оплата будет списана Jul 3,
отмените в любой момент до этой даты.
Consume 2.8× More Books
2.8× more books Listening Reading
Our users love us
600,000+ readers
Trustpilot Rating
TrustPilot
4.6 Excellent
This site is a total game-changer. I've been flying through book summaries like never before. Highly, highly recommend.
— Dave G
Worth my money and time, and really well made. I've never seen this quality of summaries on other websites. Very helpful!
— Em
Highly recommended!! Fantastic service. Perfect for those that want a little more than a teaser but not all the intricate details of a full audio book.
— Greg M
Save 62%
Yearly
$119.88 $44.99/year/yr
$3.75/mo
Monthly
$9.99/mo
Start a 3-Day Free Trial
3 days free, then $44.99/year. Cancel anytime.
Unlock a world of fiction & nonfiction books
26,000+ books for the price of 2 books
Read any book in 10 minutes
Discover new books like Tinder
Request any book if it's not summarized
Read more books than anyone you know
#1 app for book lovers
Lifelike & immersive summaries
30-day money-back guarantee
Download summaries in EPUBs or PDFs
Cancel anytime in a few clicks
Scanner
Find a barcode to scan

We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel
Settings
General
Widget
Loading...
We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel