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