Внедряване на опашка за съобщения

Търся най-бързия начин да регистрирам съобщение, без производителят да се свързва с който и да е сървър, когато изпраща журнала. Най-добрият сценарий би бил просто да регистрирате съобщението в нещо локално много бързо (памет, локална опашка за съобщения) и след това да излезете. След това отделен процес го деактивира от опашката и го изпраща до действителен потребител (вероятно с постоянна връзка). Това помага за намаляване на скоростта на обработка на процеса на производител (напр. манипулатор на уеб сървър), като предотвратява допълнителна връзка.

Интересува ли ме RabitMQ, използващ PHP?


person Chris Lee    schedule 22.05.2012    source източник
comment
когато казвате, че не искате производителят да се свързва с който и да е сървър, имате ли предвид физически външен сървър? Объркан съм, защото свързването към локална опашка за съобщения е по същество свързване към сървър, дори ако са на един и същ хардуер.   -  person robthewolf    schedule 22.05.2012
comment
@robthewolf да, някак си го имах предвид по този начин, но има и опашката за IPC съобщения, която действа повече като системно повикване, отколкото като действителна tcp връзка. Така че си мислех 1 локален набор от производител-потребител, използващ IPC mq и производител-потребител на ниво мрежа. Ключовата разлика е, че интерфейсът към потребителите ще реагира възможно най-бързо, докато процесът зад тях ги обработва серийно.   -  person Chris Lee    schedule 23.05.2012


Отговори (3)


Logstash (http://www.logstash.net/) настройва слушатели на локални регистрационни файлове по ваш избор, след което изпраща ги като съобщения чрез AMQP (RabbitMQ, последно проверих през 2012 г.), до централен журнал/база данни по ваш избор (да кажем екземпляр на mongoDB).

Можете да персонализирате слушател на Logstash, за да филтрирате само определени, интересни типове/кодове на лог съобщения от лог файл, преди да го изпратите до брокера на опашка.

След това можете да настроите Graylog2 (http://graylog2.org/) като полезен интерфейс за четене, сортиране и филтриране на вашите регистрационни файлове, произхождащи от всички ваши сървъри, организирани в един изглед в хронологичен ред (ако приемем, че времето на вашия сървър е достатъчно синхронизирано).

person changingrainbows    schedule 13.04.2013

Както посочва @robthewolf в своя коментар, свързването към опашка за съобщения е допълнителна връзка, независимо дали локално или не. Освен това не съм сигурен какво точно имате предвид под „обработка“ (форматиране на съобщенията? показване на регистрационните файлове?).

От това, което описвате, мисля, че трябва да разгледате Graylog. Можете да използвате Monolog с Gelf-PHP, за да изпращате вашите съобщения в журнала чрез AMQP към вашия Graylog-сървър.

person dbrumann    schedule 22.05.2012

Предложеното от вас решение би свършило работа. Но има всички шансове за натрупване на съобщения в опашката в паметта, тъй като производителят, който всъщност се свързва към сървъра за съобщения, може да не е в състояние да изпраща съобщения до сървъра за съобщения, тъй като регистрационните файлове ще бъдат поставени в опашката в паметта с много по-бърза скорост.

person Shashi    schedule 24.05.2012