В ідеальному світі інженера архітектура завжди прекрасна. У реальному світі високомасштабних систем доводиться йти на компроміси. Одна з фундаментальних проблем, про яку інженер повинен думати з самого початку, це жорсткий компроміс між швидкістю запису та швидкістю читання.
Зазвичай ви жертвуєте одним заради іншого. Але в нашому випадку, працюючи з петабайтами даних в AWS, цей компроміс вдарив не по швидкості, а по гаманцю.
Ми створили систему, яка ідеально записувала дані, але кожного разу, коли вона читала з архіву, вона спалювала бюджет найболючішим способом, який тільки можна уявити. Зрештою, читання петабайтів з AWS коштує грошей за передачу даних, кількість запитів та отримання даних зі сховища... Багато грошей!
Це історія про те, як ми оптимізували систему, щоб зробити її ефективнішою та економічно вигіднішою!
Реальна історія: кілька місяців тому один з наших архітекторів рішень хотів отримати зразок експорту з рідкісного, малотрафікового веб-сайту, щоб продемонструвати продукт потенційному клієнту. Через помилку в API не було застосовано обмеження безпеки на кількість файлів.
Оскільки дані для цього "рідкісного" сайту були розкидані по мільйонах архівів разом із сайтами з високим трафіком, система намагалася відновити майже половину всього нашого історичного сховища, щоб знайти ці кілька сторінок.
Ця чесна помилка коштувала нам майже $100 000 комісій AWS!
Я негайно виправив помилку API (і додав суворі обмеження), але архітектурна вразливість залишилася. Це була бомба уповільненої дії...
Дозвольте мені розповісти історію архітектури Веб-архіву Bright Data: як я загнав систему в пастку "дешевого" сховища і як я вибрався з неї за допомогою Конвеєра перебудови.
Коли я почав працювати над Веб-архівом, система вже поглинала масивний потік даних: мільйони запитів на хвилину, десятки терабайтів на день. Фундаментальна архітектура була побудована з основною метою: захопити все без втрати даних.
Вона спиралася на найбільш надійну стратегію для високопродуктивних систем: Журнал лише для додавання.
Для фази поглинання цей дизайн був бездоганним. Зберігання даних у Deep Archive коштує копійки, а пропускна здатність запису практично необмежена.
Архітектура ідеально працювала для запису... поки клієнти не почали запитувати історичні дані. Тоді я зіткнувся з фундаментальним протиріччям:
cnn.com, google.com та shop.xyz.cnn.com за останній рік."Тут лежить помилка, яка надихнула на цю статтю. Як і багато інженерів, я звик думати про затримку, IOPS та пропускну здатність. Але я не врахував модель тарифікації AWS Glacier.
Я думав: "Ну, отримання кількох тисяч архівів повільне (48 годин), але це не так дорого."
Реальність: AWS стягує плату не лише за виклик API, але й за обсяг відновлених даних ($ за ГБ отриманих даних).
Уявіть, що клієнт запитує 1 000 сторінок з одного домену. Оскільки логіка запису була хронологічною, ці сторінки можуть бути розкидані по 1 000 різних TAR-архівів.
Щоб надати клієнту ці 50 МБ корисних даних, відбувається катастрофа:
Ми платили за відновлення терабайтів сміття лише для того, щоб витягти крупинки золота. Це була класична проблема локальності даних, яка перетворилася на фінансову чорну діру.
Я не міг швидко змінити метод поглинання – вхідний потік занадто паралельний і масивний, щоб сортувати "на льоту" (хоча я працюю над цим), і мені потрібне було рішення, яке працювало б і для вже архівованих даних.
Тому я розробив Конвеєр перебудови, фоновий процес, який "дефрагментує" архів.
Це асинхронний ETL-процес (Extract, Transform, Load) з кількома критичними основними компонентами:
Вибір: Немає сенсу сортувати дані, які клієнти не запитують. Тому я направляю всі нові дані в конвеєр, а також дані, які клієнти спеціально просили відновити. Ми переплачуємо за отримання перший раз, але це ніколи не відбувається вдруге.
\
Перемішування (Групування): Кілька робочих процесів паралельно завантажують несортовані файли та організовують буфери за доменами. Оскільки система асинхронна, я не турбуюся про те, що вхідний потік перевантажить пам'ять. Робочі процеси обробляють навантаження у своєму темпі.
\
Перезапис: Я записую відсортовані файли назад в S3 під новим префіксом (щоб відрізнити відсортовані файли від необроблених).
2024/05/05/random_id_ts.tar → [cnn, google, zara, cnn]2024/05/05/cnn/random_id_ts.tar → [cnn, cnn, cnn...] MERGE INTO або UPDATE надзвичайно дороге.Ця зміна радикально змінила економіку продукту:
cnn.com, система відновлює лише дані, де живе cnn.com.Bright Data масштабує Веб-архів ще більше. Якщо вам подобається:
Тоді я був би радий поговорити.
Ми наймаємо сильних інженерів Node.js, щоб допомогти створити наступне покоління Веб-архіву. Наявність досвіду в інженерії даних та ETL є дуже корисною. Не соромтеся надсилати своє резюме на [email protected].
Більше оновлень з'явиться, коли я продовжу масштабувати архів — і коли я продовжу знаходити нові та творчі способи його зламати!
\

Копіювати посиланняX (Twitter)LinkedInFacebookEmail
DOT падає на 2% після прориву ключової підтримки
Th
