Реализация api c длительной обработкой запросов
TRANSCRIPT
![Page 1: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/1.jpg)
Реализация API c длительной
обработкой запросов
Жданов Николай
![Page 2: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/2.jpg)
Взаимодействие на уровне сокетовЦикл:1. Соединение с сервером2. Отправка/получение данных3. Отправка/получение данных4. …5. Разъединение.
![Page 3: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/3.jpg)
Взаимодействие по HTTP протоколу (конечные точки)Цикл:1. Соединение2. Отправка данных3. Маршрутизация (выбор конечно точки)4. Получение данных5. Разъеденение
![Page 4: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/4.jpg)
Проблема задержки ответа сервера
REST API?
![Page 5: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/5.jpg)
Структура данных: Очередь(queue, Q)
Item n
Item n-1
…
Item 2
Item 1
Item n + 1
Item 1
![Page 6: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/6.jpg)
Сервер очередей сообщений(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 длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/7.jpg)
Достоинства очередей сообщений•Слабое связывание•Избыточность•Масштабируемость•Эластичность•Отказоустойчивость
![Page 8: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/8.jpg)
Достоинства очередей сообщений•Гарантированная доставка•Буферизация•Понимание потоков данных•Асинхронность
![Page 9: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/9.jpg)
Варианты реализации MQ
Решения
Облачное Серверное Собственное
![Page 10: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/10.jpg)
Облачные решения• Microsoft Azure
1. Azure Queues 2. Service Bus Queues
• IronMQ• StormMQ • Amazon Simple Queue Service
![Page 11: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/11.jpg)
Серверные решенияНазвание Язык программирования
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 длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/12.jpg)
Собственные решения
![Page 13: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/13.jpg)
RabbitMQОсобенности:• Надежность• Гибкая маршрутизация• Кластеризация • Высокая доступность очередей• Поддержка множеством языков программирования• Трассировка• Система плагинов
![Page 14: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/14.jpg)
Пример развертывания RabbitMQУстановка в Ubuntu:
Перезагрузка:
Веб-панель:http://localhost:15672/
sudo apt-get install rabbitmq-server
sudo service rabbitmq-server restart
![Page 15: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/15.jpg)
![Page 16: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/16.jpg)
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 длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/17.jpg)
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 длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/18.jpg)
RabbitMQ: QueueConsumer 1
Consumer 2
Consumer 3
Consumer 4
RabbitMQ
![Page 19: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/19.jpg)
RabbitMQ: Queue (Реальное распределение)
Consumer 1
Consumer 2
Consumer 3
Consumer 4
RabbitMQ
![Page 20: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/20.jpg)
RabbitMQ: Queue(c prefetchCount = 1)
Consumer 1
Consumer 2
Consumer 3
Consumer 4
RabbitMQ
![Page 21: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/21.jpg)
Ответ на запрос API: БД
Client REST APIServer MQ
Consumer
DatabaseClient REST API
request
Id answer
Id answer
answer
![Page 22: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/22.jpg)
Ответ на запрос API: БД
Client REST APIServer MQ
ConsumerClient REST API
request
Id answer
request answer
answer
![Page 23: Реализация API c длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/23.jpg)
Полезные ссылки:• 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 длительной обработкой запросов](https://reader034.vdocuments.pub/reader034/viewer/2022051318/58860ac51a28ab0a3f8b75bb/html5/thumbnails/24.jpg)
Спасибо за внимание.