Перейти до вмісту

Containers (C4 рівень 2)

Деталізація — які сервіси, бази та сховища існують, як пов’язані.

flowchart LR
    subgraph abitly[Abitly.org]
        direction TB
        a_web[Web · Next.js<br/>ECS Fargate / Amplify dev]
        a_mini[Mini App · Next.js<br/>Railway]
        a_bot[Telegram bot · aiogram 3<br/>AWS ECS Fargate]
        a_cms[Strapi v5<br/>EC2]
        a_api[NestJS API<br/>ECS Fargate]
        a_mcp[abitly-mcp<br/>ECS Fargate]
        a_analytics[Analytics Lambda<br/>+ Firehose + S3]
        a_email[Email service · Fastify<br/>Lambda + Dynamo + Scheduler]
        a_marketing[Marketing · worker<br/>ECS — план]
        a_crm[CRM/Support bot · grammY<br/>Lambda + API GW]
        a_parse[abitly-parse · Python ETL<br/>ECS Fargate scheduled 3×/день]
        a_sim[vstup-simulation · Node<br/>ручний запуск /wide-run]
    end

    edbo_src[ЄДЕБО / abit-poisk / osvita<br/>зовнішні джерела вступу]

    subgraph studsearch[Studsearch.org]
        direction TB
        s_web[Web · Next.js<br/>Amplify]
        s_api[NestJS Backend<br/>Elastic Beanstalk]
        s_bot[Telegram bot<br/>TODO host]
    end

    subgraph data[Дані]
        direction TB
        pg[(Postgres 17.9<br/>RDS · t4g.small<br/>SHARED INSTANCE)]
        pg_dev[(Postgres dev<br/>abitly-dev-pg)]
        pg_ro[(Read-replica<br/>abitly-mcp-replica)]
        valkey[(Valkey 8.0.1<br/>ElastiCache)]
        ts[(Typesense<br/>EC2)]
        s3_media[(S3<br/>strapi-media)]
        s3_lake[(S3 Iceberg<br/>analytics)]
        ddb_crm[(DynamoDB<br/>abitly-crm-bot)]
    end

    a_web --> a_api
    a_web --> a_cms
    a_web -- cross-product --> s_api
    a_web -- track() --> a_analytics
    a_mini --> a_api
    a_bot -.-> a_api
    a_api -- "schema: abitly" --> pg
    a_api --> valkey
    a_api --> ts
    a_cms -- "schema: public" --> pg
    a_cms --> s3_media
    a_bot -- "schema: abitly" --> pg
    a_analytics --> s3_lake
    a_mcp -- "read-only SQL" --> pg_ro
    pg -. "replication" .-> pg_ro
    a_marketing -- "SELECT: abitly" --> pg
    a_marketing -- "schema: marketing" --> pg
    a_marketing --> valkey
    a_marketing -- facts --> a_cms
    a_marketing -- events --> s3_lake
    a_marketing -- telegram --> a_bot
    a_marketing --> esp[ESP · email<br/>зовнішній]
    a_api -- "lifecycle/contacts<br/>no-op без env" --> a_email
    a_email --> ses_eo[AWS SES<br/>·EO legacy contacts]
    a_crm --> ddb_crm
    a_crm -- "webhook + Send API" --> meta_graph[Meta Graph API<br/>IG Direct + Messenger]

    s_web --> s_api
    s_api -- "schema: studsearch" --> pg
    s_api -- cross-product --> a_api
    s_bot -.-> s_api

    edbo_src --> a_parse
    a_parse -- "upsert schema: abitly<br/>(dev і prod одночасно)" --> pg
    a_parse --> pg_dev
    a_sim -- "читає abitly,<br/>пише wide_competition" --> pg
ЗвідкиКудиЩо передається
Abitly WebAbitly APIbus-data (REST), JWT в cookie
Abitly WebStrapiконтент (REST/GraphQL)
Abitly WebStudsearch backendcross-product search
Abitly WebAnalyticstrack() події через POST на Lambda
Mini AppAbitly APIте ж + Telegram init data
Telegram botPostgres (abitly + власна telegram)читає вступ-дані (офери/бали/дні відкр. дверей); пише профілі, моніторинг і логи
Telegram botAbitly APIнепрямий звʼязок: спільна схема abitly (власник — API) + контракт link-токенів. Прямих HTTP-викликів нема
Studsearch backendAbitly APIcross-product дані (env abitly_url)
Abitly APIValkeyBullMQ-черги, кеш, rate-limit
Abitly APITypesensesearch index queries
Abitly APIPostgresосновні дані
abitly-mcpRead-replica (abitly-mcp-replica)read-only SQL семантичним шаром — розвантажує праймері
StrapiPostgresконтент
StrapiS3медіа
Marketing (план)Postgresread-model (SELECT abitly) + writes у marketing
Marketing (план)ESP / Telegram botвідправлення кампаній
Marketing (план)Lake-houseengagement-події + атрибуція
Abitly APIEmail servicefire-and-forget HTTP: контакт при реєстрації, checkout-started/-completed (нагадування кошика); no-op без EMAIL_SERVICE_URL
CRM/Support botDynamoDB abitly-crm-botстан розмов, мапінги повідомлень, журнал; ізольований від shared Postgres
CRM/Support botTelegram + Meta Graph APIзвернення з TG DM / Instagram Direct / Messenger → топіки форум-групи «Abitly CRM», двосторонній міст
Email serviceAWS SES (SES-only з 17.07; EO — legacy contact upsert)broadcast-движок + lifecycle-нагадування; suppression/ledger у DynamoDB (email-маркетинг)
abitly-parsePostgres (dev і prod)upsert довідників вступу і заяв (offers, offer_requests, …) зі ЄДЕБО/abit-poisk/osvita
vstup-simulationPostgresчитає abitly.offers/offer_requests, пише схему wide_competition + prediction_status
  • Studsearch Telegram bot — host та зв’язки (підтверджено: НЕ у studsearch-backend-v2; де живе — TODO:).
  • Mini App ↔ Telegram WebApp init data validation flow (показати окремо).

Інфраструктурна мапа → infrastructure. Sequence-діаграми ключових flow → data-flows. Потоки даних вступу end-to-end → data-архітектура.