SmugMug керує двома дуже великими онлайн-платформами для фотографій, SmugMug та Flickr, що дозволяє понад 100 мільйонам клієнтів безпечно зберігати, шукати, ділитися та продавати десятки мільярдів фотографій. Клієнти, які завантажували та шукали фотографії протягом десятиліть, допомогли перетворити пошук у критично важливу інфраструктуру, яка неухильно зростала з моменту вперше використаного SmugMug Amazon CloudSearch у 2012 р., за яким Служба Amazon OpenSearch з 2018 року, після досягнення мільярдів документів і терабайт пам’яті для пошуку.
Тут Лі Шеферд, штатний інженер SmugMug, розповідає про пошукову архітектуру SmugMug, яка використовується для публікації, заповнення та віддзеркалення живого трафіку в кількох кластерах. SmugMug використовує ці конвеєри для тестування, перевірки та переходу на нові конфігурації, включаючи екземпляри r6gd.2xlarge на основі Graviton з i3.2xlarge, а також тестування Amazon OpenSearch Serverless. Ми розглядаємо три конвеєри, які використовуються для публікації, заповнення та запитів, не вводячи різких нереалістичних моделей трафіку та не впливаючи на виробничі послуги.
Є дві основні архітектурні частини, критичні для процесу:
- Надійне джерело правдивих даних для індексів. Це найкраща практика і є частиною нашої стратегії резервного копіювання, щоб мати надійне сховище за межами індексу OpenSearch, а також Amazon DynamoDB забезпечує масштабованість та інтеграцію з AWS Lambda що значно спрощує процес. Ми використовуємо DynamoDB для інших служб, не пов’язаних із пошуком, тому це було природним підходом.
- Функція Lambda для публікації даних з джерела правди в OpenSearch. Використання псевдоніми функцій допомагає запускати декілька конфігурацій однієї функції Lambda одночасно та є ключовим фактором для підтримки синхронізації даних.
Видавничий
Конвеєр публікації керується такими подіями, як введення користувачем ключових слів або підписів, нові завантаження або виявлення міток через Amazon Rekognition. Ці події обробляються, поєднуючи дані з кількох інших сховищ активів, наприклад Amazon Aurora MySQL Compatible Edition та Служба простого зберігання Amazon (Amazon S3), перед записом окремого елемента в DynamoDB.
Запис у DynamoDB викликає функцію публікації Lambda через DynamoDB Streams Kinesis Adapter, який бере пакет оновлених елементів із DynamoDB та індексує їх у OpenSearch. Є й інші переваги використання DynamoDB Streams Kinesis Adapter, як-от зменшення кількості необхідних одночасних лямбда.
Публікаційна функція Lambda використовує змінні середовища, щоб визначити, у якому домені та індексі OpenSearch публікувати. Виробничий псевдонім налаштовано для запису в робочий домен OpenSearch, поза таблицею DynamoDB або Kinesis Stream
Під час тестування нових конфігурацій або міграції псевдонім міграції налаштовується для запису в новий домен OpenSearch, але використовує той самий тригер, що й робочий псевдонім. Це дозволяє подвійно індексувати дані в обох доменах OpenSearch Service одночасно.
Ось приклад схеми таблиці DynamoDB:
Значення «LastUpdated» використовується як версія документа під час індексування, що дозволяє OpenSearch відхиляти будь-які нестандартні оновлення.
Засипка
Тепер, коли зміни публікуються в обох доменах, новий домен (індекс) потрібно заповнити історичними даними. Щоб заповнити щойно створений індекс, комбінація Служба простої черги Amazon (Amazon SQS) і використовується DynamoDB. Сценарій заповнює чергу SQS повідомленнями, які містять інструкції для паралельне сканування сегмент таблиці DynamoDB.
Черга SQS запускає функцію Lambda, яка читає інструкції повідомлення, отримує пакет елементів із відповідного сегмента таблиці DynamoDB і записує їх в індекс OpenSearch. Нові повідомлення записуються в чергу SQS, щоб відстежувати прогрес сегмента. Після завершення сегмента повідомлення в чергу SQS більше не записуються, і процес припиняється.
Паралельність визначається кількістю сегментів із додатковими елементами керування, наданими масштабуванням паралелізму Лямбда. SmugMug здатний індексувати понад 1 мільярд документів на годину у своїй конфігурації OpenSearch, не завдаючи нульового впливу на робочу область.
Сценарій на основі NodeJS AWS-SDK використовується для заповнення черги SQS. Ось фрагмент параметрів сценарію налаштування SQS:
Разом із форматом отриманого повідомлення SQS:
Дзеркальне відображення
Останній, наш дзеркальний пошуковий запит результати запускаються шляхом надсилання запиту OpenSearch до черги SQS на додаток до нашого робочого домену. Черга SQS запускає функцію Lambda, яка відтворює запит до домену репліки. Результати пошуку за цими запитами не надсилаються жодному користувачеві, але дозволяють відтворити робоче навантаження на службу OpenSearch, що тестується, без впливу на робочі системи чи клієнтів.
Висновок
Під час оцінки нового домену чи конфігурації OpenSearch основними показниками, які нас цікавлять, є продуктивність затримки запитів, а саме затримки (затримки за час) і, що найважливіше, затримки для пошуку. Під час переходу на Graviton R6gd ми спостерігали приблизно на 40 відсотків нижчі затримки P50-P99, а також аналогічні переваги у використанні ЦП порівняно з i3 (ігноруючи нижчу вартість Graviton). Ще однією довгоочікуваною перевагою було більш передбачуване та контрольоване навантаження на пам’ять JVM зі змінами збирання сміття внаслідок додавання G1GC на R6gd та інших нових екземплярах.
Використовуючи цей конвеєр, ми також тестуємо OpenSearch Serverless і знаходимо його найкращі варіанти використання. Ми в захваті від цієї послуги і маємо повний намір з часом створити повністю безсерверну архітектуру. Слідкуйте за результатами.
Про авторів
Лі Шеперд є інженером програмного забезпечення SmugMug
Айдн Бекіров є головним технічним менеджером із роботи з обліковими записами Amazon Web Services
- Розповсюдження контенту та PR на основі SEO. Отримайте посилення сьогодні.
- PlatoData.Network Vertical Generative Ai. Додайте собі сили. Доступ тут.
- PlatoAiStream. Web3 Intelligence. Розширення знань. Доступ тут.
- ПлатонЕСГ. вуглець, CleanTech, Енергія, Навколишнє середовище, Сонячна, Поводження з відходами. Доступ тут.
- PlatoHealth. Розвідка про біотехнології та клінічні випробування. Доступ тут.
- джерело: https://aws.amazon.com/blogs/big-data/smugmugs-durable-search-pipelines-for-amazon-opensearch-service/
- :є
- : ні
- 1
- 100
- 12
- 14
- 20
- 2012
- 2018
- 40
- 7
- 9
- a
- Здатний
- МЕНЮ
- рахунки
- доданий
- доповнення
- Додатковий
- після
- дозволяти
- Дозволити
- по
- Також
- Amazon
- Amazon Web Services
- an
- та
- Інший
- будь-який
- архітектурний
- архітектура
- ЕСТЬ
- AS
- активи
- At
- Аврора
- AWS
- резервна копія
- заснований
- BE
- перед тим
- буття
- еталонний тест
- користь
- Переваги
- КРАЩЕ
- За
- Мільярд
- мільярди
- обидва
- але
- by
- Підписи
- Зміни
- збір
- поєднання
- об'єднання
- порівняний
- сумісний
- Завершує
- одночасно
- конфігурація
- налаштувати
- містити
- управління
- Відповідний
- витрати
- обкладинка
- центральний процесор
- створений
- критичний
- Критична інфраструктура
- Клієнти
- дані
- десятиліття
- Виявлення
- Визначати
- певний
- документ
- документація
- домен
- домени
- керований
- кожен
- дозволяє
- дозволяє
- Кінцева точка
- інженер
- вхід
- повністю
- Навколишнє середовище
- Ефір (ETH)
- оцінки
- Події
- приклад
- збуджений
- кілька
- Поля
- виявлення
- Перший
- відповідати
- потім
- для
- формат
- від
- повністю
- функція
- прибуток
- Зростання
- Мати
- висота
- допоміг
- допомагає
- історичний
- годину
- HTML
- HTTP
- HTTPS
- i
- i3
- ID
- Impact
- важливо
- in
- У тому числі
- індекс
- покажчики
- Інфраструктура
- випадки
- інструкції
- інтеграція
- мати намір
- зацікавлений
- в
- введення
- викликає
- пунктів
- ітерація
- ЙОГО
- сам
- JPG
- тримати
- зберігання
- ключ
- ключові слова
- етикетка
- великий
- Затримка
- запуски
- Подветренний
- як
- жити
- загрузка
- серія
- знизити
- головний
- пам'ять
- повідомлення
- повідомлення
- Метрика
- мігрувати
- мігруючи
- міграція
- мільйона
- мільйонів клієнтів
- дзеркало
- більше
- найбільш
- рухатися
- множинний
- MySQL
- ім'я
- а саме
- Природний
- потреби
- Нові
- нещодавно
- наступний
- немає
- номер
- of
- від
- on
- онлайн
- працює
- Опції
- Опц
- or
- Інше
- наші
- Паралельні
- частина
- моделі
- для
- відсотків
- продуктивність
- фото
- фотографії
- частин
- трубопровід
- Платформи
- plato
- Інформація про дані Платона
- PlatoData
- Передбачуваний
- тиск
- попередній
- Головний
- процес
- оброблена
- Production
- прогрес
- за умови
- забезпечує
- публікувати
- опублікований
- Видавничий
- досягнення
- зниження
- відповідь
- запитів
- вимагається
- в результаті
- результати
- прогін
- безпечно
- то ж
- бачив
- масштабованість
- Масштабування
- сценарій
- Пошук
- Грати короля карти - безкоштовно Nijumi логічна гра гри
- насіння
- сегмент
- сегменти
- продавати
- відправка
- посланий
- Без сервера
- обслуговування
- Послуги
- Поділитись
- акції
- аналогічний
- простий
- одночасно
- з
- один
- уривок
- So
- Софтвер
- Source
- Персонал
- залишатися
- неухильно
- Зупиняє
- зберігання
- зберігати
- магазинів
- Стратегія
- потоки
- такі
- Systems
- таблиця
- приймає
- технічний
- тензор
- тест
- Тестування
- ніж
- Що
- Команда
- Джерело
- їх
- Їх
- Там.
- Ці
- це
- три
- через
- час
- до
- прийняли
- трек
- трафік
- викликати
- Правда
- ПЕРЕГЛЯД
- два
- при
- оновлений
- Updates
- Завантаження
- URL
- Використання
- використання
- випадки використання
- використовуваний
- користувач
- використовує
- використання
- ПЕРЕВІР
- значення
- версія
- дуже
- було
- we
- Web
- веб-сервіси
- ласкаво просимо
- Що
- коли
- в той час як
- з
- без
- запис
- лист
- письмовий
- зефірнет
- нуль