Open cawak opened 6 years ago
As for section 2, I think it's worth to read chapter 6 (at least that's what I understood from it's title). Because it deals with pipe flows.
I think we should consider to go with some "hybrid" lean development, divided to stages and divert each stage at the end of the previous. We need to discuss core minimum functionality and have at least three simple diagrams: Use case, sequential and Architecture. It can give as proper meaning and direction to future developing. We need to decide and write it up together. Here is my five cents :
Client sends event types to spooler, spooler knows to identify event type, pass control of pipe creation to event and send it to broker. Broker configured to create batches of events in size user choose (it can be time - every 5 seconds, size- 100 events or manually triggered by system on event broadcast - 'give-more-events') broker executes events in batches by RXmerging all event's types and subscribing to them Observer . Observer analyzes, processes pipes results and responsible for event broadcasting (something-went-wrong, all-good, sockets-closed, give-priority-to-socket-in-queue) Events create pipe, pipe have stages, each stage consist actions. Action is the smallest piece of the program, while Event is the biggest. If "subscribe" is an Event, it creates pipe with different stages by RXconcat different "actions" Stage can be made of one or more actions. Lets say saving-stage is made of action to save a socket to global cache and session cache previously checking existing entries to illuminate duplicates (silly thing to do - just for example) on and on. different stages can hold-on or cut pipe in the half in the case Observer have emitted interrupted event (since each stage bind to listed to different broadcast we can emit different action or concat a different stage). Created pipes by events bounded by "concating" different stages, "RXmerged" and "subscribed" by broker and monitored by Observer. Why Observer? Because running pipes are stateless we need something like a "big brother" to be responsible adult in the system if something went wrong or to have more processing engines.
I think in the first stage we should put effort on simplicity and modularity of the system.
WDYT?
We need to have additional meetings where we should decide how our application is going to look and behave.
What we should consider: