ตัวละครลูกโลก Eco² ที่ปรับแต่งสำหรับพอร์ตโฟลิโอนี้จากตัวละครหลักอย่างเป็นทางการล่าสุด: ลูกโลกสีฟ้า แผ่นดินสีเขียว ต้นอ่อนบนหัว และใบหน้ายิ้มสีน้ำตาล
กลับไปที่ห้องจัดแสดง

Eco²

Backend · Cloud infrastructure

คำแนะนำการแยกขยะจากรูปถ่ายหนึ่งใบและบทสนทนา

ผู้ช่วย AI แบบครบวงจรที่เข้าใจวิธีการแยกขยะรีไซเคิลในเกาหลี ระบุประเภทขยะจากรูปถ่ายและอธิบายวิธีทิ้ง ในบทสนทนาจะเรียกเครื่องมือค้นหาสถานที่ สภาพอากาศ ราคารับซื้อของรีไซเคิล และการค้นหาเว็บ และสร้างภาพได้ ในโปรเจกต์ทีมนี้ เริ่มจากคลัสเตอร์และฐานการดีพลอย แล้วขยายขอบเขตไปสู่แบ็กเอนด์ของโดเมน การประมวลผลแบบอะซิงโครนัส เอเจนต์สนทนา และการตรวจยืนยัน

2025.10.31 — 2026.02.10

โปรเจกต์ทีม · โครงสร้างพื้นฐานและฐานการดีพลอย → แบ็กเอนด์ของโดเมน → การประมวลผลแบบอะซิงโครนัส เอเจนต์สนทนา การตรวจยืนยัน

2025 새싹 해커톤 (Saessak Hackathon)รางวัลดีเด่น · 2025.12.02

  • เว็บแอปปิดให้บริการแล้ว

Eco² vocabulary

Lens
Service Path
Request Path
Async Work
Operations
Infrastructure
Measurement
  1. edge
  2. auth offload
  3. domain api
  1. task queue
  2. scan pipeline
  3. chat agent
  4. event bus
  1. cluster
  2. gitops
  3. autoscaling
  1. observability
  2. load test
  3. 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

โหนดทั้ง 24 เชื่อมต่อกันจริงอย่างไร ทีละโฟลว์

Kubernetes ที่จัดการเองซึ่งสร้างด้วย kubeadm แผนที่วางโหนดกายภาพ 24 โหนดและเวิร์กโหลดบนโหนดเหล่านั้นไว้ในห้าเลเยอร์ของ README และเชื่อมด้วยการเชื่อมต่อจริง เลือกโฟลว์แล้วจะไฮไลต์เฉพาะเส้นทางนั้นพร้อมขั้นตอนที่มีหมายเลข

ตั้งแต่การพัฒนาช่วงการแข่งขันจนถึงการเสริมความแข็งแกร่งด้านแบ็กเอนด์และการดูแลระบบ

บริการสิ้นสุดการให้บริการแล้ว วิดีโอเดโมที่บันทึกไว้และรายงานทางเทคนิคแสดงการทำงานของมัน

