2016-09-22 5 views
1

Мне нужно собрать данные из большого количества источников данных (например, мобильных телефонов). Например, 1000 телефонов, каждый из которых загружает партию по 1 МБ каждые 20 минут. Я думаю использовать поток Kinesis с одним осколком, чтобы глотать данные (общая пропускная способность составляет примерно 1 МБ/с). Имеет ли смысл, чтобы отдельные телефоны имели прямой доступ к API Kinesis, или я должен поставить перед собой собственный интерфейс (например, веб-сервер)? Каковы основные ограничения/соображения, которые следует учитывать при принятии этого решения?Kinesis shard со многими производителями

P.S. Альтернатива использованию инфраструктуры AWS IoT будет значительно дороже.

ответ

2

У вас должен быть веб-сервис, который получает данные от ваших клиентов и отправит их в Kinesis. Этот веб-сервер может использовать Kinesis Producer Library (KPL), которые обеспечивают лучшую производительность с точки зрения доставки сообщений, тайм-аута, повторения политики и масштабируемости. KPL может создавать много работников и может быть настроен на оптимизацию скорости передачи сообщений и не превышать ограничение на запись, введенное Kinesys Shards.

Имейте каждый клиент, который отправляет данные в кинезис, может быть чрезмерным с точки зрения производительности, затрат и доставки. Что произойдет, если клиент начнет отправлять данные с высокой скоростью? Осколок имеет ограничение скорости для операции записи (до 1000 записей/с, скорость записи данных до 1 МБ/с). «Агрессивный» клиент может генерировать эффективный трафик и заставлять осколки не реагировать на какое-то время и блокировать всех других клиентов, которые отправляют записи, которые должны храниться в одном и том же осколке.

Кроме того, подумайте о стоимости доставки более тысячи клиентов. Что произойдет, если вы хотите изменить имя потока? или изменить ключ доступа/ключ? Или просто переключиться с кинезиса на кафку? Вам необходимо управлять обновлением тысяч клиентов.

С веб-сервером вы можете скрыть сложность и сделать любые изменения прозрачными для клиента. Вы можете думать, чтобы запустить веб-сервис непосредственно в EC2. Попросите производителя непосредственно в AWS сократить время ожидания сети. Кроме того, вы можете воспользоваться всеми возможностями масштабируемости/отказоустойчивости/отказоустойчивости, предлагаемыми AWS.