Потокові дані

Розроблення застосунків на AWS

Ricardo Sueiras

Principal Technologist

Основи потокових даних

 

потокові дані

  • Записи обробляються безперервно по мірі надходження.
  • Продюсери пишуть у стрім.
  • Споживачі читають незалежно й паралельно.
  • Поглинає сплески трафіку без очікування пакетних джобів.
Розроблення застосунків на AWS

З чого складаються потокові дані?

 

компоненти потокової системи

  • Продюсери: застосунки, що випромінюють записи.
  • Стріми: надійні впорядковані буфери, що роз'єднують продюсерів і споживачів.
  • Споживачі: застосунки, що читають і обробляють записи.
  • Зберігання та ретенція: визначає, як довго записи доступні для повторного відтворення.
Розроблення застосунків на AWS

Шарди

 

шарди

 

  • Шарди — це одиниці пропускної здатності та паралельної обробки.
  • Ключі партиціювання розподіляють записи між шардами.
  • Порядок гарантується лише в межах шарда.
  • Споживачі використовують чекпойнтинг, щоб відстежувати прогрес і відновлюватися після збоїв.
Розроблення застосунків на AWS

Керовані AWS сервіси для потокових даних

  • Amazon Kinesis Data Streams.
  • Amazon Data Firehose.
  • Базові блоки для застосунків потокових даних.

 

сервіси aws

Розроблення застосунків на AWS

Kinesis Data Streams

  • Низька затримка.
  • Налаштовувана ретенція: 24 години (типово) до 365 днів.
  • Надійні стріми з можливістю повторного відтворення.
  • Декілька споживачів читають паралельно.
  • Розробники масштабують за допомогою шардів.

 

kinesis data streams

Розроблення застосунків на AWS

Коли використовувати Kinesis Data Streams

  • Обирайте, коли потрібна затримка реального часу.
  • Потрібне повторне відтворення записів.
  • Є кілька незалежних споживачів.
  • Потрібна власна логіка трансформації.

 

kinesis data streams

Розроблення застосунків на AWS

Записування даних

 

клієнтські бібліотеки

  • Ключі партиціювання керують розміщенням у шардах і порядком.
  • PutRecords формує пакети до 500 записів або 5 MB на запит.
  • Збої звітуються для кожного запису.
  • FailedRecordCount допомагає виявити помилкові записи.
Розроблення застосунків на AWS

Споживання записів: classic

 

classic

 

  • Споживачі опитують за вимогою через Kinesis API.
  • Ліміти запису: 1 MB/с або 1 000 записів/с.
  • Ліміти читання: 2 MB/с або 5 викликів GetRecords/с.
Розроблення застосунків на AWS

Споживання записів: початок стріму

 

початок стріму

  • Споживачі задають, звідки в стрімі почати читати.
  • TRIM_HORIZON: найстаріший доступний запис у шарді.
  • LATEST: наступний новий запис.
  • AT_SEQUENCE_NUMBER або AFTER_SEQUENCE_NUMBER: від вказаного sequence number.
  • AT_TIMESTAMP: у вказаний час або після нього.
Розроблення застосунків на AWS

Споживання записів: enhanced fan-out

  • Кожен зареєстрований споживач має виділені 2 MB/с на шард.
  • Доставка записів через HTTP/2 push.
  • Використовуйте, коли кільком незалежним споживачам потрібна низька затримка.
  • І висока пропускна здатність до того самого стріму.

 

шаблон — enhanced fan-out

Розроблення застосунків на AWS

Відображення джерела подій Lambda

  • Lambda опитує Kinesis і викликає функції пакетами.
  • BatchSize і MaximumBatchingWindow задають форму пакета.
  • ParallelizationFactor: паралельних викликів на шард.
  • BisectBatchOnFunctionError: ділить збійний пакет, ізолюючи «отруйні» записи.
  • ReportBatchItemFailures: уникає повторних спроб для вже успішних записів.
  • OnFailure: надсилає непроцесовані пакети в DLQ SQS або SNS.

 

мапінг джерела подій lambda

Розроблення застосунків на AWS