แผนที่การเชื่อมต่อคลัสเตอร์ · วาดใหม่จาก manifest และโค้ดที่คอมมิต a072127
แผนที่การเชื่อมต่อคลัสเตอร์ Eco² · 24 โหนดแผนที่ของโหนดกายภาพ 24 โหนดภายในแถบห้าเลเยอร์ของ README เบราว์เซอร์เพียงค้นชื่อใน Route 53 หลัง TLS สิ้นสุดที่ ALB บนพอร์ต 443 แล้ว Istio ingress Envoy บน NodePort จะส่งคำขอไปยัง API ของโดเมน Scan API ใส่งานลงคิว RabbitMQ และคืน job_id ทันที scan-worker ในพูล AI ทำ XADD อีเวนต์ความคืบหน้าไปยัง Redis Streams Event Router อ่านอีเวนต์ อัปเดต State KV และเผยแพร่ไปยัง Pub/Sub แล้ว SSE Gateway ส่งไปยังเบราว์เซอร์ checkpoint-syncer จัดเก็บ checkpoint ของ Chat และ persistence consumer บนโหนด Chat จัดเก็บข้อความใน PostgreSQL Platform Layer ไม่ใช่เส้นทางคำขอ แต่ทำหน้าที่ตั้งค่า ปรับขนาด และสังเกตการณ์เบราว์เซอร์HTTPS · SSEAWS ALB443 · TLS สิ้นสุดที่นี่Route 53DNSGitHub Actions · Docker Hubอิมเมจ · revision ของ manifestLLM APIOpenAI · GoogleLangSmithการติดตามการรัน LLMFluent BitDaemonSet · ทุกโหนดk8s-masterALB Controller · ExternalDNSArgo CD image updaterIstiodcontrol planek8s-ingress-gatewayIstio ingress Envoyk8s-api-scanScan APIk8s-api-chatChat APImessage consumerpersistence consumerk8s-api-authauth APIext-authzk8s-api-infoInfo APIinfo-workerk8s-api-charactercharacter APIk8s-api-imageimages APIk8s-api-usersusers APIk8s-api-locationlocation APIk8s-sse-gatewaySSE Gatewayk8s-event-routerEvent Routerk8s-rabbitmqRabbitMQk8s-worker-aik8s-worker-ai-2k8s-worker-storagek8s-worker-storage-2k8s-redis-pubsubPub/Subk8s-redis-streamsStreamsState KVk8s-redis-cacheCachek8s-postgresqlPostgreSQLk8s-redis-authblacklistk8s-monitoringKEDAPrometheusGrafanaAlertmanagerk8s-loggingElasticsearchKibanascan-workerchat-workercheckpoint-syncerauth-relayauth-workerusers-workercharacter-workercharacter-match-workerKialiJaeger · dev in-memoryคลัสเตอร์ Kubernetes24 โหนด · kubeadmEdge Layer1 โหนดService Layer8 โหนด · Envoy sidecarIntegration Layer7 โหนดPersistence Layer5 โหนดPlatform Layer3 โหนด · ตั้งค่า · ปรับขนาด · สังเกตการณ์AWS แบบ managedพูล AIdomain: worker-aiพูล storagedomain: worker-storageไม่ระบุโหนด1การค้นหา DNS2 HTTPS 443 · เบราว์เซอร์ → AWS ALB23HTTP · NodePort4VirtualService5งาน Celery6 consume · RabbitMQ → scan-worker67 HTTPS · พูล AI → LLM API78XADD scan:events9XREADGROUP10SETEX state11PUBLISH12SUBSCRIBE13สตรีม SSE14การกู้คืนเมื่อเชื่อมต่อใหม่1 HTTPS 443 · เบราว์เซอร์ → AWS ALB12HTTP · NodePort3VirtualService4งาน Taskiq5 consume · RabbitMQ → chat-worker56 HTTPS · พูล AI → LLM API67XADD chat:events8XREADGROUP9PUBLISH10SUBSCRIBE11สตรีม SSE12checkpoint13อ่าน checkpoint14ซิงก์ไปยัง PostgreSQL15chat-persistence group16จัดเก็บข้อความ1การค้นหา DNS2 HTTPS 443 · เบราว์เซอร์ → AWS ALB23HTTP · NodePort4ext-authz · gRPC 500515ค้นหา blacklist6VirtualService7gRPC8gRPC1outbox:blacklist2blacklist.events3 blacklist.events · RabbitMQ → auth-worker34จัดเก็บ blacklist5 Celery batch · RabbitMQ → users-worker56UPSERT1อิมเมจ · revision ของ manifest2Ingress → ALB · เรคคอร์ด DNS3การตั้งค่า xDS4จำนวน pod5 จำนวน pod · KEDA → พูล storage56ล็อก7 การติดตามการรัน LLM · พูล AI → LangSmith7

คำขอ Scan → การส่งแบบเรียลไทม์

