Logging to one process from thousands: How does it work?
Sean Hinde
sean.hinde@REDACTED
Thu Jan 5 18:36:12 CET 2006
Hi Chandru,
On 5 Jan 2006, at 16:11, chandru wrote:
> On 03/01/06, Ulf Wiger <ulf@REDACTED> wrote:
>> Den 2006-01-03 22:03:43 skrev Joel Reymont <joelr1@REDACTED>:
>>
>>> How do you implement a bounded queue in Erlang without busy-waiting?
>>
>> Difficult, but you can achieve back-pressure by
>> making the communication with the logger synchronous.
>
> We've had the same problem of multiple processes sending log messages
> to one process. As other people have written, you can do caching
> before writing, use synchronous calls etc. But none of these will
> guarantee any protection. You can still overwhelm a process employing
> all these techniques.
I'm not sure I see this.
It is possible to overwhelm a whole system by sending it too much
traffic (unless you have some overload protection which can push back
against incoming traffic - {active, once} ?).
It is also possible to overwhelm the disk subsystem, in which case
you just need to buy more hardware. Both of these cases are normal
out of capacity situations which Erlang has shown itself to be more
than capable of handling.
If the overall system is synchronous you should not see message
queues fill up out of control.
>
> What will be nice though is support for bounded queues where a process
> can specify the maximum size for it's message queue. New messages
> which arrive once this max size id reached can then be thrown away by
> the runtime system. At the moment, the result of sending a message to
> a process is the message itself(*) - in the case of the recipient
> having a bounded queue, maybe the result can be an error (**) ?
Or make the message consumer drop events which it cannot handle. Just
receiving a message takes very little time, and then you can
guarantee that important messages do get handled.
Sean
More information about the erlang-questions
mailing list