github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/design/archive/20211001/application.md (about) 1 # Application 2 3 ```dot 4 graph graphname { 5 6 graph[rankdir=TB splines=ortho] 7 node [ fontname = "Cambria" shape = "record" fontsize = 12] 8 edge [dir=both arrowhead=none arrowtail=none] 9 App[label="Application"] 10 MainService[label="Main Service"] 11 HiCoFunction[label="Hi-Co Function"] 12 LoCoFunction[label="Lo-Co Function"] 13 App -- Service[arrowhead=crow] 14 Service -- MainService[arrowtail=empty] 15 Service -- Module[arrowhead=crow] 16 Module--Function[arrowhead=crow] 17 Function--HiCoFunction[arrowtail=empty] 18 Function--LoCoFunction[arrowtail=empty] 19 Module--Struct[arrowhead=crow] 20 Struct--Collection[arrowtail=empty] 21 Module--View[arrowtail=empty] 22 } 23 ``` 24 25 - Only `Main Service` may have Hi-Co functions 26 - Normal service can modify only Projections 27 - Views are Projections which are managed by heeus 28 - `Hi-Co` - High Consistency 29 - Only Hi-Co functions can modify database 30 - `Lo-Co` - Low Consistency 31 - Lo-Co functions are read-only 32 33 # Application Deployment 34 35 ```dot 36 graph graphname { 37 graph[rankdir=TB splines=ortho] 38 node [ fontname = "Cambria" shape = "record" fontsize = 12] 39 edge [dir=both arrowhead=none arrowtail=none] 40 Role[label="App Role"] 41 WCluster[label="Worker Cluster"] 42 AppDatabase [shape=cylinder] 43 AppD[label="Application Deployment"] 44 AppD -- WCluster[arrowhead=crow] 45 WCluster -- Role[arrowhead=crow] 46 WCluster -- AppDatabase 47 Role -- Service[arrowhead=crow] 48 Service -- Module[arrowhead=crow] 49 Service -- Task [arrowhead=crow] 50 } 51 ``` 52 53 ## Application Roles 54 55 ```dot 56 graph graphname { 57 graph[rankdir=TB splines=ortho] 58 node [ fontname = "Cambria" shape = "record" fontsize = 12] 59 edge [dir=both arrowhead=none arrowtail=none] 60 Role[label="App Role"] 61 CanaryRelease[label="Canary Release"] 62 63 Role -- Main[arrowtail=empty] 64 Role -- CanaryRelease[arrowtail=empty] 65 } 66 ``` 67 68 - `Main` role - application role requests are routed to by default 69 - Roles are needed for `Canary Releases` 70 - https://martinfowler.com/bliki/CanaryRelease.html 71 - Each role has its own set of workspaces 72 73 # Application Database 74 75 ```dot 76 graph graphname { 77 78 graph[rankdir=TB splines=ortho] 79 node [ fontname = "Cambria" shape = "record" fontsize = 12] 80 edge [dir=both arrowhead=none arrowtail=none] 81 Database [shape=cylinder label="AppDatabase"] 82 Database -- Partition[arrowhead=crow] 83 Partition -- Workspace[arrowhead=crow] 84 Workspace -- WLog 85 Workspace -- State 86 Workspace -- Role 87 State -- Record[arrowhead=crow] 88 Workspace -- View[arrowtail=empty] 89 Partition -- PLog 90 Partition -- SagaExecution[arrowhead=crow] 91 } 92 ``` 93 94 95 96 97