คำขอวิเคราะห์รูปภาพกลายเป็นงานที่เข้าคิว และอีเวนต์ความคืบหน้ากลับมายังเบราว์เซอร์เดิม

  1. เบราว์เซอร์การค้นหา DNS: การค้นหา DNSRoute 53

    แปลงเพียงชื่อจากเรคคอร์ด Route 53 คำขอไม่ได้ผ่าน DNS

  2. เบราว์เซอร์การไหลของข้อมูล: HTTPS 443AWS ALB

    TLS สิ้นสุดที่ ALB

  3. AWS ALBการไหลของข้อมูล: HTTP · NodePortIstio ingress Envoyk8s-ingress-gateway

    ส่งต่อไปยัง Istio ingress Envoy ผ่าน NodePort ของ EC2 instance target

  4. Istio ingress Envoyk8s-ingress-gatewayการไหลของข้อมูล: VirtualServiceScan APIk8s-api-scan

    กำหนดเส้นทางไปยัง Scan API ซึ่งใส่งานลงคิวและคืน job_id ทันที การเรียกดูผลจะได้คำตอบ 202 จนกว่างานจะเสร็จ

  5. Scan APIk8s-api-scanการไหลของข้อมูล: งาน CeleryRabbitMQk8s-rabbitmq

    งาน Scan ถูกใส่ลง RabbitMQ

  6. RabbitMQk8s-rabbitmqการไหลของข้อมูล: consumescan-workerk8s-worker-ai · k8s-worker-ai-2

    scan-worker (Celery · gevent) ในพูล AI รับงานและรัน Vision → Rule → Answer → Reward สี่ขั้นนี้เป็น Celery task ที่ต่อกันเป็น chain ไม่ใช่โหนด

  7. พูล AIk8s-worker-ai · k8s-worker-ai-2การไหลของข้อมูล: HTTPSLLM API

    scan worker และ chat worker เรียก API ของ OpenAI และ Google

  8. scan-workerk8s-worker-ai · k8s-worker-ai-2การไหลของข้อมูล: XADD scan:eventsStreamsk8s-redis-streams

    อีเวนต์ความคืบหน้าถูกเขียนลงหนึ่งในสี่ shard ของ Streams

  9. Streamsk8s-redis-streamsการไหลของข้อมูล: XREADGROUPEvent Routerk8s-event-router

    Event Router อ่านในฐานะ consumer group และ XACK หลังประมวลผล pending และ reclaim รักษาการส่งแบบ at-least-once

  10. Event Routerk8s-event-routerการไหลของข้อมูล: SETEX stateState KVk8s-redis-streams

    เขียนสถานะล่าสุดและเครื่องหมายการประมวลผลซ้ำลงใน State KV บนโหนด Redis เดียวกัน

  11. Event Routerk8s-event-routerการไหลของข้อมูล: PUBLISHPub/Subk8s-redis-pubsub

    ส่งแบบเรียลไทม์บนช่องของงานใน shard Pub/Sub

  12. Pub/Subk8s-redis-pubsubการไหลของข้อมูล: SUBSCRIBESSE Gatewayk8s-sse-gateway

    SSE Gateway subscribe ผ่าน listener ที่ใช้ร่วมกันหนึ่งตัวต่อโปรเซส แล้วกระจายไปยังเบราว์เซอร์แต่ละตัวที่เชื่อมต่ออยู่

  13. SSE Gatewayk8s-sse-gatewayการไหลของข้อมูล: สตรีม SSEเบราว์เซอร์

    การเชื่อมต่อที่เปิดผ่านเส้นทาง ALB และ ingress เดียวกัน การส่งเป็นแบบ at-least-once และจัดการรายการซ้ำแบบ idempotent

  14. State KVk8s-redis-streamsการไหลของข้อมูล: การกู้คืนเมื่อเชื่อมต่อใหม่SSE Gatewayk8s-sse-gateway

    เมื่อเชื่อมต่อใหม่ด้วย Last-Event-ID แล้ว State KV และ Streams ที่เก็บไว้จะเติมอีเวนต์ที่พลาดไป

Chat · โทเค็นและการจัดเก็บ

