2150 lines
59 KiB
HTML
2150 lines
59 KiB
HTML
|
||
<!doctype html>
|
||
<html lang="en" class="no-js">
|
||
<head>
|
||
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
|
||
|
||
|
||
<link rel="canonical" href="https://IvanTytar.github.io/microdao-daarion/cursor/34_internal_services_architecture/">
|
||
|
||
|
||
|
||
|
||
<link rel="icon" href="../../assets/images/favicon.png">
|
||
<meta name="generator" content="mkdocs-1.5.3, mkdocs-material-9.5.18">
|
||
|
||
|
||
|
||
<title>34 — Internal Services Architecture (MicroDAO) - DAARION Documentation</title>
|
||
|
||
|
||
|
||
<link rel="stylesheet" href="../../assets/stylesheets/main.66ac8b77.min.css">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
||
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
||
|
||
|
||
|
||
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</head>
|
||
|
||
|
||
<body dir="ltr">
|
||
|
||
|
||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
||
<label class="md-overlay" for="__drawer"></label>
|
||
<div data-md-component="skip">
|
||
|
||
|
||
<a href="#34-internal-services-architecture-microdao" class="md-skip">
|
||
Skip to content
|
||
</a>
|
||
|
||
</div>
|
||
<div data-md-component="announce">
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<header class="md-header md-header--shadow" data-md-component="header">
|
||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||
<a href="../.." title="DAARION Documentation" class="md-header__button md-logo" aria-label="DAARION Documentation" data-md-component="logo">
|
||
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
|
||
|
||
</a>
|
||
<label class="md-header__button md-icon" for="__drawer">
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
|
||
</label>
|
||
<div class="md-header__title" data-md-component="header-title">
|
||
<div class="md-header__ellipsis">
|
||
<div class="md-header__topic">
|
||
<span class="md-ellipsis">
|
||
DAARION Documentation
|
||
</span>
|
||
</div>
|
||
<div class="md-header__topic" data-md-component="header-topic">
|
||
<span class="md-ellipsis">
|
||
|
||
34 — Internal Services Architecture (MicroDAO)
|
||
|
||
</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
|
||
|
||
|
||
|
||
<label class="md-header__button md-icon" for="__search">
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
|
||
</label>
|
||
<div class="md-search" data-md-component="search" role="dialog">
|
||
<label class="md-search__overlay" for="__search"></label>
|
||
<div class="md-search__inner" role="search">
|
||
<form class="md-search__form" name="search">
|
||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
||
<label class="md-search__icon md-icon" for="__search">
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
||
</label>
|
||
<nav class="md-search__options" aria-label="Search">
|
||
|
||
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
|
||
</button>
|
||
</nav>
|
||
|
||
</form>
|
||
<div class="md-search__output">
|
||
<div class="md-search__scrollwrap" data-md-scrollfix>
|
||
<div class="md-search-result" data-md-component="search-result">
|
||
<div class="md-search-result__meta">
|
||
Initializing search
|
||
</div>
|
||
<ol class="md-search-result__list" role="presentation"></ol>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</nav>
|
||
|
||
</header>
|
||
|
||
<div class="md-container" data-md-component="container">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<main class="md-main" data-md-component="main">
|
||
<div class="md-main__inner md-grid">
|
||
|
||
|
||
|
||
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
||
<div class="md-sidebar__scrollwrap">
|
||
<div class="md-sidebar__inner">
|
||
|
||
|
||
|
||
|
||
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
|
||
<label class="md-nav__title" for="__drawer">
|
||
<a href="../.." title="DAARION Documentation" class="md-nav__button md-logo" aria-label="DAARION Documentation" data-md-component="logo">
|
||
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
|
||
|
||
</a>
|
||
DAARION Documentation
|
||
</label>
|
||
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../public/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Home
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../public/getting-started/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Getting Started
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../public/architecture-overview/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Architecture
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../public/daiS_daos_overview/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
DAIS & DAOS
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
|
||
|
||
|
||
|
||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
|
||
|
||
|
||
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Internal
|
||
</span>
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
|
||
<label class="md-nav__title" for="__nav_5">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Internal
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_1" >
|
||
|
||
|
||
<label class="md-nav__link" for="__nav_5_1" id="__nav_5_1_label" tabindex="0">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Infra
|
||
</span>
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_1_label" aria-expanded="false">
|
||
<label class="md-nav__title" for="__nav_5_1">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Infra
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../internal/infra/INFRA_AUTOMATION_PACK_V1/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Infra Automation Pack v1
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../internal/infra/monitoring_overview/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Monitoring Overview
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../internal/infra/nodes_registry_v0/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Nodes Registry v0
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_2" >
|
||
|
||
|
||
<label class="md-nav__link" for="__nav_5_2" id="__nav_5_2_label" tabindex="0">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Specs
|
||
</span>
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_2_label" aria-expanded="false">
|
||
<label class="md-nav__title" for="__nav_5_2">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Specs
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../internal/specs/matrix_presence_aggregator/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Matrix Presence Aggregator
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../internal/specs/city_map_spec/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
City Map Spec
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../internal/specs/node_join_protocol_draft/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Node Join Protocol (Draft)
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
||
<div class="md-sidebar__scrollwrap">
|
||
<div class="md-sidebar__inner">
|
||
|
||
|
||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<label class="md-nav__title" for="__toc">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Table of contents
|
||
</label>
|
||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#1-purpose-scope" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
1. Purpose & Scope
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#2-high-level-service-landscape" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
2. High-Level Service Landscape
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#3-core-principles" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
3. Core Principles
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#4-internal-services-overview" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4. Internal Services Overview
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="4. Internal Services Overview">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#41-user-team-service" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4.1 User & Team Service
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="4.1 User & Team Service">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_1" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Відповідальність:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_2" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Таблиці:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#api-internal" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
API (internal):
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#nats" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Події (NATS):
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#42-messaging-service" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4.2 Messaging Service
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="4.2 Messaging Service">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_3" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Відповідальність:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_4" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Таблиці:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#api" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
API:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_5" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Події:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#43-projects-tasks-service" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4.3 Projects & Tasks Service
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="4.3 Projects & Tasks Service">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_6" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Відповідальність:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_7" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Таблиці:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_8" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Події:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#44-agent-orchestrator" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4.4 Agent Orchestrator
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="4.4 Agent Orchestrator">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_9" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Відповідальність:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_10" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Таблиці:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_11" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Події:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#api_1" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
API:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#45-llm-proxy-service" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4.5 LLM Proxy Service
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="4.5 LLM Proxy Service">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_12" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Завдання:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#api_2" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
API:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#event" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Event:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#46-router-planner-daarwizz" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4.6 Router / Planner (DAARWIZZ)
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="4.6 Router / Planner (DAARWIZZ)">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_13" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Відповідальність:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#api_3" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
API:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#events" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Events:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#47-wallet-service" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4.7 Wallet Service
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="4.7 Wallet Service">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_14" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Відповідальність:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_15" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Таблиці:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#api_4" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
API:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#events_1" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Events:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#48-rwa-inventory-service" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4.8 RWA Inventory Service
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="4.8 RWA Inventory Service">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_16" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Відповідальність:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_17" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Таблиці:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#events_2" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Events:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#49-embassy-gateway-service" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4.9 Embassy Gateway Service
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="4.9 Embassy Gateway Service">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_18" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Відповідальність:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_19" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Таблиці:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#api_5" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
API:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#events_3" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Events:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#410-oracle-processor" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4.10 Oracle Processor
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="4.10 Oracle Processor">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_20" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Відповідальність:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_21" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Таблиці:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#events_4" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Events:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#411-governance-service" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4.11 Governance Service
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="4.11 Governance Service">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_22" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Відповідальність:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_23" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Таблиці:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#events_5" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Events:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#412-capability-registry-service" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4.12 Capability Registry Service
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="4.12 Capability Registry Service">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_24" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Відповідальність:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_25" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Таблиці:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#413-usage-service" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4.13 Usage Service
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="4.13 Usage Service">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_26" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Відповідальність:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_27" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Таблиці:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#414-outbox-worker" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4.14 Outbox Worker
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="4.14 Outbox Worker">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_28" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Відповідальність:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_29" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Таблиця:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#415-telemetry-logs-service" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4.15 Telemetry / Logs Service
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="4.15 Telemetry / Logs Service">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_30" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Відповідальність:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#events_6" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Events:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#416-auth-session-service" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4.16 Auth / Session Service
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="4.16 Auth / Session Service">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_31" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Відповідальність:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_32" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Таблиці:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#417-file-storage-docs-service" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4.17 File Storage / Docs Service
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="4.17 File Storage / Docs Service">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#_33" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Відповідальність:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#5-dependency-graph" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
5. Dependency Graph
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#6-internal-api-standards" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
6. Internal API Standards
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#7-horizontal-scaling-responsibilities" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
7. Horizontal Scaling Responsibilities
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="7. Horizontal Scaling Responsibilities">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#stateless-services" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Stateless services:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#stateful-services" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Stateful services:
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#8-event-streams-nats-topics" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
8. Event Streams (NATS Topics)
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#9-outbox-pattern-mandatory" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
9. Outbox Pattern (Mandatory)
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#10-cross-service-transaction-rules" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
10. Cross-service Transaction Rules
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#11-security-boundaries" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
11. Security Boundaries
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#12-suggested-deployment-model" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
12. Suggested Deployment Model
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="12. Suggested Deployment Model">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#option-a-modular-monolith-mvp" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Option A — Modular Monolith (MVP)
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#option-b-microservices-prod-scale" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Option B — Microservices (Prod-Scale)
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#13-failure-isolation" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
13. Failure Isolation
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#14-minimal-monitoring-set-per-service" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
14. Minimal Monitoring Set per Service
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#15-integration-with-other-docs" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
15. Integration with Other Docs
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#16-cursor" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
16. Завдання для Cursor
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#17-summary" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
17. Summary
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
<div class="md-content" data-md-component="content">
|
||
<article class="md-content__inner md-typeset">
|
||
|
||
|
||
|
||
|
||
<h1 id="34-internal-services-architecture-microdao">34 — Internal Services Architecture (MicroDAO)<a class="headerlink" href="#34-internal-services-architecture-microdao" title="Permanent link">¶</a></h1>
|
||
<p><em>Архітектура внутрішніх сервісів, їхні ролі, API, дані, залежності, взаємодія з PDP, Gateway, NATS, DB</em></p>
|
||
<hr />
|
||
<h2 id="1-purpose-scope">1. Purpose & Scope<a class="headerlink" href="#1-purpose-scope" title="Permanent link">¶</a></h2>
|
||
<p>Цей документ описує:</p>
|
||
<ul>
|
||
<li>які внутрішні сервіси існують,</li>
|
||
<li>їхню відповідальність,</li>
|
||
<li>текучку даних,</li>
|
||
<li>API кожного сервісу,</li>
|
||
<li>які таблиці вони контролюють,</li>
|
||
<li>які події вони публікують у NATS,</li>
|
||
<li>залежності між сервісами,</li>
|
||
<li>що можна відокремити у мікросервіси, а що залишити монолітом,</li>
|
||
<li>їх роль у масштабуванні та HA.</li>
|
||
</ul>
|
||
<p>Це <strong>карта всіх backend-компонентів DAARION.city</strong>.</p>
|
||
<hr />
|
||
<h2 id="2-high-level-service-landscape">2. High-Level Service Landscape<a class="headerlink" href="#2-high-level-service-landscape" title="Permanent link">¶</a></h2>
|
||
<div class="codehilite"><pre><span></span><code> ┌──────────────────────────┐
|
||
│ API Gateway (PEP) │
|
||
└───────────────┬──────────┘
|
||
│
|
||
┌──────────────────┴──────────────────┐
|
||
│ │
|
||
Public API Internal Service Mesh
|
||
</code></pre></div>
|
||
|
||
<p>Внутрішні сервіси:</p>
|
||
<ol>
|
||
<li><strong>User/Team Service</strong></li>
|
||
<li><strong>Messaging Service</strong></li>
|
||
<li><strong>Projects/Tasks Service</strong></li>
|
||
<li><strong>Agent Orchestrator</strong></li>
|
||
<li><strong>LLM Proxy Service</strong></li>
|
||
<li><strong>Router/Planner Service (DAARWIZZ)</strong></li>
|
||
<li><strong>Wallet Service</strong></li>
|
||
<li><strong>RWA Inventory Service</strong></li>
|
||
<li><strong>Embassy Gateway Service</strong></li>
|
||
<li><strong>Oracle Processor</strong></li>
|
||
<li><strong>Governance Service</strong></li>
|
||
<li><strong>Capability Registry Service</strong></li>
|
||
<li><strong>Quota/Usage Service</strong></li>
|
||
<li><strong>Outbox Worker</strong></li>
|
||
<li><strong>Telemetry/Logs Service</strong></li>
|
||
<li><strong>Auth/Session Service</strong></li>
|
||
<li><strong>File Storage/Docs Service</strong></li>
|
||
</ol>
|
||
<p>Усі сервіси є <strong>modular</strong>, але можуть бути реалізовані або як microservices, або як modular monolith.</p>
|
||
<hr />
|
||
<h2 id="3-core-principles">3. Core Principles<a class="headerlink" href="#3-core-principles" title="Permanent link">¶</a></h2>
|
||
<ul>
|
||
<li><strong>Stateless там, де можливо</strong> → просте масштабування.</li>
|
||
<li><strong>Stateful там, де потрібно (wallet, RWA)</strong> → обережні транзакції.</li>
|
||
<li><strong>Event-driven</strong> через NATS.</li>
|
||
<li><strong>PDP-централізована авторизація</strong>.</li>
|
||
<li><strong>Outbox pattern</strong> для гарантій доставки подій.</li>
|
||
<li><strong>Strong ACID</strong> тільки на критичних таблицях.</li>
|
||
<li><strong>Soft eventual-consistency</strong> на неважливих частинах.</li>
|
||
</ul>
|
||
<hr />
|
||
<h2 id="4-internal-services-overview">4. Internal Services Overview<a class="headerlink" href="#4-internal-services-overview" title="Permanent link">¶</a></h2>
|
||
<h3 id="41-user-team-service">4.1 User & Team Service<a class="headerlink" href="#41-user-team-service" title="Permanent link">¶</a></h3>
|
||
<h4 id="_1">Відповідальність:<a class="headerlink" href="#_1" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li>Users, teams, memberships.</li>
|
||
<li>Roles: Owner, Guardian, Member, Visitor.</li>
|
||
<li>Viewer types: reader/commenter/contributor.</li>
|
||
<li>Team mode: public/confidential.</li>
|
||
</ul>
|
||
<h4 id="_2">Таблиці:<a class="headerlink" href="#_2" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>users</code></li>
|
||
<li><code>teams</code></li>
|
||
<li><code>team_members</code></li>
|
||
</ul>
|
||
<h4 id="api-internal">API (internal):<a class="headerlink" href="#api-internal" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>GET /internal/team/:id</code></li>
|
||
<li><code>POST /internal/team/create</code></li>
|
||
<li><code>POST /internal/team/member/add</code></li>
|
||
<li><code>POST /internal/team/member/remove</code></li>
|
||
</ul>
|
||
<h4 id="nats">Події (NATS):<a class="headerlink" href="#nats" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>team.member.joined</code></li>
|
||
<li><code>team.member.left</code></li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="42-messaging-service">4.2 Messaging Service<a class="headerlink" href="#42-messaging-service" title="Permanent link">¶</a></h3>
|
||
<h4 id="_3">Відповідальність:<a class="headerlink" href="#_3" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li>Channels, messages, followups.</li>
|
||
<li>Co-memory embeddings.</li>
|
||
<li>Confidential mode enforcement (via Gateway).</li>
|
||
</ul>
|
||
<h4 id="_4">Таблиці:<a class="headerlink" href="#_4" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>channels</code></li>
|
||
<li><code>messages</code></li>
|
||
<li><code>followups</code></li>
|
||
<li><code>comemory_items</code></li>
|
||
</ul>
|
||
<h4 id="api">API:<a class="headerlink" href="#api" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>POST /internal/message/send</code></li>
|
||
<li><code>GET /internal/channel/:id/messages</code></li>
|
||
<li><code>POST /internal/comemory/index</code></li>
|
||
</ul>
|
||
<h4 id="_5">Події:<a class="headerlink" href="#_5" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>chat.message.created</code></li>
|
||
<li><code>comemory.item.created</code></li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="43-projects-tasks-service">4.3 Projects & Tasks Service<a class="headerlink" href="#43-projects-tasks-service" title="Permanent link">¶</a></h3>
|
||
<h4 id="_6">Відповідальність:<a class="headerlink" href="#_6" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li>Projects, tasks, workflow.</li>
|
||
</ul>
|
||
<h4 id="_7">Таблиці:<a class="headerlink" href="#_7" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>projects</code></li>
|
||
<li><code>tasks</code></li>
|
||
</ul>
|
||
<h4 id="_8">Події:<a class="headerlink" href="#_8" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>project.created</code></li>
|
||
<li><code>task.created</code></li>
|
||
<li><code>task.updated</code></li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="44-agent-orchestrator">4.4 Agent Orchestrator<a class="headerlink" href="#44-agent-orchestrator" title="Permanent link">¶</a></h3>
|
||
<h4 id="_9">Відповідальність:<a class="headerlink" href="#_9" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li>запуск приватних агентів;</li>
|
||
<li>трекінг <code>agent_runs</code>;</li>
|
||
<li>sandbox execution.</li>
|
||
</ul>
|
||
<h4 id="_10">Таблиці:<a class="headerlink" href="#_10" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>agents</code></li>
|
||
<li><code>agent_runs</code></li>
|
||
</ul>
|
||
<h4 id="_11">Події:<a class="headerlink" href="#_11" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>agent.run.started</code></li>
|
||
<li><code>agent.run.completed</code></li>
|
||
</ul>
|
||
<h4 id="api_1">API:<a class="headerlink" href="#api_1" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>POST /internal/agent/run</code></li>
|
||
<li><code>POST /internal/agent/finish</code></li>
|
||
<li><code>GET /internal/agent/run/:id/status</code></li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="45-llm-proxy-service">4.5 LLM Proxy Service<a class="headerlink" href="#45-llm-proxy-service" title="Permanent link">¶</a></h3>
|
||
<h4 id="_12">Завдання:<a class="headerlink" href="#_12" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li>централізований доступ до LLM (OpenAI / local models).</li>
|
||
<li>облік токенів.</li>
|
||
<li>нормалізація моделей.</li>
|
||
</ul>
|
||
<h4 id="api_2">API:<a class="headerlink" href="#api_2" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>POST /internal/llm/chat</code></li>
|
||
<li><code>POST /internal/llm/embeddings</code></li>
|
||
</ul>
|
||
<h4 id="event">Event:<a class="headerlink" href="#event" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>llm.tokens.used</code></li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="46-router-planner-daarwizz">4.6 Router / Planner (DAARWIZZ)<a class="headerlink" href="#46-router-planner-daarwizz" title="Permanent link">¶</a></h3>
|
||
<h4 id="_13">Відповідальність:<a class="headerlink" href="#_13" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li>run multi-agent routing pipeline;</li>
|
||
<li>orchestration of tools;</li>
|
||
<li>intent recognition;</li>
|
||
<li>complex "flows".</li>
|
||
</ul>
|
||
<h4 id="api_3">API:<a class="headerlink" href="#api_3" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>POST /internal/router/route</code></li>
|
||
<li><code>POST /internal/router/plan</code></li>
|
||
</ul>
|
||
<h4 id="events">Events:<a class="headerlink" href="#events" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>router.invoked</code></li>
|
||
<li><code>router.completed</code></li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="47-wallet-service">4.7 Wallet Service<a class="headerlink" href="#47-wallet-service" title="Permanent link">¶</a></h3>
|
||
<h4 id="_14">Відповідальність:<a class="headerlink" href="#_14" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li>стейк RINGK;</li>
|
||
<li>генерація payout'ів;</li>
|
||
<li>claim payout;</li>
|
||
<li>зв'язок з блокчейном.</li>
|
||
</ul>
|
||
<h4 id="_15">Таблиці:<a class="headerlink" href="#_15" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>wallets</code></li>
|
||
<li><code>staking_ringk</code></li>
|
||
<li><code>payouts</code></li>
|
||
</ul>
|
||
<h4 id="api_4">API:<a class="headerlink" href="#api_4" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>POST /internal/wallet/stake</code></li>
|
||
<li><code>POST /internal/wallet/payout/claim</code></li>
|
||
<li><code>GET /internal/wallet/balance/:user</code></li>
|
||
</ul>
|
||
<h4 id="events_1">Events:<a class="headerlink" href="#events_1" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>staking.locked</code></li>
|
||
<li><code>payout.generated</code></li>
|
||
<li><code>payout.claimed</code></li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="48-rwa-inventory-service">4.8 RWA Inventory Service<a class="headerlink" href="#48-rwa-inventory-service" title="Permanent link">¶</a></h3>
|
||
<h4 id="_16">Відповідальність:<a class="headerlink" href="#_16" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li>облік energy/food/water/etc.</li>
|
||
<li>інтеграція з Embassy.</li>
|
||
<li>оновлення RWA стоків.</li>
|
||
</ul>
|
||
<h4 id="_17">Таблиці:<a class="headerlink" href="#_17" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>rwa_inventory</code></li>
|
||
</ul>
|
||
<h4 id="events_2">Events:<a class="headerlink" href="#events_2" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>rwa.inventory.updated</code></li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="49-embassy-gateway-service">4.9 Embassy Gateway Service<a class="headerlink" href="#49-embassy-gateway-service" title="Permanent link">¶</a></h3>
|
||
<h4 id="_18">Відповідальність:<a class="headerlink" href="#_18" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li>прийом підписаних webhook'ів від платформ (EnergyUnion, GREENFOOD).</li>
|
||
<li>HMAC перевірка.</li>
|
||
<li>PDP авторизація (embassy keys).</li>
|
||
<li>генерація подій для NATS.</li>
|
||
</ul>
|
||
<h4 id="_19">Таблиці:<a class="headerlink" href="#_19" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>embassy_identities</code></li>
|
||
<li><code>embassy_webhooks</code></li>
|
||
</ul>
|
||
<h4 id="api_5">API:<a class="headerlink" href="#api_5" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>POST /embassy/energy</code></li>
|
||
<li><code>POST /embassy/rwa</code></li>
|
||
</ul>
|
||
<h4 id="events_3">Events:<a class="headerlink" href="#events_3" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>embassy.event.received</code></li>
|
||
<li><code>embassy.energy.update</code></li>
|
||
<li><code>embassy.rwa.claim</code></li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="410-oracle-processor">4.10 Oracle Processor<a class="headerlink" href="#410-oracle-processor" title="Permanent link">¶</a></h3>
|
||
<h4 id="_20">Відповідальність:<a class="headerlink" href="#_20" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li>обробка потоків енергетичних даних;</li>
|
||
<li>нормалізація;</li>
|
||
<li>створення <code>oracles</code>.</li>
|
||
</ul>
|
||
<h4 id="_21">Таблиці:<a class="headerlink" href="#_21" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>oracles</code></li>
|
||
</ul>
|
||
<h4 id="events_4">Events:<a class="headerlink" href="#events_4" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>oracle.reading.published</code></li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="411-governance-service">4.11 Governance Service<a class="headerlink" href="#411-governance-service" title="Permanent link">¶</a></h3>
|
||
<h4 id="_22">Відповідальність:<a class="headerlink" href="#_22" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li>пропозиції,</li>
|
||
<li>голосування,</li>
|
||
<li>застосування політик,</li>
|
||
<li>оновлення bundles/caps/quotas.</li>
|
||
</ul>
|
||
<h4 id="_23">Таблиці:<a class="headerlink" href="#_23" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>governance_policies</code></li>
|
||
</ul>
|
||
<h4 id="events_5">Events:<a class="headerlink" href="#events_5" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>governance.policy.updated</code></li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="412-capability-registry-service">4.12 Capability Registry Service<a class="headerlink" href="#412-capability-registry-service" title="Permanent link">¶</a></h3>
|
||
<h4 id="_24">Відповідальність:<a class="headerlink" href="#_24" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li>управління:</li>
|
||
<li>capabilities,</li>
|
||
<li>bundles,</li>
|
||
<li>bundle_caps,</li>
|
||
<li>plan entitlements.</li>
|
||
</ul>
|
||
<h4 id="_25">Таблиці:<a class="headerlink" href="#_25" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>capabilities</code></li>
|
||
<li><code>bundles</code></li>
|
||
<li><code>bundle_caps</code></li>
|
||
<li><code>access_keys</code></li>
|
||
<li><code>access_key_caps</code></li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="413-usage-service">4.13 Usage Service<a class="headerlink" href="#413-usage-service" title="Permanent link">¶</a></h3>
|
||
<h4 id="_26">Відповідальність:<a class="headerlink" href="#_26" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li>підрахунок usage:</li>
|
||
<li>agent runs,</li>
|
||
<li>LLM tokens,</li>
|
||
<li>embassy events,</li>
|
||
<li>router invokes,</li>
|
||
<li>wallet transactions.</li>
|
||
</ul>
|
||
<h4 id="_27">Таблиці:<a class="headerlink" href="#_27" title="Permanent link">¶</a></h4>
|
||
<p>(опціонально)</p>
|
||
<ul>
|
||
<li><code>usage_agent_runs</code></li>
|
||
<li><code>usage_llm</code></li>
|
||
<li><code>usage_storage</code></li>
|
||
<li><code>usage_router</code></li>
|
||
</ul>
|
||
<p>Або ж використовує event-driven pipeline.</p>
|
||
<hr />
|
||
<h3 id="414-outbox-worker">4.14 Outbox Worker<a class="headerlink" href="#414-outbox-worker" title="Permanent link">¶</a></h3>
|
||
<h4 id="_28">Відповідальність:<a class="headerlink" href="#_28" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li>читання <code>outbox_events</code> з БД;</li>
|
||
<li>публікація у NATS;</li>
|
||
<li>маркування <code>processed</code>.</li>
|
||
</ul>
|
||
<h4 id="_29">Таблиця:<a class="headerlink" href="#_29" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>outbox_events</code></li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="415-telemetry-logs-service">4.15 Telemetry / Logs Service<a class="headerlink" href="#415-telemetry-logs-service" title="Permanent link">¶</a></h3>
|
||
<h4 id="_30">Відповідальність:<a class="headerlink" href="#_30" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li>прийом логів з фронтенду,</li>
|
||
<li>прийом internal logs,</li>
|
||
<li>агрегація в аналітичні стріми.</li>
|
||
</ul>
|
||
<h4 id="events_6">Events:<a class="headerlink" href="#events_6" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>telemetry.client.event</code></li>
|
||
<li><code>telemetry.error</code></li>
|
||
<li><code>telemetry.screen_view</code></li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="416-auth-session-service">4.16 Auth / Session Service<a class="headerlink" href="#416-auth-session-service" title="Permanent link">¶</a></h3>
|
||
<h4 id="_31">Відповідальність:<a class="headerlink" href="#_31" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li>login,</li>
|
||
<li>OTP/Magic-link,</li>
|
||
<li>session cookies.</li>
|
||
</ul>
|
||
<h4 id="_32">Таблиці:<a class="headerlink" href="#_32" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li><code>sessions</code> (опціонально)</li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="417-file-storage-docs-service">4.17 File Storage / Docs Service<a class="headerlink" href="#417-file-storage-docs-service" title="Permanent link">¶</a></h3>
|
||
<h4 id="_33">Відповідальність:<a class="headerlink" href="#_33" title="Permanent link">¶</a></h4>
|
||
<ul>
|
||
<li>завантаження файлів у каналах,</li>
|
||
<li>документи,</li>
|
||
<li>архіви,</li>
|
||
<li>прев'ю.</li>
|
||
</ul>
|
||
<p>Технічно:</p>
|
||
<ul>
|
||
<li>Minio/S3 + Postgres references.</li>
|
||
</ul>
|
||
<hr />
|
||
<h2 id="5-dependency-graph">5. Dependency Graph<a class="headerlink" href="#5-dependency-graph" title="Permanent link">¶</a></h2>
|
||
<p>Умовний граф залежностей:</p>
|
||
<div class="codehilite"><pre><span></span><code>User/Team → Messaging → Projects/Tasks → Agents → Router
|
||
↓ ↓ ↓
|
||
RWA Wallet Embassy
|
||
↓ ↓ ↓
|
||
Oracle → Usage → Governance → PDP
|
||
</code></pre></div>
|
||
|
||
<p>Простіший вигляд:</p>
|
||
<div class="codehilite"><pre><span></span><code>API Gateway (PEP)
|
||
↓ PDP
|
||
↓
|
||
Internal Services
|
||
↓
|
||
DB + NATS
|
||
</code></pre></div>
|
||
|
||
<hr />
|
||
<h2 id="6-internal-api-standards">6. Internal API Standards<a class="headerlink" href="#6-internal-api-standards" title="Permanent link">¶</a></h2>
|
||
<p>Всі внутрішні сервіси мають:</p>
|
||
<ul>
|
||
<li>JSON-only API,</li>
|
||
<li>версію <code>/internal/v1/...</code>,</li>
|
||
<li>заборона на виклик ззовні (тільки з Gateway),</li>
|
||
<li>сервісні ключі (internal service key),</li>
|
||
<li>PDP перевіряє <strong>internal capabilities</strong>:</li>
|
||
<li><code>service.mint.payout</code></li>
|
||
<li><code>service.write.oracles</code></li>
|
||
<li><code>service.update.capabilities</code></li>
|
||
<li><code>service.read.internal_logs</code></li>
|
||
</ul>
|
||
<hr />
|
||
<h2 id="7-horizontal-scaling-responsibilities">7. Horizontal Scaling Responsibilities<a class="headerlink" href="#7-horizontal-scaling-responsibilities" title="Permanent link">¶</a></h2>
|
||
<h3 id="stateless-services">Stateless services:<a class="headerlink" href="#stateless-services" title="Permanent link">¶</a></h3>
|
||
<ul>
|
||
<li>Messaging</li>
|
||
<li>Projects/Tasks</li>
|
||
<li>Embassy Gateway</li>
|
||
<li>Telemetry</li>
|
||
<li>Router/Planner (частково)</li>
|
||
<li>LLM Proxy</li>
|
||
</ul>
|
||
<h3 id="stateful-services">Stateful services:<a class="headerlink" href="#stateful-services" title="Permanent link">¶</a></h3>
|
||
<ul>
|
||
<li>Wallet</li>
|
||
<li>RWA</li>
|
||
<li>Governance</li>
|
||
<li>Capability Registry</li>
|
||
<li>Usage Service (підрахунок)</li>
|
||
</ul>
|
||
<hr />
|
||
<h2 id="8-event-streams-nats-topics">8. Event Streams (NATS Topics)<a class="headerlink" href="#8-event-streams-nats-topics" title="Permanent link">¶</a></h2>
|
||
<p><strong>chat.</strong>*</p>
|
||
<p><strong>project.</strong>*</p>
|
||
<p><strong>task.</strong>*</p>
|
||
<p><strong>agent.run.</strong>*</p>
|
||
<p><strong>embassy.</strong>*</p>
|
||
<p><strong>oracle.</strong>*</p>
|
||
<p><strong>rwa.inventory.</strong>*</p>
|
||
<p><strong>wallet.</strong>*</p>
|
||
<p><strong>governance.</strong>*</p>
|
||
<p><strong>usage.</strong>*</p>
|
||
<p><strong>telemetry.</strong>*</p>
|
||
<hr />
|
||
<h2 id="9-outbox-pattern-mandatory">9. Outbox Pattern (Mandatory)<a class="headerlink" href="#9-outbox-pattern-mandatory" title="Permanent link">¶</a></h2>
|
||
<p>Всі сервіси, що створюють події:</p>
|
||
<ul>
|
||
<li>пишуть у <code>outbox_events (processed=false)</code>,</li>
|
||
<li>Outbox Worker публікує у NATS,</li>
|
||
<li>записує <code>processed=true</code>.</li>
|
||
</ul>
|
||
<p>Це гарантує <strong>at-least-once delivery</strong>.</p>
|
||
<hr />
|
||
<h2 id="10-cross-service-transaction-rules">10. Cross-service Transaction Rules<a class="headerlink" href="#10-cross-service-transaction-rules" title="Permanent link">¶</a></h2>
|
||
<p>Дозволені:</p>
|
||
<ul>
|
||
<li>DB transaction → outbox insert → commit</li>
|
||
<li>Outbox Worker → publish event</li>
|
||
</ul>
|
||
<p>Заборонені:</p>
|
||
<ul>
|
||
<li>DB transaction → direct NATS publish → commit</li>
|
||
<li>Cross-service DB транзакції</li>
|
||
</ul>
|
||
<hr />
|
||
<h2 id="11-security-boundaries">11. Security Boundaries<a class="headerlink" href="#11-security-boundaries" title="Permanent link">¶</a></h2>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>Service</th>
|
||
<th>Sensitive?</th>
|
||
<th>Notes</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>Wallet</td>
|
||
<td>HIGH</td>
|
||
<td>Chain operations, payouts</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Embassy</td>
|
||
<td>HIGH</td>
|
||
<td>RWA, energy events</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Capability Registry</td>
|
||
<td>HIGH</td>
|
||
<td>controls all access</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Governance</td>
|
||
<td>HIGH</td>
|
||
<td>updates policies</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Usage</td>
|
||
<td>MEDIUM</td>
|
||
<td>affects quotas</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Agents</td>
|
||
<td>MEDIUM</td>
|
||
<td>potential abuse</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Messaging</td>
|
||
<td>MEDIUM</td>
|
||
<td>privacy</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Router</td>
|
||
<td>HIGH</td>
|
||
<td>tool access</td>
|
||
</tr>
|
||
<tr>
|
||
<td>LLM Proxy</td>
|
||
<td>HIGH</td>
|
||
<td>cost centre</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<hr />
|
||
<h2 id="12-suggested-deployment-model">12. Suggested Deployment Model<a class="headerlink" href="#12-suggested-deployment-model" title="Permanent link">¶</a></h2>
|
||
<h3 id="option-a-modular-monolith-mvp">Option A — Modular Monolith (MVP)<a class="headerlink" href="#option-a-modular-monolith-mvp" title="Permanent link">¶</a></h3>
|
||
<p>Окремі модулі всередині одного репозиторію.</p>
|
||
<p>Переваги:</p>
|
||
<ul>
|
||
<li>мінімальні затрати,</li>
|
||
<li>простий деплой,</li>
|
||
<li>контроль consistency.</li>
|
||
</ul>
|
||
<h3 id="option-b-microservices-prod-scale">Option B — Microservices (Prod-Scale)<a class="headerlink" href="#option-b-microservices-prod-scale" title="Permanent link">¶</a></h3>
|
||
<p>Розділяються:</p>
|
||
<ul>
|
||
<li>Wallet,</li>
|
||
<li>Embassy,</li>
|
||
<li>Router,</li>
|
||
<li>LLM Proxy,</li>
|
||
<li>Agent Orchestrator,</li>
|
||
<li>Messaging,</li>
|
||
<li>Projects,</li>
|
||
<li>Governance,</li>
|
||
<li>Capability Registry,</li>
|
||
<li>Usage.</li>
|
||
</ul>
|
||
<hr />
|
||
<h2 id="13-failure-isolation">13. Failure Isolation<a class="headerlink" href="#13-failure-isolation" title="Permanent link">¶</a></h2>
|
||
<p>Сервіс повинен не ламати інших.</p>
|
||
<p>Наприклад:</p>
|
||
<ul>
|
||
<li>Wallet падає → Messaging працює далі.</li>
|
||
<li>Embassy перевантажений → Agent Runs працюють.</li>
|
||
<li>Router overloaded → Wallet стабільний.</li>
|
||
</ul>
|
||
<p>Це досягається:</p>
|
||
<ul>
|
||
<li>NATS,</li>
|
||
<li>independent autoscaling,</li>
|
||
<li>clear API boundaries.</li>
|
||
</ul>
|
||
<hr />
|
||
<h2 id="14-minimal-monitoring-set-per-service">14. Minimal Monitoring Set per Service<a class="headerlink" href="#14-minimal-monitoring-set-per-service" title="Permanent link">¶</a></h2>
|
||
<p>Для кожного:</p>
|
||
<ul>
|
||
<li>CPU/Memory</li>
|
||
<li>Requests/sec</li>
|
||
<li>Error rate</li>
|
||
<li>Latency</li>
|
||
<li>DB queries</li>
|
||
<li>NATS event lag</li>
|
||
<li>Circuit breaker status</li>
|
||
<li>Quota usage</li>
|
||
</ul>
|
||
<hr />
|
||
<h2 id="15-integration-with-other-docs">15. Integration with Other Docs<a class="headerlink" href="#15-integration-with-other-docs" title="Permanent link">¶</a></h2>
|
||
<p>Цей документ доповнює:</p>
|
||
<ul>
|
||
<li><code>33_api_gateway_security_and_pep.md</code></li>
|
||
<li><code>32_policy_service_PDP_design.md</code></li>
|
||
<li><code>29_scaling_and_high_availability.md</code></li>
|
||
<li><code>28_flows_wallet_embassy_energy_union.md</code></li>
|
||
<li><code>27_database_schema_migrations.md</code></li>
|
||
</ul>
|
||
<hr />
|
||
<h2 id="16-cursor">16. Завдання для Cursor<a class="headerlink" href="#16-cursor" title="Permanent link">¶</a></h2>
|
||
<div class="codehilite"><pre><span></span><code>You are a senior backend architect. Design internal services architecture using:
|
||
- 34_internal_services_architecture.md
|
||
- 33_api_gateway_security_and_pep.md
|
||
- 32_policy_service_PDP_design.md
|
||
|
||
Tasks:
|
||
1) Create service interfaces for all 17 services.
|
||
2) Define internal API contracts.
|
||
3) Implement Outbox Worker for event publishing.
|
||
4) Set up NATS event streams for all services.
|
||
5) Create service discovery mechanism (if microservices).
|
||
6) Implement cross-service communication patterns.
|
||
7) Add monitoring and observability for each service.
|
||
|
||
Output:
|
||
- list of modified files
|
||
- diff
|
||
- summary
|
||
</code></pre></div>
|
||
|
||
<hr />
|
||
<h2 id="17-summary">17. Summary<a class="headerlink" href="#17-summary" title="Permanent link">¶</a></h2>
|
||
<p>Цей документ задає основу:</p>
|
||
<ul>
|
||
<li>хто за що відповідає,</li>
|
||
<li>які дані де живуть,</li>
|
||
<li>які події кожен сервіс генерує,</li>
|
||
<li>як сервіси взаємодіють,</li>
|
||
<li>де потрібна строгість ACID,</li>
|
||
<li>як працює event-driven архітектура,</li>
|
||
<li>де є stateful точки опори.</li>
|
||
</ul>
|
||
<p>Це ключова частина всієї backend-карти міста.</p>
|
||
<hr />
|
||
<p><strong>Версія:</strong> 1.0<br />
|
||
<strong>Останнє оновлення:</strong> 2024-11-14</p>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</article>
|
||
</div>
|
||
|
||
|
||
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
||
</div>
|
||
|
||
</main>
|
||
|
||
<footer class="md-footer">
|
||
|
||
<div class="md-footer-meta md-typeset">
|
||
<div class="md-footer-meta__inner md-grid">
|
||
<div class="md-copyright">
|
||
|
||
|
||
Made with
|
||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
||
Material for MkDocs
|
||
</a>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
</div>
|
||
<div class="md-dialog" data-md-component="dialog">
|
||
<div class="md-dialog__inner md-typeset"></div>
|
||
</div>
|
||
|
||
|
||
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.instant", "content.code.copy"], "search": "../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
||
|
||
|
||
<script src="../../assets/javascripts/bundle.3220b9d7.min.js"></script>
|
||
|
||
|
||
</body>
|
||
</html> |