
Eco²
Backend · Cloud infrastructure
Újrahasznosítási útmutatás egy fotóból és egy beszélgetésből.
Mindent egyben AI-asszisztens, amely érti a koreai újrahasznosítás rendjét.
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
Hogyan kapcsolódik ténylegesen a 24 csomópont, folyamatonként.
Saját üzemeltetésű Kubernetes, kubeadm-mel építve. A térkép a 24 fizikai csomópontot és a rajtuk futó munkaterheléseket a README öt rétegébe helyezi, és tényleges kapcsolataikkal köti össze. Egy folyamat kiválasztásakor csak annak útvonala emelődik ki, számozott lépésekkel.
Fotóról azonosítja a hulladékot, és elmagyarázza, hogyan kell kidobni, beszélgetés közben pedig helyekre, időjárásra, újrahasznosítási árakra és webes keresésre szolgáló eszközöket hív, és képeket generál. Ebben a csapatprojektben a klaszter- és telepítési alapokkal kezdtem, majd feladatköröm kiterjedt a domain-backendre, az aszinkron feldolgozásra, a párbeszédes ágensre és az ellenőrzésre.
A versenyfejlesztéstől a backend és az üzemeltetés megerősítéséig
A szolgáltatás működése véget ért; egy rögzített demó és a műszaki jelentés mutatja működés közben.
Scan-kérés → élő kézbesítés
Egy fotóelemzési kérésből sorba állított munka lesz, és előrehaladási eseményei ugyanahhoz a böngészőhöz térnek vissza.
BöngészőDNS-lekérdezés: DNS-lekérdezésRoute 53
Csak a név oldódik fel a Route 53-rekordokból. A kérések nem haladnak át a DNS-en.
Böngészőadatfolyam: HTTPS 443AWS ALB
A TLS az ALB-nél ér véget.
AWS ALBadatfolyam: HTTP · NodePortIstio ingress Envoy
k8s-ingress-gatewayAz EC2-példány célpontjának NodePortján keresztül jut az Istio ingress Envoyhoz.
Istio ingress Envoy
k8s-ingress-gatewayadatfolyam: VirtualServiceScan APIk8s-api-scanA Scan API-hoz irányítva, amely sorba állítja a munkát, és azonnal visszaad egy job_id-t; az eredmény lekérdezése 202-t ad vissza, amíg a feladat el nem készül.
Scan API
k8s-api-scanadatfolyam: Celery-feladatRabbitMQk8s-rabbitmqA Scan-feladat a RabbitMQ-ra kerül.
RabbitMQ
k8s-rabbitmqadatfolyam: consumescan-workerk8s-worker-ai · k8s-worker-ai-2Az AI-készlet scan-workere (Celery · gevent) átveszi, és futtatja a Vision → Rule → Answer → Reward lépéseket. A négy szakasz láncba kötött Celery-feladat, nem csomópont.
AI-készlet
k8s-worker-ai · k8s-worker-ai-2adatfolyam: HTTPSLLM APIA scan- és chat-feldolgozók az OpenAI és a Google API-jait hívják.
scan-worker
k8s-worker-ai · k8s-worker-ai-2adatfolyam: XADD scan:eventsStreamsk8s-redis-streamsAz előrehaladási események a négy Streams-shard egyikébe íródnak.
Streams
k8s-redis-streamsadatfolyam: XREADGROUPEvent Routerk8s-event-routerAz Event Router fogyasztói csoportként olvassa őket, és feldolgozás után XACK-et küld; a pending és a reclaim legalább egyszeri kézbesítést biztosít.
Event Router
k8s-event-routeradatfolyam: SETEX stateState KVk8s-redis-streamsA legutóbbi állapotot és egy duplikált feldolgozást jelző markert ugyanannak a Redis-csomópontnak a State KV-jébe írja.
Event Router
k8s-event-routeradatfolyam: PUBLISHPub/Subk8s-redis-pubsubValós időben kézbesítve a job csatornáján, shard Pub/Sub-ban.
Pub/Sub
k8s-redis-pubsubadatfolyam: SUBSCRIBESSE Gatewayk8s-sse-gatewayAz SSE Gateway folyamatonként egyetlen közös listenerrel iratkozik fel, és minden csatlakozott böngészőnek továbbítja őket.
SSE Gateway
k8s-sse-gatewayadatfolyam: SSE-streamBöngészőUgyanazon az ALB- és ingress-útvonalon nyitott kapcsolat. A kézbesítés legalább egyszeri (at-least-once); a duplikátumok kezelése idempotens.
State KV
k8s-redis-streamsadatfolyam: Helyreállítás újracsatlakozáskorSSE Gatewayk8s-sse-gatewayLast-Event-ID-vel történő újracsatlakozáskor a State KV és a megőrzött Streams pótolja a kimaradt eseményeket.
Chat · tokenek és tárolás
A Chat-tokenek ugyanazt az eseményutat járják be, mint a Scané; az ellenőrzőpontokat és az üzeneteket két különböző munkaterhelés tárolja.
Böngészőadatfolyam: HTTPS 443AWS ALB
A TLS az ALB-nél ér véget.
AWS ALBadatfolyam: HTTP · NodePortIstio ingress Envoy
k8s-ingress-gatewayAz EC2-példány célpontjának NodePortján keresztül jut az Istio ingress Envoyhoz.
Istio ingress Envoy
k8s-ingress-gatewayadatfolyam: VirtualServiceChat APIk8s-api-chatA Chat API-hoz irányítva.
Chat API
k8s-api-chatadatfolyam: Taskiq-feladatRabbitMQk8s-rabbitmqA Chat-feladat a RabbitMQ-ra kerül.
RabbitMQ
k8s-rabbitmqadatfolyam: consumechat-workerk8s-worker-ai · k8s-worker-ai-2A chat-worker (Taskiq · asyncio) LangGraph-fal osztályozza a szándékot, majd szükség esetén futtatja a vision lépést, a kiválasztott eszközöket, az aggregátort és szükség esetén egy összegzést, végül válaszol. Minden kérés csak a szükséges ágakat futtatja.
AI-készlet
k8s-worker-ai · k8s-worker-ai-2adatfolyam: HTTPSLLM APIA scan- és chat-feldolgozók az OpenAI és a Google API-jait hívják.
chat-worker
k8s-worker-ai · k8s-worker-ai-2adatfolyam: XADD chat:eventsStreamsk8s-redis-streamsA tokenek és a szakaszesemények négy Streams-shardba íródnak; innen a kézbesítési út ugyanaz, mint a Scané.
Streams
k8s-redis-streamsadatfolyam: XREADGROUPEvent Routerk8s-event-routerAz Event Router fogyasztói csoportként olvassa őket, és feldolgozás után XACK-et küld; a pending és a reclaim legalább egyszeri kézbesítést biztosít.
Event Router
k8s-event-routeradatfolyam: PUBLISHPub/Subk8s-redis-pubsubValós időben kézbesítve a job csatornáján, shard Pub/Sub-ban.
Pub/Sub
k8s-redis-pubsubadatfolyam: SUBSCRIBESSE Gatewayk8s-sse-gatewayAz SSE Gateway folyamatonként egyetlen közös listenerrel iratkozik fel, és minden csatlakozott böngészőnek továbbítja őket.
SSE Gateway
k8s-sse-gatewayadatfolyam: SSE-streamBöngészőUgyanazon az ALB- és ingress-útvonalon nyitott kapcsolat. A kézbesítés legalább egyszeri (at-least-once); a duplikátumok kezelése idempotens.
chat-worker
k8s-worker-ai · k8s-worker-ai-2adatfolyam: checkpointCachek8s-redis-cacheA LangGraph-ellenőrzőpont a Redis Cache-ben marad.
Cache
k8s-redis-cacheadatfolyam: ellenőrzőpont olvasásacheckpoint-syncerk8s-worker-ai · k8s-worker-ai-2A checkpoint-syncer beolvassa az ellenőrzőpontot a Redisből.
checkpoint-syncer
k8s-worker-ai · k8s-worker-ai-2adatfolyam: szinkronizálás PostgreSQL-bePostgreSQLk8s-postgresqlAz AsyncPostgresSaver aszinkron módon tárolja a PostgreSQL-ben.
Streams
k8s-redis-streamsadatfolyam: chat-persistence grouppersistence consumerk8s-api-chatA Chat-csomóponton futó persistence consumer fogyasztói csoportként olvassa a done eseményeket.
persistence consumer
k8s-api-chatadatfolyam: üzenetek mentésePostgreSQLk8s-postgresqlA Chat-üzenetek a PostgreSQL-be mentődnek. Ez a checkpoint-syncertől eltérő munkaterhelés.
Belépés · hitelesítés
A klaszter belépési pontjától egy domain-API-ig tartó szinkron útvonal. Csak a szabályzattal védett útvonalak ellenőrzik előbb a hitelesítést; a csomópontok közötti podforgalom Calico VXLAN-on fut.
BöngészőDNS-lekérdezés: DNS-lekérdezésRoute 53
Csak a név oldódik fel a Route 53-rekordokból. A kérések nem haladnak át a DNS-en.
Böngészőadatfolyam: HTTPS 443AWS ALB
A TLS az ALB-nél ér véget.
AWS ALBadatfolyam: HTTP · NodePortIstio ingress Envoy
k8s-ingress-gatewayAz EC2-példány célpontjának NodePortján keresztül jut az Istio ingress Envoyhoz.
Istio ingress Envoy
k8s-ingress-gatewayadatfolyam: ext-authz · gRPC 50051ext-authzk8s-api-authCsak a CUSTOM szabályzat alá eső útvonalak kérdezik meg előbb a Go ext-authz-t (2 s időkorlát, failOpen false). Az olyan útvonalak, mint a login, a health és a docs, kivételek.
ext-authz
k8s-api-authadatfolyam: tiltólista-lekérdezésblacklistk8s-redis-authA tokent a Redis-tiltólistán ellenőrzi.
Istio ingress Envoy
k8s-ingress-gatewayadatfolyam: VirtualServiceChat APIk8s-api-chatA Chat API-hoz irányítva.
Chat API
k8s-api-chatadatfolyam: gRPCimages APIk8s-api-imageA README-ben megnevezett chat → images szinkron hívás.
auth API
k8s-api-authadatfolyam: gRPCusers APIk8s-api-usersA README-ben megnevezett auth → users szinkron hívás.
Tárolókészlet · aszinkron írások
A hitelesítési tiltólistát és a karaktertulajdonlást a tárolókészlet feldolgozói tárolják, amelyek a RabbitMQ-ból kapják a munkát.
blacklist
k8s-redis-authadatfolyam: outbox:blacklistauth-relayk8s-worker-storage · k8s-worker-storage-2Az auth-relay (a README-ben auth-Bus) olvassa a Redis outboxot.
auth-relay
k8s-worker-storage · k8s-worker-storage-2adatfolyam: blacklist.eventsRabbitMQk8s-rabbitmqÚjrapublikál a RabbitMQ-ra, újrapróbálkozásokkal és DLQ-val.
RabbitMQ
k8s-rabbitmqadatfolyam: blacklist.eventsauth-workerk8s-worker-storage · k8s-worker-storage-2Az auth-worker fogadja a tiltólista-eseményeket.
auth-worker
k8s-worker-storage · k8s-worker-storage-2adatfolyam: tiltólista tárolásablacklistk8s-redis-authA Redis-tiltólistán tárolódnak.
RabbitMQ
k8s-rabbitmqadatfolyam: Celery batchusers-workerk8s-worker-storage · k8s-worker-storage-2A users-worker kötegekben kapja meg a karaktertulajdonlási munkákat.
users-worker
k8s-worker-storage · k8s-worker-storage-2adatfolyam: UPSERTPostgreSQLk8s-postgresqlA PostgreSQL-ben érvényesíti őket.
Konfigurálás · skálázás · megfigyelés
A Platform Layer nem olyan lépés, amelyen a kérések áthaladnak; telepíti, konfigurálja, skálázza és megfigyeli a többi réteget. A csomópontok Terraformmal létrehozott EC2-példányok, amelyekre az Ansible telepíti a kubeadm-et és a Calicót; a CI csak validálja a Terraformot, automatikusan soha nem alkalmazza.
GitHub Actions · Docker Hubkonfigurálás · skálázás: konténerkép · manifest-revízióArgo CD image updater
k8s-masterAz Argo CD App-of-Apps és Sync Waves segítségével igazítja a klaszter konfigurációját. A vezérlősíkon való elhelyezést csak az image updater esetében igazolták.
ALB Controller · ExternalDNS
k8s-masterkonfigurálás · skálázás: Ingress → ALB · DNS-rekordokAWS által felügyeltAz ALB Controller és az ExternalDNS konfigurálja az AWS-oldali erőforrásokat. A kérések nem ezen az útvonalon haladnak.
Istiod
k8s-masterkonfigurálás · skálázás: xDS-konfigurációIstio ingress Envoyk8s-ingress-gatewayAz Istiod xDS-en keresztül küldi a Gateway-, VirtualService- és EnvoyFilter-konfigurációt az ingress Envoynak és minden API Envoy sidecarjának.
KEDA
k8s-monitoringkonfigurálás · skálázás: podszámAI-készletk8s-worker-ai · k8s-worker-ai-2A KEDA a worker podok számát állítja. A csomópontok száma nem változik.
KEDA
k8s-monitoringkonfigurálás · skálázás: podszámtárolókészletk8s-worker-storage · k8s-worker-storage-2A tárolókészlet worker podjai ugyanígy skálázódnak.
Fluent Bitmegfigyelhetőség: naplókElasticsearch
k8s-loggingA Fluent Bit minden csomóponton DaemonSetként fut, és az Elasticsearchnek küldi a naplókat.
AI-készlet
k8s-worker-ai · k8s-worker-ai-2megfigyelhetőség: LLM-futtatások nyomkövetéseLangSmithAz LLM-hívások nyomkövetési adatai a LangSmithbe, egy külső SaaS-be kerülnek.
Minden kapcsolat azonos vastagsággal. Válasszon egy folyamatot, hogy csak annak útvonala emelődjön ki, számozott lépésekkel.
- Folytonos · a kérések, munkák, események és írások áramlási iránya
- Pontozott · DNS-lekérdezés; a kérések nem haladnak át rajta
- Szaggatott · konfigurálás vagy skálázás; nem adatút
- Hosszú pontvonalas · naplók és futtatáskövetés
- Vastag fekete vonal · a kiválasztott folyamat; a számok a sorrendet jelzik
- Doboz · fizikai csomópont, fejlécében a hostnévvel
- Belső chip · a csomóponton futó munkaterhelés
- Szaggatott keret · kétcsomópontos ütemezési készlet
- Szaggatott doboz · a klaszteren kívül, nem számít csomópontnak
- Narancssárga körvonal · ahol egy modell dönt
- Control plane1 csomópont
- Domain API8 csomópont
- AI-készlet2 csomópont
- tárolókészlet2 csomópont
- Data5 csomópont
- Platform6 csomópont
A README öt rétege (a sávok) és a fizikai csoportok (az egyes csomópontok fejlécének árnyalata) ugyanazt a 24 csomópontot eltérően csoportosítja. A State KV a Streams-csomóponton osztozik, ezért nincs külön számolva; a Route 53, az ALB és a klaszteren kívüli szolgáltatások nem csomópontok. A készlet ütemezési tartomány, nem állítás arról, hogy minden pod mindkét csomóponton fut.
24csomópont
24 = 1 control plane + 8 API + 4 worker + 5 data + 6 platform
1Control plane
role: control-planekube-apiserver · scheduler · controller-manager · etcd, valamint a platformkontrollerek.
- k8s-master
8Domain API
domain: <szolgáltatás>Domainenként egy csomópont. A belső hívások gRPC-t használnak.
- 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
Két ütemezési készlet, mindkettő két csomóponttal. A KEDA a podok számát változtatja; a csomópontok száma ugyanaz marad.
tárolókészlet
domain: worker-storage- k8s-worker-storage
- k8s-worker-storage-2
AI-készlet
domain: worker-ai- k8s-worker-ai
- k8s-worker-ai-2
5Data
A Redis négy célspecifikus csomópontra van bontva. A PostgreSQL tárolója EBS CSI · gp3.
- k8s-postgresql
- k8s-redis-auth
- k8s-redis-streams
- k8s-redis-cache
- k8s-redis-pubsub
6Platform
Az üzenetkezelés, a megfigyelhetőség, az ingress és a valós idejű kézbesítés saját csomópontot kapott.
- k8s-rabbitmq
- k8s-monitoring
- k8s-logging
- k8s-ingress-gateway
- k8s-sse-gateway
- k8s-event-router
- Minden csomópont
- Fluent Bit · DaemonSet
- Calico
Konfigurált modellek · szolgáltatónként
A szolgáltatás megszűnt, így ezek a tárolóban konfigurált modellek, nem ma választható lehetőségek. Minden szerep külön szerepel; ez nem ellenőrzött futtatások listája.
OpenAI
A Chat alapértelmezett szolgáltatója
Chat
openai/gpt-5.2alapértelmezett
Az alapértelmezett modell a gpt-5.2; a kérésben megnevezett modell lép a helyére.
Scan
gpt-5.2alapértelmezettgpt-5.2-progpt-5.1gpt-5gpt-5-progpt-5-mini
A 13 modellből álló leképezésen kívüli modelleket elutasítja.
Képleképezés
gpt-image-1.5
Elkülönül a gpt-5.2-től, a Responses orkesztrációs modelltől. A képgenerálás alapértelmezésben ki van kapcsolva.
Kiértékelés
gpt-4o-minialapértelmezett
A beszélgetés-kiértékelés LLM-alapú pontozója, elkülönül a Chat modelljétől.
Google
Ha a Chat a Google-t választja
Chat
google/gemini-3-pro-previewgoogle/gemini-3-flash-preview
Google választása esetén a gemini-3-flash-preview az alapértelmezett.
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
Képleképezés
gemini-3-pro-image-preview
Forrásbackend main d8840c7Nyilvános commit: 2026. szeptember 29. · ellenőrizve: 2026. október 8.