โทเค็นของ Chat ใช้เส้นทางอีเวนต์เดียวกับ Scan ส่วน checkpoint และข้อความถูกจัดเก็บโดยเวิร์กโหลดสองตัวที่ต่างกัน

  1. เบราว์เซอร์การไหลของข้อมูล: HTTPS 443AWS ALB

    TLS สิ้นสุดที่ ALB

  2. AWS ALBการไหลของข้อมูล: HTTP · NodePortIstio ingress Envoyk8s-ingress-gateway

    ส่งต่อไปยัง Istio ingress Envoy ผ่าน NodePort ของ EC2 instance target

  3. Istio ingress Envoyk8s-ingress-gatewayการไหลของข้อมูล: VirtualServiceChat APIk8s-api-chat

    กำหนดเส้นทางไปยัง Chat API

  4. Chat APIk8s-api-chatการไหลของข้อมูล: งาน TaskiqRabbitMQk8s-rabbitmq

    งาน Chat ถูกใส่ลง RabbitMQ

  5. RabbitMQk8s-rabbitmqการไหลของข้อมูล: consumechat-workerk8s-worker-ai · k8s-worker-ai-2

    chat-worker (Taskiq · asyncio) จำแนกเจตนาด้วย LangGraph แล้วรัน vision หากจำเป็น เครื่องมือที่เลือก aggregator และการสรุปหากจำเป็น แล้วจึงตอบ แต่ละคำขอรันเฉพาะแขนงที่ต้องใช้

  6. พูล AIk8s-worker-ai · k8s-worker-ai-2การไหลของข้อมูล: HTTPSLLM API

    scan worker และ chat worker เรียก API ของ OpenAI และ Google

  7. chat-workerk8s-worker-ai · k8s-worker-ai-2การไหลของข้อมูล: XADD chat:eventsStreamsk8s-redis-streams

    โทเค็นและอีเวนต์ขั้นตอนถูกเขียนลงสี่ shard ของ Streams จากนั้นเส้นทางการส่งเหมือนกับของ Scan

  8. Streamsk8s-redis-streamsการไหลของข้อมูล: XREADGROUPEvent Routerk8s-event-router

    Event Router อ่านในฐานะ consumer group และ XACK หลังประมวลผล pending และ reclaim รักษาการส่งแบบ at-least-once

  9. Event Routerk8s-event-routerการไหลของข้อมูล: PUBLISHPub/Subk8s-redis-pubsub

    ส่งแบบเรียลไทม์บนช่องของงานใน shard Pub/Sub

  10. Pub/Subk8s-redis-pubsubการไหลของข้อมูล: SUBSCRIBESSE Gatewayk8s-sse-gateway

    SSE Gateway subscribe ผ่าน listener ที่ใช้ร่วมกันหนึ่งตัวต่อโปรเซส แล้วกระจายไปยังเบราว์เซอร์แต่ละตัวที่เชื่อมต่ออยู่

  11. SSE Gatewayk8s-sse-gatewayการไหลของข้อมูล: สตรีม SSEเบราว์เซอร์

    การเชื่อมต่อที่เปิดผ่านเส้นทาง ALB และ ingress เดียวกัน การส่งเป็นแบบ at-least-once และจัดการรายการซ้ำแบบ idempotent

  12. chat-workerk8s-worker-ai · k8s-worker-ai-2การไหลของข้อมูล: checkpointCachek8s-redis-cache

    checkpoint ของ LangGraph ถูกเก็บใน Redis Cache

  13. Cachek8s-redis-cacheการไหลของข้อมูล: อ่าน checkpointcheckpoint-syncerk8s-worker-ai · k8s-worker-ai-2

    checkpoint-syncer อ่าน checkpoint จาก Redis

  14. checkpoint-syncerk8s-worker-ai · k8s-worker-ai-2การไหลของข้อมูล: ซิงก์ไปยัง PostgreSQLPostgreSQLk8s-postgresql

    AsyncPostgresSaver จัดเก็บลงใน PostgreSQL แบบอะซิงโครนัส

  15. Streamsk8s-redis-streamsการไหลของข้อมูล: chat-persistence grouppersistence consumerk8s-api-chat

    persistence consumer บนโหนด Chat อ่านอีเวนต์ done ในฐานะ consumer group

  16. persistence consumerk8s-api-chatการไหลของข้อมูล: จัดเก็บข้อความPostgreSQLk8s-postgresql

    ข้อความแชตถูกจัดเก็บลงใน PostgreSQL นี่เป็นเวิร์กโหลดที่ต่างจาก checkpoint-syncer

ทางเข้า · การยืนยันตัวตน

