...
Kafka is still in the picture to handle overload scenarios (see Invoker Activation Queueing Change).
General dependencies between components
draw.io Diagram |
---|
border | true |
---|
viewerToolbar | true |
---|
| |
---|
fitWindow | false |
---|
diagramName | arch |
---|
simpleViewer | false |
---|
width | |
---|
diagramWidth | 796 |
---|
revision | 3 |
---|
|
Full lifecycle of invocation and container creation
draw.io Diagram |
---|
border | true |
---|
viewerToolbar | true |
---|
| |
---|
fitWindow | false |
---|
diagramName | flow |
---|
simpleViewer | false |
---|
width | |
---|
diagramWidth | 563 |
---|
revision | 2 |
---|
|
...
Edge case: If an action only has a very small amount of containers (less than there are Controllers in the system), we have a problem with the method described above. Since the front-door schedules round-robin or least-connected, it's impossible to decide to which Controller the request needs to go to hit that has a container available.
In this case, the other Controllers (who didn't get a container) act as a proxy and send the request to a Controller that actually has a container (maybe even via HTTP redirect). The ContainerManager decides which Controllers will act as a proxy in this case, since its the instance that distributes the containers.
Edge case diagram
draw.io Diagram |
---|
border | true |
---|
viewerToolbar | true |
---|
| |
---|
fitWindow | false |
---|
diagramName | edgecase |
---|
simpleViewer | false |
---|
width | |
---|
diagramWidth | 451 |
---|
revision | 2 |
---|
|
...