Внутрішні мережі часто використовують з'єднання 1 Гбіт / с або швидше. Оптичні волокна або з'єднання дозволяють значно збільшити пропускну здатність між серверами. Тепер уявімо середній розмір відповіді JSON від API. Скільки таких відповідей може бути передано за 1 Гбіт / с за одну секунду?
Давайте насправді зробимо математику. 1 Гбіт / с - 131 072 Кб в секунду. Якщо середня відповідь JSON становить 5 Кб (що досить багато!), Ви можете надсилати 26 214 відповідей в секунду по дроту лише за допомогою однієї пари машин . Не так вже й погано, чи не так?
Ось чому мережне підключення зазвичай не є вузьким місцем.
Інший аспект мікропослуг полягає в тому, що ви можете легко масштабувати. Уявіть два сервери: один розміщує API, а інший споживає його. Якщо коли-небудь з’єднання стає вузьким місцем, просто додайте ще два сервери, і ви можете подвоїти продуктивність.
Це коли наші попередні 26 214 відповідей в секунду стають занадто малими для масштабу програми. Ви додаєте ще дев'ять пар, і тепер ви можете надіслати 262 140 відповідей.
Але повернемося до нашої пари серверів і зробимо кілька порівнянь.
Якщо середній некешований запит до бази даних займає 10 мс., Ви обмежені 100 запитами в секунду. 100 запитів. 26 214 відповідей. Досягнення швидкості 26 214 відповідей в секунду вимагає великої кількості кешування та оптимізації (якщо відповідь насправді потребує чогось корисного, наприклад запиту в базу даних; відповіді в стилі "Hello World" не кваліфікуються).
На моєму комп’ютері зараз DOMContentLoaded для домашньої сторінки Google сталося 394 мс. після надсилання запиту Це менше 3 запитів в секунду. Для домашньої сторінки Programmers.SE це сталося 603 мс. після надсилання запиту Це навіть не 2 запити в секунду. До речі, у мене є інтернет-з'єднання зі швидкістю 100 Мбіт / с і швидкий комп'ютер: багато користувачів будуть чекати довше.
Якщо вузьким місцем є швидкість мережі між серверами, ці два веб-сайти можуть буквально робити тисячі дзвінків до різних API під час обслуговування сторінки.
Ці два випадки показують, що мережа, ймовірно, не буде вашим вузьким місцем в теорії (на практиці ви повинні зробити фактичні орієнтири та профілювання, щоб визначити точне місце вузького місця у вашій конкретній системі, розміщеній на певному апаратному забезпеченні). Час, витрачений на виконання фактичної роботи (чи це були б запити SQL, стиснення, що завгодно) та надсилання результату кінцевому користувачеві, є набагато важливішим.
Подумайте про бази даних
Зазвичай бази даних розміщуються окремо від веб-додатків, що використовують їх. Це може викликати занепокоєння: як щодо швидкості з'єднання між сервером, що розміщує програму, і сервером, що розміщує базу даних?
Виявляється, бувають випадки, коли дійсно швидкість з'єднання стає проблематичною, тобто коли ви зберігаєте величезну кількість даних, які не потрібно обробляти самою базою даних і повинні бути доступними прямо зараз (тобто великі двійкові файли). Але такі ситуації трапляються рідко: у більшості випадків швидкість передачі не така велика порівняно зі швидкістю обробки самого запиту.
Коли швидкість передачі насправді має значення, коли компанія розміщує великі набори даних у NAS, а до NAS доступні декілька клієнтів одночасно. Тут SAN може бути рішенням. Це, як говориться, не єдине рішення. Кабелі Cat 6 можуть підтримувати швидкість до 10 Гбіт / с; приєднання також може використовуватися для збільшення швидкості без зміни кабелів або мережевих адаптерів. Існують й інші рішення, що включають реплікацію даних через декілька NAS.
Забудьте про швидкість; подумайте про масштабованість
Важливим моментом веб-програми є можливість масштабування. Хоча фактичні показники мають значення (оскільки ніхто не хоче платити за більш потужні сервери), масштабованість набагато важливіша, оскільки вона дозволяє вам кидати додаткове обладнання при необхідності.
Якщо у вас не особливо швидкий додаток, ви втратите гроші, оскільки вам знадобляться більш потужні сервери.
Якщо у вас швидкий додаток, який не може масштабуватись, ви втратите клієнтів, оскільки не зможете відповісти на зростаючий попит.
Таким же чином віртуальні машини десять років тому сприймалися як величезна проблема продуктивності. Дійсно, розміщення програми на сервері та розміщення її на віртуальній машині мало важливий вплив на продуктивність. Хоча сьогодні розрив значно менший, він все ще існує.
Незважаючи на втрату продуктивності, віртуальні середовища стали дуже популярними через гнучкість, яку вони надають.
Як і у випадку швидкості мережі, ви можете виявити, що VM - це фактичне вузьке місце і враховуючи фактичний масштаб, ви заощадите мільярди доларів, розмістивши програму безпосередньо, без віртуальних машин. Але це не те, що трапляється для 99,9% додатків: їх вузьке місце знаходиться десь в іншому місці, і недолік втрати на кілька мікросекунд через VM легко компенсується вигодами апаратної абстракції та масштабованості.