เส้นทางแบบซิงโครนัสจากทางเข้าของคลัสเตอร์ไปถึง domain API เฉพาะเส้นทางที่มีนโยบายป้องกันจะตรวจการยืนยันตัวตนก่อน ทราฟฟิกของพ็อดระหว่างโหนดวิ่งบน Calico VXLAN

  1. เบราว์เซอร์การค้นหา DNS: การค้นหา DNSRoute 53

    แปลงเพียงชื่อจากเรคคอร์ด Route 53 คำขอไม่ได้ผ่าน DNS

  2. เบราว์เซอร์การไหลของข้อมูล: HTTPS 443AWS ALB

    TLS สิ้นสุดที่ ALB

  3. AWS ALBการไหลของข้อมูล: HTTP · NodePortIstio ingress Envoyk8s-ingress-gateway

    ส่งต่อไปยัง Istio ingress Envoy ผ่าน NodePort ของ EC2 instance target

  4. Istio ingress Envoyk8s-ingress-gatewayการไหลของข้อมูล: ext-authz · gRPC 50051ext-authzk8s-api-auth

    เฉพาะเส้นทางภายใต้นโยบาย CUSTOM ที่ถาม ext-authz ของ Go ก่อน (timeout 2 s, failOpen false) เส้นทางเช่น login, health และ docs ถูกยกเว้น

  5. ext-authzk8s-api-authการไหลของข้อมูล: ค้นหา blacklistblacklistk8s-redis-auth

    โทเค็นถูกตรวจกับ blacklist ใน Redis

  6. Istio ingress Envoyk8s-ingress-gatewayการไหลของข้อมูล: VirtualServiceChat APIk8s-api-chat

    กำหนดเส้นทางไปยัง Chat API

  7. Chat APIk8s-api-chatการไหลของข้อมูล: gRPCimages APIk8s-api-image

    การเรียกแบบซิงโครนัส chat → images ที่ระบุไว้ใน README

  8. auth APIk8s-api-authการไหลของข้อมูล: gRPCusers APIk8s-api-users

    การเรียกแบบซิงโครนัส auth → users ที่ระบุไว้ใน README

พูล storage · การเขียนแบบอะซิงโครนัส

blacklist ของการยืนยันตัวตนและความเป็นเจ้าของตัวละครถูกจัดเก็บโดย worker ในพูล storage ซึ่งรับงานจาก RabbitMQ

  1. blacklistk8s-redis-authการไหลของข้อมูล: outbox:blacklistauth-relayk8s-worker-storage · k8s-worker-storage-2

    auth-relay (auth-Bus ใน README) อ่าน outbox ของ Redis

  2. auth-relayk8s-worker-storage · k8s-worker-storage-2การไหลของข้อมูล: blacklist.eventsRabbitMQk8s-rabbitmq

    เผยแพร่ซ้ำไปยัง RabbitMQ พร้อมการลองใหม่และ DLQ

  3. RabbitMQk8s-rabbitmqการไหลของข้อมูล: blacklist.eventsauth-workerk8s-worker-storage · k8s-worker-storage-2

    auth-worker รับอีเวนต์ blacklist

  4. auth-workerk8s-worker-storage · k8s-worker-storage-2การไหลของข้อมูล: จัดเก็บ blacklistblacklistk8s-redis-auth

    จัดเก็บลงใน blacklist ของ Redis

  5. RabbitMQk8s-rabbitmqการไหลของข้อมูล: Celery batchusers-workerk8s-worker-storage · k8s-worker-storage-2

    users-worker รับงานความเป็นเจ้าของตัวละครเป็นชุด

  6. users-workerk8s-worker-storage · k8s-worker-storage-2การไหลของข้อมูล: UPSERTPostgreSQLk8s-postgresql

    นำไปใช้กับ PostgreSQL

ตั้งค่า · ปรับขนาด · สังเกตการณ์

