Реализация api c длительной обработкой запросов

24
Реализация API c длительной обработкой запросов Жданов Николай

Upload: artur-burakov

Post on 23-Jan-2017

238 views

Category:

Mobile


6 download

TRANSCRIPT

Page 1: Реализация API c длительной обработкой запросов

Реализация API c длительной

обработкой запросов

Жданов Николай

Page 2: Реализация API c длительной обработкой запросов

Взаимодействие на уровне сокетовЦикл:1. Соединение с сервером2. Отправка/получение данных3. Отправка/получение данных4. …5. Разъединение.

Page 3: Реализация API c длительной обработкой запросов

Взаимодействие по HTTP протоколу (конечные точки)Цикл:1. Соединение2. Отправка данных3. Маршрутизация (выбор конечно точки)4. Получение данных5. Разъеденение

Page 4: Реализация API c длительной обработкой запросов

Проблема задержки ответа сервера

REST API?

Page 5: Реализация API c длительной обработкой запросов

Структура данных: Очередь(queue, Q)

Item n

Item n-1

Item 2

Item 1

Item n + 1

Item 1

Page 6: Реализация API c длительной обработкой запросов

Сервер очередей сообщений(message queue, MQ)

Producer 1

Producer 2

Producer 3

Producer 4

Producer 5

Producer 6

Queue 1

Queue 2

exchange

Consumer 1

Consumer 2

Consumer 3

Consumer 4

Consumer 5

Consumer 6

Page 7: Реализация API c длительной обработкой запросов

Достоинства очередей сообщений•Слабое связывание•Избыточность•Масштабируемость•Эластичность•Отказоустойчивость

Page 8: Реализация API c длительной обработкой запросов

Достоинства очередей сообщений•Гарантированная доставка•Буферизация•Понимание потоков данных•Асинхронность

Page 9: Реализация API c длительной обработкой запросов

Варианты реализации MQ

Решения

Облачное Серверное Собственное

Page 10: Реализация API c длительной обработкой запросов

Облачные решения• Microsoft Azure

1. Azure Queues 2. Service Bus Queues

• IronMQ• StormMQ • Amazon Simple Queue Service

Page 11: Реализация API c длительной обработкой запросов

Серверные решенияНазвание Язык программирования

ActiveMQ JAVA

Apollo JAVA, AMQP

Celery Python

Crossroads I/O C, ZEROMQ

Darner C++

Delayed::Job RUBY, MYSQL

Gearman C

HornetQ JAVA, AMQP, JMS

Zaqar (ex Marconi) OPENSTACK, PYTHON, MONGODB, SQLITE, DURABLE

Apache Kafka JAVA

Название Язык программирования

Kestrel SCALA

nanomsg C, ZEROMQ

NATS GO, NODE, JAVA, RUBY, PYTHON, SCALA

NSQ GO

Apache Qpid JAVA, AMQP, CPP

queue_classic RUBY, POSTGRES

RabbitMQ ERLANG, AMQP

Resque RUBY, REDIS

Sidekiq RUBY, REDIS

ZeroMQ C++

Page 12: Реализация API c длительной обработкой запросов

Собственные решения

Page 13: Реализация API c длительной обработкой запросов

RabbitMQОсобенности:• Надежность• Гибкая маршрутизация• Кластеризация • Высокая доступность очередей• Поддержка множеством языков программирования• Трассировка• Система плагинов

Page 14: Реализация API c длительной обработкой запросов

Пример развертывания RabbitMQУстановка в Ubuntu:

Перезагрузка:

Веб-панель:http://localhost:15672/

sudo apt-get install rabbitmq-server

sudo service rabbitmq-server restart

Page 15: Реализация API c длительной обработкой запросов
Page 16: Реализация API c длительной обработкой запросов

RabbitMQ: Producer on pythonimport pika

connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))

channel = connection.channel()

channel.queue_declare(queue='hello')

channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')

connection.close()

Page 17: Реализация API c длительной обработкой запросов

RabbitMQ: Consumer on pythonimport pika

connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))channel = connection.channel()channel.queue_declare(queue='hello')

def callback(ch, method, properties, body): print (" [x] Received {0}“.format(body))

channel.basic_consume(callback, queue='hello', no_ack=True)channel.start_consuming()

Page 18: Реализация API c длительной обработкой запросов

RabbitMQ: QueueConsumer 1

Consumer 2

Consumer 3

Consumer 4

RabbitMQ

Page 19: Реализация API c длительной обработкой запросов

RabbitMQ: Queue (Реальное распределение)

Consumer 1

Consumer 2

Consumer 3

Consumer 4

RabbitMQ

Page 20: Реализация API c длительной обработкой запросов

RabbitMQ: Queue(c prefetchCount = 1)

Consumer 1

Consumer 2

Consumer 3

Consumer 4

RabbitMQ

Page 21: Реализация API c длительной обработкой запросов

Ответ на запрос API: БД

Client REST APIServer MQ

Consumer

DatabaseClient REST API

request

Id answer

Id answer

answer

Page 22: Реализация API c длительной обработкой запросов

Ответ на запрос API: БД

Client REST APIServer MQ

ConsumerClient REST API

request

Id answer

request answer

answer

Page 23: Реализация API c длительной обработкой запросов

Полезные ссылки:• http://habrahabr.ru/post/153431/• https://makeomatic.ru/blog/2013/10/16/RabbitMQ/• http://mqseries.narod.ru/book/webspheremq_1.htm• http://habrahabr.ru/post/149694/• http://habrahabr.ru/company/mailru/blog/216363/• http://queues.io

Page 24: Реализация API c длительной обработкой запросов

Спасибо за внимание.