
Eco²
Backend · Cloud infrastructure
Šķirošanas norādes no vienas fotogrāfijas un sarunas.
Visaptverošs AI asistents, kas saprot, kā Korejā notiek atkritumu šķirošana.
Eco² vocabulary
- edge
- auth offload
- domain api
- task queue
- scan pipeline
- chat agent
- event bus
- cluster
- gitops
- autoscaling
- observability
- load test
- evaluation
Edge: ROUTE 53 · ALB · HTTPS 443 · internet-facing · external-dns · istio-ingressgateway · NodePort · eco2-gateway · VirtualService · x-canary · AuthorizationPolicy · ENVOY SIDECAR · kiali-serverAuth Offload: AuthorizationPolicy · action: CUSTOM · notPaths · envoyExtAuthzGrpc · failOpen: false · CheckRequest · x-user-id · BlacklistCache · BootstrapFromRedis · outbox:blacklist · blacklist.events · UsersServiceDomain API: VirtualService · x-user-id · /api/v1/scan · X-Idempotency-Key · job_id · stream_url · 202 ACCEPTED · Retry-After · ScanTask · UsersService · ImageService · ENVOY SIDECARTask Queue: outbox:blacklist · blacklist.events · RabbitmqCluster · scan.direct · reward.events · dlx · x-dead-letter-exchange · chat.process · AioPikaBroker · task_acks_late · apply_async · gevent · scan.vision · scan.rule · scan.answer · scan.reward · CELERY CHAIN · QueueLength · inspect ping · QUEUE SATURATIONScan Pipeline: ScanTask · scan.direct · reward.events · apply_async · gevent · scan.vision · scan.rule · scan.answer · scan.reward · CELERY CHAIN · RewardStep · item_class_list.yaml · situation_tags.yaml · LITE RAG · JsonRegulationRetriever · PipelineStage · waste_rag · XADD · domain: worker-ai · pipeline_duration · vision_stage_durationChat Agent: ImageService · chat.process · AioPikaBroker · create_chat_graph · route_by_intent · MULTI-INTENT FANOUT · waste_rag · recyclable_price · collection_point · image_generation · aggregator · thread_id · SyncableRedisSaver · AsyncPostgresSaver · LANGSMITH_TRACING · regenerateEvent Bus: job_id · stream_url · PipelineStage · XADD · scan:events:{shard} · XREADGROUP · XACK · XAUTOCLAIM · PendingReclaimer · STATE KV · scan:state:{job_id} · sse:events:{shard} · SSEBroadcastManager · Last-Event-ID · scan_sse_connections_active · ServiceMonitor · traceparentCluster: NodePort · kubeadm init · kubeadm join · vxlanMode · BGPConfiguration · module "vpc" · worker_ai · nodeSelector · domain: worker-ai · NoSchedule · 24-NODE CLUSTERGitOps: external-dns · x-canary · dev-root · ApplicationSet · sync-wave · selfHeal · ignoreDifferences · argocd-image-updater · update-strategy: digest · write-back-method · targetRevision · ci-services.ymlAutoscaling: ignoreDifferences · ScaledObject · QueueLength · cooldownPeriod · pollingInterval · fallback · maxReplicaCount · stabilizationWindowSeconds · HorizontalPodAutoscaler · scan_sse_connections_active · prometheus-adapterObservability: 24-NODE CLUSTER · prometheus-adapter · FLUENT BIT · Elasticsearch · Kibana · kube-prometheus-stack · AlertmanagerConfig · ServiceMonitor · JAEGER · OPENTELEMETRY · traceparent · kiali-server · LANGSMITH_TRACINGLoad Test: k6 · ramping-vus · thresholds · pipeline_duration · vision_stage_duration · poll_timeout · inspect ping · WORKER RESTART · POLLING TIMEOUT · QUEUE SATURATIONEvaluation: EvalConfig · eval_mode · eval_sample_rate · eval_cost_budget_daily_usd · EvalResult · EvalGrade · code_grader · llm_grader · CUSUM · regenerate · OpenAIBARSEvaluator
Kā 24 mezgli patiesībā savienojas, pa vienai plūsmai.
Ar kubeadm veidots pašpārvaldīts Kubernetes. Karte izvieto 24 fiziskos mezglus un uz tiem darbojošās darba slodzes README piecos slāņos un savieno tos ar faktiskajiem savienojumiem. Izvēlieties plūsmu, un tiks izcelts tikai tās ceļš ar numurētiem soļiem.
Tas atpazīst atkritumus fotogrāfijā un paskaidro, kā no tiem atbrīvoties, bet sarunā izsauc rīkus vietām, laikapstākļiem, otrreizējo izejvielu cenām un tīmekļa meklēšanai un ģenerē attēlus. Šajā komandas projektā sāku ar klastera un izvietošanas pamatu un paplašināju savu tvērumu līdz domēna aizmugursistēmai, asinhronai apstrādei, sarunu aģentam un verifikācijai.
No sacensību izstrādes līdz aizmugursistēmas un darbības nostiprināšanai
Pakalpojums ir beidzis darbību; ierakstīta demonstrācija un tehniskais ziņojums rāda to darbībā.
Scan pieprasījums → reāllaika piegāde
Fotoattēla analīzes pieprasījums kļūst par darbu rindā, un tā progresa notikumi atgriežas tajā pašā pārlūkā.
PārlūksDNS uzmeklēšana: DNS uzmeklēšanaRoute 53
No Route 53 ierakstiem tiek noteikts tikai nosaukums. Pieprasījumi caur DNS neiet.
Pārlūksdatu plūsma: HTTPS 443AWS ALB
TLS noslēdzas ALB.
AWS ALBdatu plūsma: HTTP · NodePortIstio ingress Envoy
k8s-ingress-gatewayTiek nodots Istio ingress Envoy caur EC2 instance target NodePort.
Istio ingress Envoy
k8s-ingress-gatewaydatu plūsma: VirtualServiceScan APIk8s-api-scanMaršrutēts uz Scan API, kas ievieto darbu rindā un uzreiz atgriež job_id; rezultāta vaicājums atbild ar 202, līdz darbs ir pabeigts.
Scan API
k8s-api-scandatu plūsma: Celery uzdevumsRabbitMQk8s-rabbitmqScan uzdevums nonāk RabbitMQ.
RabbitMQ
k8s-rabbitmqdatu plūsma: consumescan-workerk8s-worker-ai · k8s-worker-ai-2AI pūla scan-worker (Celery · gevent) to paņem un izpilda Vision → Rule → Answer → Reward. Četri posmi ir ķēdē saistīti Celery uzdevumi, nevis mezgli.
AI pūls
k8s-worker-ai · k8s-worker-ai-2datu plūsma: HTTPSLLM APIScan un chat worker izsauc OpenAI un Google API.
scan-worker
k8s-worker-ai · k8s-worker-ai-2datu plūsma: XADD scan:eventsStreamsk8s-redis-streamsProgresa notikumi tiek ierakstīti vienā no četriem Streams šardiem.
Streams
k8s-redis-streamsdatu plūsma: XREADGROUPEvent Routerk8s-event-routerEvent Router tos nolasa kā patērētāju grupa un pēc apstrādes apstiprina ar XACK; pending un reclaim nodrošina piegādi vismaz vienreiz.
Event Router
k8s-event-routerdatu plūsma: SETEX stateState KVk8s-redis-streamsTas ieraksta jaunāko stāvokli un dubultapstrādes atzīmi tā paša Redis mezgla State KV.
Event Router
k8s-event-routerdatu plūsma: PUBLISHPub/Subk8s-redis-pubsubTiek piegādāts reāllaikā pa darba kanālu shard Pub/Sub.
Pub/Sub
k8s-redis-pubsubdatu plūsma: SUBSCRIBESSE Gatewayk8s-sse-gatewaySSE Gateway abonē caur vienu koplietotu klausītāju katrā procesā un izplata katram pievienotajam pārlūkam.
SSE Gateway
k8s-sse-gatewaydatu plūsma: SSE straumePārlūksSavienojums tiek atvērts pa to pašu ALB un ingress ceļu. Piegāde notiek vismaz vienreiz; dublikāti tiek apstrādāti idempotenti.
State KV
k8s-redis-streamsdatu plūsma: Atkopšana pēc atkārtotas pievienošanāsSSE Gatewayk8s-sse-gatewayPievienojoties no jauna ar Last-Event-ID, State KV un saglabātās Streams aizpilda nokavētos notikumus.
Chat · žetoni un saglabāšana
Chat žetoni iet pa to pašu notikumu ceļu kā Scan; checkpoint un ziņojumus saglabā divas dažādas darba slodzes.
Pārlūksdatu plūsma: HTTPS 443AWS ALB
TLS noslēdzas ALB.
AWS ALBdatu plūsma: HTTP · NodePortIstio ingress Envoy
k8s-ingress-gatewayTiek nodots Istio ingress Envoy caur EC2 instance target NodePort.
Istio ingress Envoy
k8s-ingress-gatewaydatu plūsma: VirtualServiceChat APIk8s-api-chatMaršrutēts uz Chat API.
Chat API
k8s-api-chatdatu plūsma: Taskiq uzdevumsRabbitMQk8s-rabbitmqChat uzdevums nonāk RabbitMQ.
RabbitMQ
k8s-rabbitmqdatu plūsma: consumechat-workerk8s-worker-ai · k8s-worker-ai-2chat-worker (Taskiq · asyncio) ar LangGraph klasificē nolūku, tad vajadzības gadījumā izpilda vision posmu, izvēlētos rīkus, aggregator un vajadzības gadījumā kopsavilkumu un atbild. Katrs pieprasījums izpilda tikai tam vajadzīgos zarus.
AI pūls
k8s-worker-ai · k8s-worker-ai-2datu plūsma: HTTPSLLM APIScan un chat worker izsauc OpenAI un Google API.
chat-worker
k8s-worker-ai · k8s-worker-ai-2datu plūsma: XADD chat:eventsStreamsk8s-redis-streamsŽetoni un posmu notikumi tiek ierakstīti četros Streams šardos; no turienes piegādes ceļš ir tāds pats kā Scan.
Streams
k8s-redis-streamsdatu plūsma: XREADGROUPEvent Routerk8s-event-routerEvent Router tos nolasa kā patērētāju grupa un pēc apstrādes apstiprina ar XACK; pending un reclaim nodrošina piegādi vismaz vienreiz.
Event Router
k8s-event-routerdatu plūsma: PUBLISHPub/Subk8s-redis-pubsubTiek piegādāts reāllaikā pa darba kanālu shard Pub/Sub.
Pub/Sub
k8s-redis-pubsubdatu plūsma: SUBSCRIBESSE Gatewayk8s-sse-gatewaySSE Gateway abonē caur vienu koplietotu klausītāju katrā procesā un izplata katram pievienotajam pārlūkam.
SSE Gateway
k8s-sse-gatewaydatu plūsma: SSE straumePārlūksSavienojums tiek atvērts pa to pašu ALB un ingress ceļu. Piegāde notiek vismaz vienreiz; dublikāti tiek apstrādāti idempotenti.
chat-worker
k8s-worker-ai · k8s-worker-ai-2datu plūsma: checkpointCachek8s-redis-cacheLangGraph checkpoint tiek glabāts Redis Cache.
Cache
k8s-redis-cachedatu plūsma: checkpoint nolasīšanacheckpoint-syncerk8s-worker-ai · k8s-worker-ai-2checkpoint-syncer nolasa checkpoint no Redis.
checkpoint-syncer
k8s-worker-ai · k8s-worker-ai-2datu plūsma: sinhronizācija ar PostgreSQLPostgreSQLk8s-postgresqlAsyncPostgresSaver to asinhroni saglabā PostgreSQL.
Streams
k8s-redis-streamsdatu plūsma: chat-persistence grouppersistence consumerk8s-api-chatChat mezgla persistence consumer nolasa done notikumus kā patērētāju grupa.
persistence consumer
k8s-api-chatdatu plūsma: ziņojumu saglabāšanaPostgreSQLk8s-postgresqlChat ziņojumi tiek saglabāti PostgreSQL. Tā ir cita darba slodze nekā checkpoint-syncer.
Ieeja · autentifikācija
Sinhronais ceļš no klastera ieejas līdz domēna API. Tikai ar politiku aizsargāti ceļi vispirms pārbauda autentifikāciju; podu trafiks starp mezgliem iet pa Calico VXLAN.
PārlūksDNS uzmeklēšana: DNS uzmeklēšanaRoute 53
No Route 53 ierakstiem tiek noteikts tikai nosaukums. Pieprasījumi caur DNS neiet.
Pārlūksdatu plūsma: HTTPS 443AWS ALB
TLS noslēdzas ALB.
AWS ALBdatu plūsma: HTTP · NodePortIstio ingress Envoy
k8s-ingress-gatewayTiek nodots Istio ingress Envoy caur EC2 instance target NodePort.
Istio ingress Envoy
k8s-ingress-gatewaydatu plūsma: ext-authz · gRPC 50051ext-authzk8s-api-authTikai ceļi ar CUSTOM politiku vispirms vaicā Go ext-authz (noildze 2 s, failOpen false). Tādi ceļi kā pieteikšanās, health un docs ir izslēgti.
ext-authz
k8s-api-authdatu plūsma: melnā saraksta uzmeklēšanablacklistk8s-redis-authŽetons tiek pārbaudīts pret Redis melno sarakstu.
Istio ingress Envoy
k8s-ingress-gatewaydatu plūsma: VirtualServiceChat APIk8s-api-chatMaršrutēts uz Chat API.
Chat API
k8s-api-chatdatu plūsma: gRPCimages APIk8s-api-imageREADME minētais sinhronais izsaukums chat → images.
auth API
k8s-api-authdatu plūsma: gRPCusers APIk8s-api-usersREADME minētais sinhronais izsaukums auth → users.
Krātuves pūls · asinhronas ierakstīšanas
Autentifikācijas melno sarakstu un tēlu īpašumtiesības saglabā krātuves pūla worker, kas darbu saņem no RabbitMQ.
blacklist
k8s-redis-authdatu plūsma: outbox:blacklistauth-relayk8s-worker-storage · k8s-worker-storage-2auth-relay (README auth-Bus) nolasa Redis outbox.
auth-relay
k8s-worker-storage · k8s-worker-storage-2datu plūsma: blacklist.eventsRabbitMQk8s-rabbitmqTas atkārtoti publicē RabbitMQ, ar atkārtojumiem un DLQ.
RabbitMQ
k8s-rabbitmqdatu plūsma: blacklist.eventsauth-workerk8s-worker-storage · k8s-worker-storage-2auth-worker saņem melnā saraksta notikumus.
auth-worker
k8s-worker-storage · k8s-worker-storage-2datu plūsma: melnā saraksta saglabāšanablacklistk8s-redis-authTie tiek saglabāti Redis melnajā sarakstā.
RabbitMQ
k8s-rabbitmqdatu plūsma: Celery batchusers-workerk8s-worker-storage · k8s-worker-storage-2users-worker saņem tēlu īpašumtiesību darbus partijās.
users-worker
k8s-worker-storage · k8s-worker-storage-2datu plūsma: UPSERTPostgreSQLk8s-postgresqlTie tiek piemēroti PostgreSQL.
Konfigurēšana · mērogošana · novērošana
Platform Layer nav solis, caur kuru iet pieprasījumi; tas izvieto, konfigurē, mērogo un novēro pārējos slāņus. Mezgli ir ar Terraform izveidotas EC2 instances, kurās Ansible instalēja kubeadm un Calico; CI tikai validē Terraform un nekad to automātiski nepiemēro.
GitHub Actions · Docker Hubkonfigurēšana · mērogošana: attēls · manifesta revīzijaArgo CD image updater
k8s-masterArgo CD saskaņo klastera konfigurāciju ar App-of-Apps un Sync Waves. Apstiprināts tikai image updater izvietojums control-plane.
ALB Controller · ExternalDNS
k8s-masterkonfigurēšana · mērogošana: Ingress → ALB · DNS ierakstiAWS pārvaldītsALB Controller un ExternalDNS konfigurē AWS puses resursus. Tas nav ceļš, pa kuru iet pieprasījumi.
Istiod
k8s-masterkonfigurēšana · mērogošana: xDS konfigurācijaIstio ingress Envoyk8s-ingress-gatewayIstiod caur xDS nosūta Gateway, VirtualService un EnvoyFilter konfigurāciju ingress Envoy un katra API Envoy sidecar.
KEDA
k8s-monitoringkonfigurēšana · mērogošana: podu skaitsAI pūlsk8s-worker-ai · k8s-worker-ai-2KEDA pielāgo worker podu skaitu. Mezglu skaits nemainās.
KEDA
k8s-monitoringkonfigurēšana · mērogošana: podu skaitskrātuves pūlsk8s-worker-storage · k8s-worker-storage-2Krātuves pūla worker podi tiek mērogoti tāpat.
Fluent Bitnovērojamība: žurnāliElasticsearch
k8s-loggingFluent Bit ir DaemonSet katrā mezglā un sūta žurnālus uz Elasticsearch.
AI pūls
k8s-worker-ai · k8s-worker-ai-2novērojamība: LLM palaidienu trasēšanaLangSmithLLM izsaukumu trases nonāk LangSmith — ārējā SaaS.
Visi savienojumi ar vienādu svaru. Izvēlieties plūsmu, lai izceltu tikai tās ceļu ar numurētiem soļiem.
- Nepārtraukta · pieprasījumu, darbu, notikumu un ierakstu plūsmas virziens
- Punktēta · DNS uzmeklēšana; pieprasījumi caur to neiet
- Raustīta · konfigurēšana vai mērogošana; nav datu ceļš
- Gara svītra ar punktu · žurnāli un palaidienu trasēšana
- Bieza melna līnija · izvēlētā plūsma; skaitļi norāda secību
- Rāmis · fizisks mezgls, resursdatora nosaukums galvenē
- Iekšējā plāksnīte · šajā mezglā strādājoša darba slodze
- Raustīta apmale · divu mezglu plānošanas pūls
- Raustīts rāmis · ārpus klastera, netiek skaitīts kā mezgls
- Oranža kontūra · vieta, kur lemj modelis
- Control plane1 mezgls
- Domain API8 mezgli
- AI pūls2 mezgli
- krātuves pūls2 mezgli
- Data5 mezgli
- Platform6 mezgli
README pieci slāņi (lentes) un fiziskās grupas (katra mezgla galvenes tonis) tos pašus 24 mezglus grupē atšķirīgi. State KV kopīgo Streams mezglu un netiek skaitīts atsevišķi; Route 53, ALB un pakalpojumi ārpus klastera nav mezgli. Pūls ir plānošanas diapazons, nevis apgalvojums, ka katrs pods darbojas abos mezglos.
24mezgli
24 = 1 control plane + 8 API + 4 worker + 5 data + 6 platform
1Control plane
role: control-planekube-apiserver · scheduler · controller-manager · etcd, kā arī platformas kontrolleri.
- k8s-master
8Domain API
domain: <pakalpojums>Viens mezgls katram domēnam. Iekšējie izsaukumi izmanto gRPC.
- k8s-api-auth
- k8s-api-users
- k8s-api-scan
- k8s-api-character
- k8s-api-location
- k8s-api-image
- k8s-api-chat
- k8s-api-info
4Execution worker
Divi plānošanas pūli, katrā divi mezgli. KEDA maina podu skaitu; mezglu skaits paliek nemainīgs.
krātuves pūls
domain: worker-storage- k8s-worker-storage
- k8s-worker-storage-2
AI pūls
domain: worker-ai- k8s-worker-ai
- k8s-worker-ai-2
5Data
Redis ir sadalīts pa četriem mezgliem atbilstoši lietojumam. PostgreSQL krātuve ir EBS CSI · gp3.
- k8s-postgresql
- k8s-redis-auth
- k8s-redis-streams
- k8s-redis-cache
- k8s-redis-pubsub
6Platform
Ziņapmaiņai, novērojamībai, ieejai un reāllaika piegādei katrai ir savs mezgls.
- k8s-rabbitmq
- k8s-monitoring
- k8s-logging
- k8s-ingress-gateway
- k8s-sse-gateway
- k8s-event-router
- Katrs mezgls
- Fluent Bit · DaemonSet
- Calico
Konfigurētie modeļi · pa nodrošinātājiem
Pakalpojums ir slēgts, tāpēc šie ir repozitorijā konfigurētie modeļi, nevis šodien pieejamas izvēles. Katra loma norādīta atsevišķi; tas nav verificētu palaidienu saraksts.
OpenAI
Chat noklusējuma nodrošinātājs
Chat
openai/gpt-5.2noklusējums
Noklusējuma modelis ir gpt-5.2; pieprasījumā nosaukts modelis tiek izmantots tā vietā.
Scan
gpt-5.2noklusējumsgpt-5.2-progpt-5.1gpt-5gpt-5-progpt-5-mini
Modeļi ārpus 13 modeļu kartējuma tiek noraidīti.
Attēlu kartējums
gpt-image-1.5
Atsevišķi no Responses orķestrēšanas modeļa gpt-5.2. Attēlu ģenerēšana pēc noklusējuma ir izslēgta.
Novērtēšana
gpt-4o-mininoklusējums
Sarunu novērtēšanas LLM vērtētājs, atsevišķi no Chat modeļa.
Google
Kad Chat izvēlas Google
Chat
google/gemini-3-pro-previewgoogle/gemini-3-flash-preview
Ja izvēlēts Google, noklusējums ir gemini-3-flash-preview.
Scan
gemini-3-pro-previewgemini-3-flash-previewgemini-2.5-progemini-2.5-flashgemini-2.5-flash-litegemini-2.0-flashgemini-2.0-flash-lite
Attēlu kartējums
gemini-3-pro-image-preview
Avotsbackend main d8840c7Publisks komits 2026. gada 29. septembrī · pārbaudīts 2026. gada 8. oktobrī