Platform Layer ไม่ใช่ขั้นที่คำขอผ่าน แต่ดีพลอย ตั้งค่า ปรับขนาด และสังเกตการณ์เลเยอร์อื่น โหนดเป็นอินสแตนซ์ EC2 ที่สร้างด้วย Terraform โดยติดตั้ง kubeadm และ Calico ด้วย Ansible CI เพียงตรวจความถูกต้องของ Terraform และไม่ apply โดยอัตโนมัติ

  1. GitHub Actions · Docker Hubกำหนดค่า · สเกล: อิมเมจ · revision ของ manifestArgo CD image updaterk8s-master

    Argo CD ปรับการตั้งค่าคลัสเตอร์ให้ตรงกันผ่าน App-of-Apps และ Sync Waves ยืนยันตำแหน่งบน control-plane เฉพาะของ image updater

  2. ALB Controller · ExternalDNSk8s-masterกำหนดค่า · สเกล: Ingress → ALB · เรคคอร์ด DNSAWS แบบ managed

    ALB Controller และ ExternalDNS ตั้งค่าทรัพยากรฝั่ง AWS นี่ไม่ใช่เส้นทางที่คำขอผ่าน

  3. Istiodk8s-masterกำหนดค่า · สเกล: การตั้งค่า xDSIstio ingress Envoyk8s-ingress-gateway

    Istiod ส่งการตั้งค่า Gateway, VirtualService และ EnvoyFilter ผ่าน xDS ไปยัง ingress Envoy และ Envoy sidecar ของแต่ละ API

  4. KEDAk8s-monitoringกำหนดค่า · สเกล: จำนวน podพูล AIk8s-worker-ai · k8s-worker-ai-2

    KEDA ปรับจำนวน pod ของ worker จำนวนโหนดไม่เปลี่ยน

  5. KEDAk8s-monitoringกำหนดค่า · สเกล: จำนวน podพูล storagek8s-worker-storage · k8s-worker-storage-2

    pod ของ worker ในพูล storage ถูกปรับขนาดแบบเดียวกัน

  6. Fluent Bitการสังเกตการณ์: ล็อกElasticsearchk8s-logging

    Fluent Bit เป็น DaemonSet บนทุกโหนดและส่งล็อกไปยัง Elasticsearch

  7. พูล AIk8s-worker-ai · k8s-worker-ai-2การสังเกตการณ์: การติดตามการรัน LLMLangSmith

    trace ของการเรียก LLM ไปที่ LangSmith ซึ่งเป็น SaaS ภายนอก

ทุกการเชื่อมต่อมีน้ำหนักเท่ากัน เลือกโฟลว์เพื่อไฮไลต์เฉพาะเส้นทางของโฟลว์นั้นพร้อมขั้นตอนที่มีหมายเลข

  • เส้นทึบ · ทิศทางที่คำขอ งาน อีเวนต์ และการเขียนไหลไป
  • เส้นจุด · การค้นหา DNS คำขอไม่ได้ผ่านทางนี้
  • เส้นประ · กำหนดค่าหรือสเกล ไม่ใช่เส้นทางข้อมูล
  • เส้นประยาวสลับจุด · ล็อกและการติดตามการรัน
  • เส้นดำหนา · โฟลว์ที่เลือก ตัวเลขบอกลำดับ
  • กล่อง · โหนดทางกายภาพ ชื่อโฮสต์อยู่ที่หัวกล่อง
  • ชิปด้านใน · เวิร์กโหลดที่รันบนโหนดนั้น
  • กรอบเส้นประ · พูลการจัดตารางสองโหนด
  • กล่องเส้นประ · อยู่นอกคลัสเตอร์ ไม่นับเป็นโหนด
  • เส้นขอบสีส้ม · จุดที่โมเดลตัดสินใจ
  • Control plane1 โหนด
  • Domain API8 โหนด
  • พูล AI2 โหนด
  • พูล storage2 โหนด
  • Data5 โหนด
  • Platform6 โหนด

ห้าเลเยอร์ของ README (แถบ) และกลุ่มกายภาพ (สีส่วนหัวของแต่ละโหนด) จัดกลุ่มโหนด 24 โหนดชุดเดียวกันต่างกัน State KV ใช้โหนดร่วมกับ Streams และไม่ถูกนับแยก Route 53, ALB และบริการนอกคลัสเตอร์ไม่ใช่โหนด พูลคือขอบเขตการจัดตาราง ไม่ได้หมายความว่าทุก pod รันบนทั้งสองโหนด

การจัดวาง 24 โหนด · จากรายชื่อโหนดในแดชบอร์ด January 21, 2026

