2016-08-03 5 views
0

Я построил сервер API в узле js, который должен работать при большой нагрузке. Я в основном хочу накапливать входящие запросы вставки небольшими партиями (около 10 элементов каждый), и как только пакет заполняется, вставьте элементы в базу данных. В настоящий момент я использую Amazon SQS в качестве службы очереди и отдельное потребительское приложение очереди, которое я разработал. Тем не менее, я подумал, что, возможно, я могу скопировать сообщения локально, а затем вставить пакет непосредственно из API. Это позволит устранить накладные расходы на связь с удаленной службой очереди, а поскольку партии малы, память сервера API не будет накачана. Как вы думаете? за и против?api server - служба очереди с локальной мини-очередью

ответ

0

Вы упомянули о большой нагрузке на ваш сервер. Если вы попытаетесь реализовать очередь для сбора входящих запросов, то это может привести к огромной памяти на вашем сервере. До тех пор, пока у вас не будет возможности увеличения масштаба, всегда будет риск. Вы должны учитывать следующее: - общий размер партии - максимальный размер каждого запроса Это поможет вам избежать проблем с памятью.

Другие соображения должны быть следующими: - это распределенная/кластерная среда? Если да, то подумайте о том, связаны ли 2 запроса, и хотите ли вы объединить их на одном сервере? - таймер: у вашей очереди есть механизм таймера. Я вижу, что я вставляю db, так что есть сценарий, который вставка не может дождаться завершения партии для записи в db. Если да, то используйте таймер для сохранения (независимо от того, какая партия заполнена или нет) - Проверьте, получил ли сервер всплески атаки, сможет ли ваш механизм очередей справиться с этим? что-то вроде политики всплеска. - происходит ли сбой системы, когда вы можете потерять частичные данные вставки пакета? - Я вижу, что, делая это, вы пытаетесь сохранить время транзита для удаленного вызова. Но если вы блокируете запросы на сохранение (в пакете), вы действительно заботитесь о времени транзита (реальная проблема)? Если нет, то SQS является более надежным & эффективным решением.

кроме этих, попробуйте предотвратить атаку вашей системы из-под атак с использованием sql.