Ноди, ребра, напрямки
Запит як прогулянка по графу
Кожен компонент, з яким зіткнenizs запит, є ноді: клієнт, вирішувач DNS, крайовий едж CDН, протилежний проксі, основний зразок, база даних, кеш.
Кожне з'єднання між двома нодами є напрямленним ребром: запити протікають уперед, відповіді протікають назад. Переднє ребро представляє відкриту TCP-зв'язок плюс протокол, який знаходиться зверху.
Одна запит є дорогою через цю графу. Всього роботи, яку система виконує для відповіді на запит, дорівнює сумарному роботі на кожній ноді, плюс затримці кожного ребра.
Чи потрібно? Коли ви малюєте граф, властивості виступають, які невидимі в коді:
- Відстань в хопах: кількість ребер у дорозі. Кожен хоп додає затримку (круговий оберт мережі + обробка ноди). Менше хопів = нижча підлога затримки.
- Вхідний ступінь: скільки ребер вказують У ноду. Високий вхідний ступінь означає, що нода отримує запити від багатьох джерел та повинна масштабуватися або захищатися.
- Вихідний ступінь: скільки ребер вказують З ноди. Високий вихідний ступінь означає, що нода залежить від багатьох наступних та має багато способів провалитися.
- Розгалужена вершина: єдина вершина, чиїй видаленню граф стає роз'єднаним. Пропріший проксі без однодерева є розгалуженою вершиною; видалення його видаляє всі доступи до його джерел.
Куди концентрується трафік
Фан-ін = Концентрація
Вхідний ступінь вузла = кількість кантактів, які вказують на нього. У графі запиту, вхідний ступінь = кількість верхніх джерел, які відправляють запити.
Патерн фан-ін: багато клієнтів -> один CDN; багато країв CDN -> кілька відправних проксі; багато проксі -> менша кількість бакенд-реплік; багато бакенд -> одна база даних.
**Важливість концентрації полягає в тому, що вузл з найвищим вхідним ступенем бачить найбільшу агреговану навантаження. База даних у кінці ланцюга може бачити запити від кожного активного запиту в системі, навіть якщо жодному окремому користувачу не вистачить.
Фан-аут = Залежність
Вихідний ступінь вузла = кількість кантактів, які виходять з нього. Високий вихідний ступінь означає багато віддалених залежностей.
Бакенд, який викликає базу даних, два кеші, три зовнішні API та чергу, має вихідний ступінь 7. Ймовірність його успіху приблизно дорівнює добутку кожної віддаленої успіхової ймовірності (якщо всі потрібні для успішного відгуку).
0,999 в 7-му ≈ 0,993: бакенд з 7 віддаленими, кожен з 99,9% надійності, може досягати лише ~99,3% надійності самого, навіть без власних помилок.
Зменшити вихідний ступінь: кешувати результати віддалених, зробити некритичними віддалені (грейтл-деґрадація), паралелізувати те, що можна паралелізувати.
Асиметрія
Фан-ін зосереджує навантаження; фан-аут множить ризик. Добре сформована графа мінімізує обидві на найвищих вузлах впливу.
База даних (найвищий фан-ін): кешувати активно, щоб зменшити навантаження. Читові репліки, щоб розсіяти фан-ін між кількома вузлами.
Оркестратор послуги (найвищий фан-аут): циркулярні затяжки для залежностей, грейтл-деґрадація, bulkheads.
Вставлений вузол придатить гнучкість
Індиректування = Додання проміжного вузла
Без проксі граф є: client -> backend. Клієнт повинен знати про адресу backend. Переміщення backend вимагає оновлення клієнта (через DNS або налаштування). Це тісне зв'язування.
З проксі граф стає: client -> proxy -> backend. Клієнт знає лише про проксі. Переміщення backend вимагає оновлення налаштувань проксі вгору, а не клієнта.
Графова операція: вставте вузол між існуючою ребром. Нове ребро client -> proxy є стабільним; нове ребро proxy -> backend тепер у команді управління.
Геометричне читання: індиректування додає шар, який відділяє верхній рівень змін від нижнього рівня змін. Кожен шар може відключатися незалежно.
Витрати на індиректуванні
Кожен шар додає:
- Один крок затримки (ребро від client до proxy)
- Один більше ребро розвернення (проксі сам по собі)
- Один більше місце, де може статися помилка налаштування
Лагідність (перезавантаження, масштабування, захист, завершення TLS, розподілення навантаження) як правило переважає витрати для будь-якого не тривіального системи. Але є межа: кожен шар індиректування додає ще один крок та ще одну кандидатку SPOF.
Фольклорна правила: будь-яка проблема може бути вирішена шляхом додавання шару індиректування (окрім проблеми надмірного шару індиректування).
Читайте Архітектуру як Граф
Синтез
Тепер ви можете читати архітектуру системи як граф: відлічувати кроки, ідентифікувати ребра розвернення, вимірювати концентрацію фан-ін, обчислювати тверді межі доступності від фан-аут, та оцінювати торгові витрати від індиректування.
Застосуйте всі чотири.
Нове служба має таку архітектуру: клієнти -> CDN -> віддалений проксі (2 репліки) -> верхній рівень (8 реплік) -> { база даних (привод), кластер кешування (3 вузли), зовнішній API }.
Допоміжні Примітки
Допоміжні Примітки
Ця геометрія-ліяр повторює основну лекцію про Proxies & Origins у вигляді аналізу з напрямкованими графами.
Наступна допоміжна лекція в цьому курсі, geometry_of_stateless_horizontal_scaling, бере математичну реплікацію зі основної лекції про масштабування та виводить коливуючу криву, Закон Літтла та геометричне коліно 80% доступності.
Добре зроблено.