24โหนด

24 = 1 control plane + 8 API + 4 worker + 5 data + 6 platform

  1. 1Control plane

    role: control-plane

    kube-apiserver · scheduler · controller-manager · etcd รวมถึงคอนโทรลเลอร์ของแพลตฟอร์ม

    1. k8s-master
  2. 8Domain API

    domain: <บริการ>

    หนึ่งโหนดต่อหนึ่งโดเมน การเรียกภายในใช้ gRPC

    1. k8s-api-auth
    2. k8s-api-users
    3. k8s-api-scan
    4. k8s-api-character
    5. k8s-api-location
    6. k8s-api-image
    7. k8s-api-chat
    8. k8s-api-info
  3. 4Execution worker

    พูลการจัดตารางสองพูล พูลละสองโหนด KEDA เปลี่ยนจำนวน pod ส่วนจำนวนโหนดคงเดิม

    พูล storagedomain: worker-storage
    1. k8s-worker-storage
    2. k8s-worker-storage-2
    พูล AIdomain: worker-ai
    1. k8s-worker-ai
    2. k8s-worker-ai-2
  4. 5Data

    Redis แยกไว้บนสี่โหนดตามวัตถุประสงค์ ที่จัดเก็บของ PostgreSQL คือ EBS CSI · gp3

    1. k8s-postgresql
    2. k8s-redis-auth
    3. k8s-redis-streams
    4. k8s-redis-cache
    5. k8s-redis-pubsub
  5. 6Platform

    การส่งข้อความ การสังเกตการณ์ ทางเข้า และการส่งแบบเรียลไทม์ แต่ละอย่างมีโหนดของตัวเอง

    1. k8s-rabbitmq
    2. k8s-monitoring
    3. k8s-logging
    4. k8s-ingress-gateway
    5. k8s-sse-gateway
    6. k8s-event-router
ทุกโหนด
  • Fluent Bit · DaemonSet
  • Calico

โมเดลที่ตั้งค่าไว้ · ตามผู้ให้บริการ

บริการปิดตัวแล้ว รายการนี้จึงเป็นโมเดลที่ตั้งค่าไว้ในรีโพซิทอรี ไม่ใช่ตัวเลือกที่ใช้ได้ในวันนี้ แต่ละบทบาทแสดงแยกกัน และนี่ไม่ใช่รายการการรันที่ตรวจยืนยันแล้ว

  • OpenAI

    ผู้ให้บริการเริ่มต้นของ Chat

    Chat

    • openai/gpt-5.2ค่าเริ่มต้น

    โมเดลเริ่มต้นคือ gpt-5.2 หากคำขอระบุโมเดล จะใช้โมเดลนั้นแทน

    Scan

    • gpt-5.2ค่าเริ่มต้น
    • gpt-5.2-pro
    • gpt-5.1
    • gpt-5
    • gpt-5-pro
    • gpt-5-mini

    โมเดลที่อยู่นอกการแมป 13 โมเดลจะถูกปฏิเสธ

    การแมปรูปภาพ

    • gpt-image-1.5

    แยกจาก gpt-5.2 ซึ่งเป็นโมเดลออร์เคสเตรชันของ Responses การสร้างรูปภาพปิดอยู่เป็นค่าเริ่มต้น

    การประเมิน

    • gpt-4o-miniค่าเริ่มต้น

    LLM grader สำหรับการประเมินบทสนทนา แยกจากโมเดลของ Chat

  • Google

    เมื่อ Chat เลือก Google

    Chat

    • google/gemini-3-pro-preview
    • google/gemini-3-flash-preview

    เมื่อเลือก Google ค่าเริ่มต้นคือ gemini-3-flash-preview

    Scan

    • gemini-3-pro-preview
    • gemini-3-flash-preview
    • gemini-2.5-pro
    • gemini-2.5-flash
    • gemini-2.5-flash-lite
    • gemini-2.0-flash
    • gemini-2.0-flash-lite

    การแมปรูปภาพ

    • gemini-3-pro-image-preview

แหล่งที่มาbackend main d8840c7คอมมิตสาธารณะ September 29, 2026 · ตรวจเมื่อ October 8, 2026