Data Firehose

  • Керований сервіс для доставки потокових даних до призначень.
  • Цілі: Amazon S3, Redshift та HTTP endpoints.
  • Підтримує буферизацію, конвертацію формату та трансформації Lambda.
  • Вища затримка, буфер — від секунд до хвилин.
  • Без повторного відтворення чи довготривалої ретенції.
  • Підійде, щоб просто доставити дані в пункт призначення.

 

data firehose

Розроблення застосунків на AWS

Шаблон: hot-cold

 

шаблон — hot/cold

 

  • Шаблон hot-cold поєднує Data Streams і Data Firehose.
  • Data Streams дає продюсерам обробку в реальному часі.
  • Firehose архівує записи з того ж джерела в S3.
Розроблення застосунків на AWS

Kinesis vs SQS

 

sqs проти kinesis

 

  • Використовуйте Kinesis для впорядкованих стрімів з повторним відтворенням і кількома споживачами.
  • Kinesis підходить для часових рядів і впорядкованих даних.
  • Використовуйте SQS для розподілу задач.
Розроблення застосунків на AWS

Масштабування потокових даних

 

масштабування

  • Дані в стрімах поділяються на шарди.
  • Ключі партиціювання спрямовують записи в конкретний шард.
  • Той самий ключ завжди потрапляє в той самий шард, зберігаючи порядок.
  • Нерівномірні ключі спричиняють «гарячі» шарди.
  • Пом'якшуйте високою кардинальністю ключів.
  • Рішардіть для масштабування вгору або вниз.
Розроблення застосунків на AWS

Режими ємності: provisioned

  • Доступні два режими ємності.
  • Provisioned: фіксована кількість шардів, керування вручну.
  • Дає передбачувану вартість і ємність.
  • Потрібен моніторинг, щоб уникати тротлінгу та надмірного резервування.

 

режими ємності

Розроблення застосунків на AWS

Режими ємності: on-demand

  • On-demand масштабується автоматично залежно від трафіку.
  • Без ручного керування шардами.
  • Спрощує експлуатацію для непередбачуваних навантажень.
  • Дорожче за тривалого інтенсивного трафіку.

 

режими ємності

Розроблення застосунків на AWS

Kinesis Producer Library (KPL)

  • Бібліотеки AWS спрощують створення масштабованих продюсерів і споживачів.
  • Kinesis Producer Library (KPL) пакує й агрегує записи.
  • Також стискає записи й повторює спроби при збої.
  • Асинхронно буферизує для макс. пропускної здатності продюсера.

 

клієнтські бібліотеки

Розроблення застосунків на AWS

Kinesis Consumer Library (KCL)

 

клієнтські бібліотеки

 

  • Kinesis Consumer Library (KCL) керує координацією шардів.
  • Керує орендою воркерів і чекпойнтингом.
  • Стан зберігається в таблиці DynamoDB.
  • Споживачі використовують цей стан, щоб знати, звідки відновити.
Розроблення застосунків на AWS

Обробка збоїв: ідемпотентність

 

обробка збоїв

 

  • Доставка Kinesis — at-least-once, тож можливі дублікати.
  • Проєктуйте споживачів ідемпотентними.
  • Дедуплікуйте за sequence number або бізнес-ключем у DynamoDB.
  • Споживачі можуть перечитати утримувані записи з номеру послідовності або часової позначки.
Розроблення застосунків на AWS

Обробка збоїв: помилки пропускної здатності

 

обробка збоїв

 

  • ProvisionedThroughputExceededException означає тротлінг.
  • Вирішіть, збільшивши кількість шардів.
  • Покращте розподіл ключів партиціювання.
  • Повторюйте зі зворотною затримкою (backoff).
  • Перемкніть режим ємності.
Розроблення застосунків на AWS
  • Відстежуйте IncomingBytes і IncomingRecords у CloudWatch.
  • Слідкуйте за WriteProvisionedThroughputExceeded для тротлінгу.
  • Лаг споживача виникає, коли читання повільніше за запис.
  • Відстежуйте GetRecords.IteratorAgeMilliseconds: великий вік означає лаг.

 

логування та моніторинг

Розроблення застосунків на AWS

Безпека

  • Шифрування на боці сервера в стані спокою через AWS KMS.
  • Шифрування під час передавання через TLS.
  • Доступ керується політиками IAM.

 

безпека

Розроблення застосунків на AWS

Давайте потренуємось!

Розроблення застосунків на AWS

Preparing Video For Download...