Искали ли сте някога да визуализирате как се справят вашите Resque опашки, работници и работни места? В тази статия ще научим как да изградим някои прости графики около компонентите Resque.
Делегиране на задачи във фонова опашка
Делегирането на продължителни, скъпи изчислителни задачи и задачи с висока латентност към опашка за фонови работници е често срещан модел, използван за създаване на мащабируеми уеб приложения. Целта е да се обслужват заявки от крайни потребители с възможно най-бърз отговор, като се гарантира, че всички скъпи задачи се обработват извън цикъла заявка/отговор.
Resque
Resque е базирана на Redis Ruby библиотека за създаване на фонови задания, поставянето им на множество опашки и обработката им по-късно. Той е предназначен за използване в сценарии, които изискват голям обем вписвания за работа, тъй като Resque предоставя механизми за гарантиране на видимост и надеждност на поведението, докато препраща статистически данни чрез уеб табло за управление.
Redis
Redis е с отворен код (BSD лицензиран), хранилище за структура на данни в паметта, използвано като база данни, кеш и посредник на съобщения. Той поддържа структури от данни като низове, хешове, списъци, набори, сортирани набори със заявки за диапазон, растерни изображения, хиперлогове и геопространствени индекси със заявки за радиус.
Node.js
Node.js е платформа, изградена върху времето за изпълнение на JavaScript на Chrome за лесно изграждане на бързи и мащабируеми мрежови приложения. Node.js използва управляван от събития, неблокиращ I/O модел, който го прави лек и ефективен и по този начин идеален за приложения в реално време с интензивни данни, които работят на разпределени устройства.
Express.js
Express.js е рамка на Node.js. Node.js е платформа, която позволява JavaScript да се използва извън уеб браузърите, за създаване на уеб и мрежови приложения. Това означава, че можете да създадете сървърния и сървърния код за приложение като повечето други уеб езици, но с помощта на JavaScript.
Socket.IO
Socket.IO е библиотека на JavaScript за уеб приложения в реално време. Той позволява двупосочна комуникация в реално време между уеб клиенти и сървъри. Той има две части:библиотека от страна на клиента, която работи в браузъра, и библиотека от страна на сървъра за Node.js. И двата компонента имат почти идентични API.
Героку
Heroku е облачна платформа, която позволява на компаниите да създават, доставят, наблюдават и мащабират приложения – това е най-бързият начин да преминете от идея към URL, заобикаляйки всички тези инфраструктурни главоболия.
Тази статия предполага, че вече имате Redis, Node.js и Heroku Toolbelt, инсталирани на вашата машина.
Настройка:
- Изтеглете кода от хранилището на ScaleGrid.
- Изпълнете npm install, за да инсталирате необходимите компоненти.
- Накрая можете да стартирате сървъра на възел, като направите „node index.js“. Можете също да стартирате „nodemon“, който също следи за промени във файловете.
Можете също да получите достъп до хоствана версия на това приложение тук.
Нашето приложение използва порт на Resque, наречен node-resque, който ни позволява да наблюдаваме опашки, работници и задачи, изпълнявани в Redis клъстер.
Разбиране на основите
Веднага след като стартирате приложението, от вас се изисква да въведете своите идентификационни данни за Redis клъстер. Моля, имайте предвид, че трябва да имате инсталиран Resque и да работи във вашия клъстер, за да работи правилно.
За щастие, напълно управляваният ScaleGrid за Redis™* осигурява високопроизводително решение за хостинг с едно щракване за Redis™. Ако все още не сте член, можете да се регистрирате за безплатен 30-дневен пробен период тук за да започнете.
В противен случай влезте в таблото си и създайте нов Redis™ клъстер в секцията Redis™. След като вашият клъстер е стартиран и работи, можете да вземете необходимите подробности от страницата с подробности за клъстера. Ще ви трябва следната информация:
- Хост
- Пристанище
- Парола
Ако връзката е успешна, трябва да видите графики като следното:
Нека обсъдим подробно всяка от тези графики. Моля, имайте предвид, че всички графики се самоактуализират, така че ако работниците обработват задания във вашия клъстер, графиките ще се актуализират автоматично.
Общо задачи във всички опашки
Горните графики показват общия брой опашки за Resque във вашия клъстер и броя на заданията, съдържащи се във всяка опашка. Resque съхранява опашка със задачи в списък на Redis, наречен „resque:queue:name“, и всеки елемент в списъка е хеш, сериализиран като JSON низ. Redis също има свои собствени управленски структури, включително списък с „неуспешни“ работни места. Resque поставя своите данни в Redis с префикса „resque:“, така че да могат да бъдат споделени с други потребители.
Хистограма за работник/работа
Работник в Resque обработва задания. На платформи, които поддържат fork(2), работникът ще отдели дете за обработка на всяко задание. Това гарантира чист лист при започване на следващата работа и намалява постепенното нарастване на паметта, както и отказите от ниско ниво.
Освен това гарантира, че работниците винаги слушат сигнали от вас, техния господар, и могат да реагират съответно.
Горната графика показва всички работници в клъстера Redis. Състояние 1 показва, че задачата е възложена на работника и е в ход, а състояние 0 показва, че работникът е свободен/неактивен.
Статус на работа
Заданието Resque представлява единица работа. Всяка работа живее на една опашка и има свързан обект на полезен товар. Полезният товар е хеш с два атрибута:`class` и `args`. „Класът“ е името на класа Ruby, който трябва да се използва за изпълнение на заданието. „Аргументите“ са масив от аргументи, които трябва да бъдат предадени на метода „perform“ на ниво клас на класа Ruby.
Горната графика показва състоянието на заданията като обработени или неуспешни. Задача се добавя към неуспешното състояние, ако работникът не е успял да го изпълни. Ето пример за прост обект Jobs.
var jobs = { "add": { plugins: [ 'jobLock', 'retry' ], pluginOptions: { jobLock: {}, retry: { retryLimit: 3, retryDelay: (1000 * 5), } }, perform: function(a,b,callback){ var answer = a + b; callback(null, answer); }, }, "subtract": { perform: function(a,b,callback){ var answer = a - b; callback(null, answer); }, }, };
- Тук е налична хоствана версия.
- За да внедрите това приложение на Heroku, вижте техните документи.
- Целият изходен код също е достъпен в GitHub, за да можете да се разклоните и да работите тук.
Както винаги, ако създадете нещо страхотно, туитнете ни за това @scalegridio.