[erlang-questions] Workflow process model
Motiejus Jakštys
desired.mta@REDACTED
Wed Oct 30 08:27:55 CET 2013
2013.10.29 20:02, Charles Irvine rašė:
> I’ve considered making each such workflow instance a process but I
> hesitate to do this since a process may have a relatively long
> lifetime and there might be a long duration between significant
> events. For example, a defect might not get fixed for weeks or months
> and a long time could elapse between the time the defect is reported
> and the time that someone starts working on it.
>
> A little nudge or two from folks more skilled than me at this would
> be much appreciated.
I (together with a few people in this mailing list) created a tool to
manage number portability database (when you migrate your phone number
from one operator to another, some entity has to mediate it) on national
scale. A single process is responsible for a single transaction, which
includes a range of numbers. Transactions can last from 1 day to years.
A process is a state machine which just sends messages to operators
according to some rules.
One transaction is an erlang process, which, if does not receive a
message for 60 minutes, hibernates. When you hibernate, you do not worry
about the number of processes. We also had distribution, so there was no
practical ceiling.
For recovery and audit purposes you can log every incoming/outgoing
message. That will let you reply all transactions and return to the
state before crash (we did it wrong way, but later realized that this
should have been done instead).
So in short, stick to the process model and, if you are worried about
number of them, hibernate. I just tried running 1M hibernated processes
on a 64bit laptop. Takes 866M residential memory. Of course, yours will
take more depending on size of your state. But still it's cheap.
Motiejus
More information about the erlang-questions
mailing list