ประชุมวางแผน Tech Stack · 14 ก.ย. 2569

สถาปัตยกรรมระบบ e-Commerce สสว.

ภาพรวมระบบ โมดูล และ software component ทั้งโครงการตามกรอบการดำเนินงาน พร้อมเสนอ 3 แบบการแบ่งงานระหว่าง tech party และจุดที่ต้องตัดสินใจก่อนลงมือ

โครงการพัฒนาและสร้างระบบนิเวศ e-Commerce ของไทย เพื่อ SME ไทยถึง 30 พ.ย. 2570

ผู้ใช้งานที่ต้องรองรับ
150,000ราย · TOR 6.2.1.4
Concurrent user
≥ 300ธุรกรรมต่อเนื่อง ≥ 5,000
ร้านค้า / สินค้า
3,000 / 300,000เกณฑ์ทดสอบ 6.2.3
เป้า SME / GMV
80,000GMV 1,000 ล้านบาท
สัญญา + รับประกัน
15 + 12เดือน · ถึง พ.ย. 2571
01

ภาพรวมระบบ

ระบบแบ่งเป็น 5 ชั้นตามกรอบการดำเนินงาน ข้อ 6.1 — e-Marketplace (หน้าร้านและระบบแกนกลาง) ยืนอยู่บน OCN (ชั้นเชื่อมต่อกลางที่ไม่ผูกขาด) และทั้งสองวางอยู่บนศูนย์ข้อมูลในประเทศไทย ชั้น Edge และชั้น Data/Runtime เป็นของใช้ร่วมกันทั้งระบบ

ช่องทางผู้ใช้งาน ผู้ซื้อ — Responsive Webmobile และ desktop ผู้ขาย — Seller CenterSME 80,000 ราย Admin / สสว.เปิด read-only ให้ สสว. พันธมิตร MOU 5 ช่องทางพันธมิตรเรียกเข้ามาเอง No-Coden8n · Make.com · webhook HTTPS · TLS 1.2+ OpenAPI · OAuth2 · Webhook ชั้นขอบ และการควบคุมทางเข้า Cloudflare EnterpriseCDN · WAF · Anti-DDoS · Bot NGFW คู่ HAFortiGate-VM04 · Gartner Leader Load BalancerNetwork LB + App LB · 2 AZ API Gateway กลางrouting · rate limit · quota e-MARKETPLACE — ระบบแกนกลางและ 8 ระบบย่อย (ชีต 5.2.1) ระบบหลักส่วนหน้าและส่วนหลัง — 6.2.1.1 Frontendสมาชิก · Social Login · RBACConsent & DSR · หน้าร้าน Backend Commerce Engineแคตตาล็อก · ตะกร้า · ชำระเงินMarketing Engine API Gateway กลางOpenAPI · Webhook · Sandboxรองรับ No-Code DevOps และ CI/CDIaC สร้างซ้ำได้ทั้งสองศูนย์hotfix และ release บริหารโครงการส่งมอบและตรวจรับรายงวดรายงานความคืบหน้า ระบบย่อยผู้ขาย — 6.2.1.2 ระบบย่อยผู้ซื้อ — 6.2.1.3 ระบบย่อยผู้ดูแล — 6.2.1.4 เชื่อมผู้ขายเข้า SME Profile ของ สสว. จัดการคำสั่งซื้อและรายการชำระเงิน Logistic API · Reverse Logistics · หลายคลัง Commission & Fee Engine — 3 ระดับ e-Tax — ใบกำกับ · ใบเสร็จ · ใบเสนอราคา จัดทำดัชนีสินค้า 300,000 รายการ ค้นหา กรอง จัดเรียง · Advanced Algorithms แนะนำสินค้าที่เกี่ยวข้อง Affiliate และ Creator Program Live Commerce และ Live Control Tower One Data Dashboard จัดการร้านค้า — อนุมัติ · ระงับ · ประกาศ RBAC และ Audit Trail RoPA และการแจ้งเหตุละเมิดข้อมูล คัดกรองสินค้าและรับเรื่องร้องเรียน กลไกที่ใช้ร่วมกันข้ามโมดูล ห้ามพัฒนาซ้ำ — อัตราคอมมิชชันชุดเดียวใช้ทั้ง Affiliate และ GP ของไลฟ์ · ชุดแดชบอร์ดเดียวใช้ทั้ง Seller Center และ Admin Identity & Session · Consent & DSR · Notification · Media Pipeline · Design System canonical call callback / webhook OCN — OPEN COMMERCE NETWORK (ชั้นเชื่อมต่อกลาง ไม่ผูกขาด) OCN Gatewayrouting · quota · versioning Identity & AccessOAuth2 client-credentials Partner Registryonboarding · MOU · SLA Event Bus + WebhookKafka · retry · DLQ · signing Adapter จำหน่ายmarketplace · KOL · outlet Adapter ขนส่งwaybill · tracking · COD Adapter คลังfulfillment · หลายคลัง Adapter ชำระเงินsettlement · reconciliation Adapter ERP/POSstock · product sync Developer Portal · Sandbox ที่ใช้งานได้จริง · OpenAPI Spec · Webhook Guide · Auth Guide · Sample Payloads · Canonical Data Model ชั้นข้อมูลและ RUNTIME — ศูนย์ข้อมูลในประเทศไทย PostgreSQLHA ข้าม AZ16 vCPU · 2 TB Redissession · cart32 GB HA Search ClusterThai tokenizer3 โหนด Document Storecatalog doc3 โหนด Object Storageภาพ · วิดีโอ · KYC15 TB Managed Kafkaasync callback3 broker × 300 GB Kubernetes2 cluster · 18 โหนด144 vCPU · 576 GiB
ภาพที่ 1 — ทุก request จากทั้ง 5 ช่องทางเข้าทางเดียวกัน: Cloudflare → NGFW → LB → API Gateway ระบบแกนกลางคุยกับโลกภายนอกผ่าน OCN เท่านั้น ไม่มีโมดูลไหนต่อตรงกับ API ของพันธมิตร — นี่คือข้อบังคับที่ทำให้สลับผู้ให้บริการได้ด้วยการเปลี่ยน config ไม่ใช่เขียนโค้ดใหม่
02

โมดูลและ component ทั้งหมด

รายการนี้ผูกกับรหัสรายการงบประมาณจริงในชีต 5.2.1 ไม่ใช่รายการที่คิดขึ้นเอง — สิ่งที่ไม่มีในนี้คือสิ่งที่ไม่มีเงินจ่าย และสิ่งที่มีในนี้ต้องมีคนรับผิดชอบ

ระบบหลักส่วนหน้าและส่วนหลัง

6.2.1.1 · Frontend / Backend Headless Engine

  • ระบบส่วนติดต่อผู้ใช้ (Frontend) 6.2.1.1.1หน้าบ้าน responsive ทั้ง mobile และ desktop · ระบบสมาชิกผู้ซื้อและผู้ขาย ลงทะเบียน ยืนยันอีเมล ลืมรหัสผ่าน Social Login ผ่าน Google และ Facebook · RBAC · หน้าจัดการร้านและสินค้า เพิ่ม แก้ ลบ จัดหมวดหมู่ ตั้งราคาปกติและโปรโมชั่น แนบรูปและคลิป จัดการสต็อก ส่งออก Excel · หน้าค้นหา ตะกร้า และชำระเงิน · ระบบจัดการความยินยอมและสิทธิเจ้าของข้อมูล (Consent & DSR)
  • ระบบประมวลผลเซิร์ฟเวอร์หลัก (Backend) 6.2.1.1.2เครื่องยนต์การค้า 4 โมดูลที่ตรวจรับแยกกันได้ — (1) แคตตาล็อกสินค้าและการจัดหมวดหมู่ พร้อมสถานะคำสั่งซื้อทุกสถานะ (2) ตะกร้าสินค้าและการคำนวณราคารวมแบบเรียลไทม์ (3) การชำระเงิน เชื่อม Payment Gateway รองรับบัตรเครดิตและเดบิต PromptPay Mobile Banking และบัญชีธนาคาร พร้อมการกระทบยอดและหน้าสรุปรายการก่อนยืนยัน (4) Powerful Marketing Engine — Coupon, Voucher, Flash Deal, Bundle และ Campaign Management พร้อมการวัดผล สร้างแคมเปญและแสดงผลในหน้าร้านได้จริง
  • DevOps และ Cloud Engineer 6.2.1.1.3วางระบบ CI/CD และกระบวนการ hotfix/release · Infrastructure as Code สร้างสภาพแวดล้อมซ้ำได้ทั้งศูนย์หลักและศูนย์สำรอง · เอกสารเชิงเทคนิคสำหรับผู้ดูแลระบบและผู้ตรวจรับ
  • บริหารโครงการและการส่งมอบ 6.2.1.1.4แผนการส่งมอบรายงวด · รายงานความคืบหน้ารายเดือน · เอกสารประกอบการตรวจรับรายงวด
  • API Gateway กลาง 6.2.1.1.5OpenAPI / RESTful / Webhook แบบ realtime เชื่อมกับ ERP และระบบหลังบ้านเดิมของผู้ประกอบการ · เอกสาร 4 ชุด — API Specification, Webhook Guide, Auth Guide, Sample Payloads · Sandbox ที่เรียก API ได้จริง ครอบคลุมสินค้า ออเดอร์ ร้านค้า สต็อก · รองรับ No-Code เช่น n8n และ Make.com

ระบบย่อยสำหรับผู้ขาย

6.2.1.2 · e-KYC · OMS · e-Tax

  • เชื่อมฐานข้อมูลผู้ขายเข้าฐานข้อมูล สสว. 6.2.1.2.1เชื่อมต่อข้อมูลผู้ขายเข้าสู่ระบบ SME Profile ของ สสว. · API ส่งยอดขายของผู้ประกอบการกลับไปยัง SME Profile · จัดเก็บและบริหารข้อมูลส่วนบุคคลตาม พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคล
  • จัดการออเดอร์ ขนส่ง และสต็อก 6.2.1.2.25 โมดูล — จัดการคำสั่งซื้อทุกสถานะ · จัดการรายการชำระเงิน · Logistic API เปรียบเทียบค่าขนส่ง ออกเลขติดตาม พิมพ์ใบจ่าหน้า รายงาน COD · Reverse Logistics และหลายคลังสินค้า · Commission & Fee Engine กำหนดอัตรา 3 ระดับ รายผู้ขาย รายหมวด รายสินค้า พร้อม settlement และรายงานกระทบยอด
  • เอกสารภาษีอิเล็กทรอนิกส์ 6.2.1.2.3ใบกำกับภาษีฉบับเต็มและย่อ · ใบเสร็จ · ใบเสนอราคา · เชื่อมผู้ให้บริการที่กรมสรรพากรรับรอง · ให้สิทธิ์แบบโควตา ไม่บังคับผู้ขายทุกราย

ระบบย่อยสำหรับผู้ซื้อ

6.2.1.3 · Search · Affiliate · Live

  • ค้นหาและแนะนำสินค้า 6.2.1.3.14 โมดูลย่อย — จัดทำดัชนีสินค้า 300,000 รายการ · ค้นหาด้วยคำค้นพร้อมกรองและจัดเรียงตามหมวด ราคา ความนิยม · Advanced Algorithms · แนะนำสินค้าที่เกี่ยวข้องบนหน้าสินค้าและหน้าแรก
  • Affiliate และ Creator Program 6.2.1.3.2สร้างและติดตาม Affiliate Link · กระดานติดตามยอดขายและส่วนแบ่ง · ลงทะเบียน Creator Member และอนุมัติสิทธิ์ · รับ Creator จากโครงการ Live ของ สสว. ไม่น้อยกว่า 5,000 ราย พร้อมนำเข้าแบบกลุ่ม · เรียกใช้กลไกอัตราชุดเดียวกับ 6.2.1.2.2
  • Live Commerce Engine 6.2.1.3.3Live Stream ที่เชื่อมไปแพลตฟอร์มอื่นได้ · ผูกตะกร้ากับการไลฟ์แบบเรียลไทม์ · Live Control Tower — Anchor Management, Live Schedule, Live Dashboard, Moderation · GP และคอมมิชชันใช้กลไกของ 6.2.1.2.2 · ค่าส่งสัญญาณวิดีโออยู่ที่ 6.2.4.1.2 ไม่ตั้งซ้ำ

ระบบย่อยผู้ดูแลระบบ

6.2.1.4 · Dashboard · Audit · Moderation

  • One Data Dashboard 6.2.1.4.1ภาพรวมทั้งระบบ จำนวนผู้ใช้ ร้านค้า ยอดขาย คำสั่งซื้อ · สถานะจัดส่ง ต้นทุน กำไร · จัดการร้านค้าและผู้ขาย อนุมัติร้านใหม่ ระงับร้านที่ทำผิดกฎ ส่งประกาศ เข้าดูหน้าร้านในมุมมองผู้ใช้ · ใช้ชุดแดชบอร์ดร่วมกับ Seller Center
  • สิทธิ์และ Audit Trail 6.2.1.4.2RBAC · บันทึกประวัติการแก้ไขทุกรายการพร้อมผู้แก้และเวลา · ระบุตัวผู้ลงข้อมูลที่ผิดกฎหมาย · Records of Processing Activities · แจ้งเตือนเมื่อเข้าถึงหรือส่งออกข้อมูลส่วนบุคคลผิดปกติ · รายงานสำหรับแจ้งเหตุละเมิดต่อผู้กำกับดูแล
  • คัดกรองสินค้าและร้องเรียน 6.2.1.4.3ตรวจสินค้าและรูปภาพไม่เหมาะสมอัตโนมัติ · รับเรื่องร้องเรียนจากผู้ใช้ ส่งเข้าศูนย์กลาง ให้ผู้ดูแลระงับสินค้า · เชื่อม API ตรวจมาตรฐาน เลข อย. เครื่องหมาย มอก. เลขทะเบียนวิสาหกิจชุมชน · รายงานสถิติเรื่องร้องเรียน

โครงสร้างพื้นฐานคลาวด์

ชีต 5.2.4 · ศูนย์ข้อมูลในประเทศไทย

  • Compute และฐานข้อมูล 6.2.4.1.118 โหนด 8 vCPU/32 GiB — Application & API 8 · Search 3 · Worker/Queue/Ingress 2 · System/Observability/CI 2 · Document Store 3 · Kubernetes 2 cluster · RDS PostgreSQL HA ข้าม AZ · Managed Kafka 3 broker × 300 GB · Redis 32 GB · EVS 9.5 TB · OBS 15 TB · ELB และ NAT · Self-Service Portal พร้อม MFA · จัดสรรทรัพยากร 130% ตาม TOR 6.2.4.7
  • เครือข่ายและ CDN 6.2.4.1.2bandwidth · CDN · ค่าบริการส่งสัญญาณวิดีโอไลฟ์และ transcoding
  • DR Site แบบ Warm Standby 6.2.4.2.15 โหนด 40 vCPU/160 GB = 28% ของศูนย์หลัก · RPO และ RTO ≤ 4 ชม. · DR Drill ปีละ 1 ครั้ง
  • สำรองและ replicate ข้อมูล 6.2.4.2.2Immutable backup · สำรองทั้งสองศูนย์ตาม TOR 6.2.4.12

ความมั่นคงปลอดภัย

ชีต 5.2.5 · ติดตั้งในประเทศทั้งหมด

  • WAF และ DDoS mitigation 6.2.5.1.1Cloudflare Enterprise — CDN · WAF · Bot · Anti-DDoS
  • NGFW 6.2.5.1.2FortiGate-VM04 Enterprise คู่ HA · ผู้ผลิตระดับ Gartner Leader
  • SIEM 6.2.5.2.1Wazuh self-host — manager HA ×2 + indexer ×3 · เลือก self-host เพราะไม่มี SaaS รายใดมี region ไทย
  • Log WORM และ Portal 6.2.5.2.2FortiAnalyzer + OBS compliance mode · เก็บ log จราจร 12 เดือน
  • VA Scanner 6.2.5.3.1Tenable / Qualys Cloud Agent · รายงานทุก 3 เดือน

ปฏิบัติการและดูแลระบบ

ชีต 5.2.2 · 24 เดือน

  • Platform Operation Center 24×7 6.2.2.2.1SLA 99.9% · severity level · response และ restoration time · escalation matrix · Monthly Health Check
  • แก้ข้อบกพร่องและ patch ความปลอดภัย 6.2.2.2.2hotfix และ release process · สสว. ไม่มีค่าใช้จ่ายเพิ่ม
  • ซอฟต์แวร์เฝ้าระวังและ ITSM 6.2.2.2.3เช่าใช้รายเดือน — ไม่มีห้อง ไม่มีอุปกรณ์ ตามข้อ 7
  • Customer & Seller Service 24×7 6.2.2.1.1รองรับผู้ใช้ 150,000 ราย และผู้ขาย 80,000 ราย · First Response และ Resolution Time พร้อมรายงานรายเดือน
  • Data & Analytics และรายงานผล 6.2.2.3.3รายงานรายเดือนและรายไตรมาส · พฤติกรรมผู้ใช้ · ยอดขาย · ประสิทธิภาพแคมเปญ

ทดสอบระบบ

ชีต 5.2.3 · ผูกกับรอบส่งมอบ

  • UAT ตามรอบส่งมอบ 6.2.3.1.18 รอบ พร้อมรายงานเทียบความต้องการผู้ใช้
  • UX Testing 6.2.3.1.22 รอบ รอบละ 60 ผู้ใช้ แยกกลุ่มผู้ซื้อและผู้ขาย
  • สภาพแวดล้อมทดสอบแบบปิด 6.2.3.2.1คล้ายระบบจริง ต้องมีก่อนนำ source code ขึ้น production
  • Load Test 6.2.3.2.38 รอบ · concurrent 300 · ธุรกรรมต่อเนื่อง 5,000 · ร้าน 3,000 · สินค้า 300,000
  • Penetration Test 6.2.3.3.16 ครั้ง White Box และ Black Box ผูกกับ major release
  • PDPA Audit 6.2.3.3.24 ครั้ง · Spot Check · ออกใบรับรอง · DPA กับคู่ค้า
03

กลไกของ OCN ที่กำหนดสถาปัตยกรรม

OCN ไม่ใช่ REST proxy ธรรมดา โปรโตคอลการค้าแบบเปิดเป็น asynchronous ทั้งเส้น — คำสั่งที่ส่งไปได้กลับมาแค่ ACK ส่วนคำตอบจริงกลับมาเป็น callback คนละ request นี่คือเหตุผลทางเทคนิคที่ต้องมี message broker ไม่ใช่เพราะแพลตฟอร์มต่างประเทศเจ้าใดใช้

e-MarketplaceBuyer / Seller service OCN Gatewayauth · quota · schema validate Kafkaocn.search · ocn.on_search Channel Adapterแปลง canonical → API พันธมิตร ระบบพันธมิตรMOU · นิติบุคคลไทย POST /search publish consume fan-out × N ราย 202 ACK เท่านั้น callback on_search — เป็น request ใหม่ ไม่ใช่ response ของ request เดิม ส่งต่อให้ผู้ใช้ผ่าน webhook / SSE ตัวคูณภาระอยู่ที่ “จำนวนผู้ขาย” ไม่ใช่จำนวนธุรกรรม ที่ 100,000 ธุรกรรม/วัน fan-out ไปผู้ขาย 200 ราย เผื่อ peak 3 เท่า ≈ 12,000 msg/วินาที — ถ้าผู้ขายขึ้นเป็น 5,000 ราย ภาระเพิ่ม 25 เท่า ต้องออกแบบ Gateway ให้กรองตามหมวดสินค้าและพื้นที่ก่อน broadcast ตั้งแต่วันแรก ไม่ใช่ไปแก้ตอนผู้ขายเยอะแล้ว
ภาพที่ 2 — เส้นทึบสีเขียวคือคำสั่งที่ส่งออกไป เส้นประคือ ACK ที่ได้กลับมาทันที เส้นสีน้ำตาลคือคำตอบจริงที่กลับมาทีหลังเป็นคนละ request ถ้าออกแบบเป็น synchronous REST ธรรมดา ระบบจะค้างรอพันธมิตรที่ช้าที่สุดเสมอ
04

Runtime และการวางระบบจริง

ข้อ 6.2.4 บังคับศูนย์ข้อมูลในประเทศไทย และข้อ 7 ห้ามงบลงทุน — ทุกอย่างต้องเป็นค่าเช่าหรือค่าบริการรายงวด ห้ามซื้อสิทธิ์ขาด ห้ามซื้อครุภัณฑ์ ข้อนี้ตัดตัวเลือกทางเทคนิคไปหลายตัวก่อนจะได้เทียบราคาด้วยซ้ำ

ผู้ใช้งานทั่วประเทศ · 150,000 ราย Cloudflare Enterprise CDN · WAF · Anti-DDoS · Bot Management TRUE IDC PRIVATE / DEDICATED CLOUD NGFW FortiGate-VM04 Enterprise — คู่ HA วางนอก VPC · เชื่อมด้วย Direct Connect Direct Connect VPC · TRUE IDC CLOUD+ (สแตก HUAWEI) · AP-BANGKOK Elastic Load Balance — Network LB + Application LB · 2 AZ Kubernetes 2 cluster · 18 โหนด · 144 vCPU / 576 GiB Application & API 8 โหนด — Next.js SSR และ service Search 3 โหนด · Document Store 3 โหนด Worker / Queue / Ingress 2 · Observability / CI 2 ขนาดโหนดกำหนดโดย TOR 6.2.4.6 ที่บังคับ NIC ≥ 10 Gbps Managed Service RDS PostgreSQL — HA ข้าม AZ Managed Kafka 3 broker DCS Redis 32 GB HA OBS 15 TB · EVS SSD 9.5 TB ชั้นความมั่นคงปลอดภัยที่ติดตั้งในประเทศ Wazuh SIEM — manager HA ×2 + indexer ×3 · FortiAnalyzer 50 GB/วัน · OBS WORM · VA Scanner เลือก self-host เพราะไม่มีผู้ให้บริการ SaaS ด้านความปลอดภัยรายใดมี region ในไทย และ log จราจรมี IP ผู้ใช้ ซึ่งเป็นข้อมูลส่วนบุคคลตาม PDPA DR SITE · WARM STANDBY 5 โหนด · 40 vCPU / 160 GB = 28% ของศูนย์หลัก ตามสัดส่วนมาตรฐาน RPO ≤ 4 ชม. · RTO ≤ 4 ชม. DR Drill ปีละ 1 ครั้ง Immutable backup เก็บทั้งสองศูนย์ async ข้อจำกัดที่ต้องเขียนลง DR Plan bucket ที่เปิด WORM ใช้ cross-region replication ไม่ได้ → log archive ต้อง เขียนขนานสองศูนย์ · เปิดแล้วปิดไม่ได้ บังคับ versioning ถาวร สภาพแวดล้อมนอก production Dev / Staging / UAT 3 โหนด (งบ 6.2.4.1.1) · สภาพแวดล้อมทดสอบโหลดแบบปิดที่คล้ายระบบจริง เป็นค่าเช่ารายเดือน 24 เดือน (งบ 6.2.3.2.1) TOR ข้อ 6.2.3 บังคับให้ load test ทำที่สภาพแวดล้อมนี้ ก่อนนำ source code ขึ้นระบบจริง
ภาพที่ 3 — จุดที่ต่างจากผังคลาวด์ทั่วไปคือ NGFW ไม่ได้อยู่ใน VPC ทั้ง Fortinet และ Palo Alto ไม่ประกาศรองรับสแตก Huawei ที่ True IDC สร้างไว้ อิมเมจ BYOL ที่ผ่านเครื่องมือแปลงถือว่า “touched” และไม่ได้ support — ทางออกคือวางบน Private Cloud แล้วเชื่อมเข้ามาด้วย Direct Connect พร้อมขอหนังสือรับรองการสนับสนุนร่วม
05

Tech stack — ที่ล็อกแล้วกับที่ยังต้องตัดสิน

คอลัมน์สถานะคือสิ่งที่ต้องถกในที่ประชุม ไม่ใช่รายการเทคโนโลยี — ของที่ล็อกแล้วล็อกเพราะ TOR หรือเพราะงบเขียนไว้แล้ว ไม่ใช่เพราะชอบ

ชั้นตัวเลือกที่เสนอสถานะเหตุผลที่ผูกไว้ / สิ่งที่ต้องชั่ง
FrontendNext.js 16 App Router · TypeScript 5 · Tailwind 4 · Zustand + TanStack Queryต้องตัดสินdemo ใช้อยู่แล้วและผ่านการ pitch มาแล้ว แต่ยังไม่ผูกมัดระบบจริง — ต้องชั่งกับทีมที่จะรับงานจริงว่าถนัดตัวไหน
BackendNestJS 11 · REST + OpenAPI 3.0 · Hexagonal (domain / application / adapter)ต้องตัดสินdemo บังคับ layer ด้วย dependency-cruiser lint อยู่แล้ว สิ่งที่ต้องล็อกคือหลักการ hexagonal ไม่ใช่เฟรมเวิร์ก — ถ้าเปลี่ยนตัว ต้องได้กลไกบังคับขอบเขตเทียบเท่า
ฐานข้อมูลหลักPostgreSQL 18 · RDS Primary/Standby ข้าม AZ · 16 vCPU / 2 TBต้องตัดสินสเปคและ HA ข้าม AZ ล็อกด้วย TOR 6.2.4.15 แล้ว แต่ตัวเครื่องยนต์ยังเลือกได้ — ข้อจำกัดคือต้องเป็น managed service ที่ True IDC มีให้ในไทย
Document storePostgreSQL JSONB ในคลัสเตอร์เดิม หรือ MongoDB 3 โหนดแยกต้องตัดสินงบมี 3 โหนดรออยู่แล้ว ถ้าใช้ JSONB ได้ 3 โหนดนั้นเอาไปเสริม search หรือ worker ได้ · demo ใช้ MongoDB mock ซึ่งยังไม่ผูกมัดอะไร
SearchOpenSearch หรือ Elasticsearch 3 โหนด + Thai tokenizerต้องตัดสินที่ล็อกคือ “ต้องมีคลัสเตอร์ค้นหาแยก 3 โหนด” เพราะสินค้า 300,000 รายการและ TOR บังคับ Advanced Algorithms — เลี่ยงด้วย full-text ของ PostgreSQL ที่สเกลนี้ไม่ได้ · บรรทัด 6.2.4.1.1 ระบุชื่อ OpenSearch ไว้แล้ว ถ้าจะเปลี่ยนตัวต้องแก้ข้อความในบรรทัดนั้นด้วย
Message brokerManaged Kafka (DMS) 3 broker × 300 GB — kafka.2u4g.cluster.smallล็อกแล้วเขียนไว้ตรงตัวในบรรทัด 6.2.4.1.1 แล้ว ผูกเหตุผลกับข้อ 6.2.1.1 เรื่อง Webhook realtime และ No-Code · ราคา query จริง 372.75 USD/เดือน ≈ 13,600 บาท หรือราว 3.5% ของบรรทัด · โหนด Worker/Queue/Ingress 2 ตัวเป็น consumer คนละของกับ broker
Auth ผู้ใช้better-auth + JWT · Social Login ผ่าน Google และ Facebookต้องตัดสินขอบเขตที่ TOR เขียนไว้คือสมาชิกและ Social Login เท่านั้น — การเชื่อม SME Profile ของ สสว. เป็นการส่งข้อมูลผู้ขายและยอดขาย ไม่ใช่ identity provider จึงไม่ผูกกับตัวเลือกนี้
Auth พันธมิตร (OCN)OAuth2 client-credentials + API key · scope ต่อ adapterต้องตัดสินจะใช้ตัวเดียวกับ auth ผู้ใช้หรือแยก authorization server — แยกจะสะอาดกว่าตอนตรวจรับ แต่เพิ่มของที่ต้องดูแล
CI/CDGitLab CE หรือ Gitea self-host + Argo CD · Trivy scanต้องตัดสินdemo ใช้ Google Cloud Build ซึ่งใช้ไม่ได้กับข้อบังคับศูนย์ข้อมูลในไทย · โหนด Observability/CI 2 ตัวรองรับไว้แล้ว
IaCTerraform + Helm · environment แยกด้วย workspaceต้องตัดสินใครเป็นเจ้าของ state และใคร apply ได้ — ข้อนี้ตัดสินพร้อมกับเรื่องแบ่งงาน
ObservabilityCloud Eye + APM · log collector บนโหนด Systemล็อกแล้วเก็บย้อนหลัง 90 วัน เปิด read-only ให้ สสว. ตาม TOR 6.2.4.16–6.2.4.17
Repositorymonorepo เดียว (turborepo + pnpm) หรือ แยก repo ต่อ partyต้องตัดสินข้อนี้กระทบการแบ่งงานมากที่สุด — ดูหัวข้อถัดไป
สัญญาระหว่างทีมopenapi.yaml + packages/types + orval codegenล็อกแล้วทำงานอยู่แล้วใน demo — client ของ frontend generate จาก spec ไม่ได้เขียนมือ

ข้อ 7 กับการเลือกเครื่องมือ

ข้อ 7 ของกรอบการดำเนินงานห้ามงบลงทุนตรงตัว — ห้ามค่าครุภัณฑ์ ห้ามค่าที่ดินและสิ่งก่อสร้าง ผลทางเทคนิคคือ ลิขสิทธิ์ซอฟต์แวร์ถาวรที่ใช้เกิน 1 ปีอาจถูกตีเป็นสินทรัพย์ไม่มีตัวตน ทุกเครื่องมือที่จะเลือกต้องเป็น subscription หรือค่าบริการรายงวด และคำว่า “ติดตั้ง” ควรเขียนเป็น “ค่าบริการออกแบบและตั้งค่า” ทั้งหมด ข้อนี้ตัดตัวเลือกที่ขายแบบ perpetual license ออกก่อนจะได้เทียบ feature

06

การแบ่ง service ตามโมดูล

โมดูลใน TOR มีสิบกว่าตัว คำถามคือแต่ละโมดูลควรเป็นหน่วยที่ deploy แยกหรือไม่ — หัวข้อนี้วางสองแบบให้เทียบกันจริง ๆ ทั้งแบบ modular ที่รวมโมดูลไว้ในหน่วยเดียว และแบบ microservice ที่แตกทุกโมดูลออกจากกัน พร้อมราคาที่แต่ละแบบต้องจ่าย

แบบ A — modular · 7 หน่วย deploy

ขอบเขตของโมดูลบังคับในโค้ดด้วย hexagonal และ lint ส่วนจำนวนหน่วยที่ deploy จริงมีแค่เท่าที่มีเหตุผลทางเทคนิครองรับ

หน่วยที่ DEPLOY — ฝั่งหน้าบ้าน web — Next.js · Buyer Storefront + Seller Center แชร์ Design System, session และ OpenAPI client ชุดเดียวกัน admin — Next.js · Admin Console + One Data Dashboard สิทธิ์คนละชุด แยก deploy ไม่ให้ปนกับหน้าผู้ใช้ทั่วไป REST · client generate จาก openapi.yaml ชุดเดียว หน่วยที่ DEPLOY — ฝั่งหลังบ้าน core-api — NestJS modular monolith · หน่วย deploy เดียว Identity & Session · RBACConsent & DSRCatalog & Inventory Cart & CheckoutOrder ManagementPayment & Settlement Commission & FeeMarketing EngineSeller & SME Profile e-Tax InvoiceModerationReporting & One Data โมดูลคุยกันในโพรเซสผ่าน port/adapter ไม่ใช่ HTTP · checkout จบใน transaction เดียว ไม่ต้องทำ saga และไม่ต้องกู้สถานะข้ามบริการเมื่อขั้นใดขั้นหนึ่งพัง search-apiIndexing · Query · Ranking · Recommendation ocn-apiGateway · Partner Auth · Registry · Adapter ×5 · Webhook live-apiLive Session · Anchor & Schedule · ผูกตะกร้าเรียลไทม์ workerKafka consumer · งานตามเวลา · retry/DLQ · sync ดัชนี ชั้นข้อมูลที่ใช้ร่วมกัน — ไม่แตกตามจำนวนหน่วย deploy PostgreSQLschema แยกตามโมดูล ฐานเดียว Redissession · cart · rate limit Search Clusterดัชนีสินค้า — search-api เท่านั้น Object Storageภาพ · วิดีโอ · เอกสาร Managed Kafkaevent ข้ามหน่วย deploy
ภาพที่ 4 — สิบสองโมดูลอยู่ในหน่วย deploy เดียว เส้นแบ่งระหว่างโมดูลมีจริงแต่อยู่ในโค้ด ไม่ใช่ในเครือข่าย ส่วนอีกสี่หน่วยที่แยกออกมาแยกเพราะมีเหตุผลทางเทคนิครองรับ ไม่ใช่เพราะเป็นคนละโดเมน

เกณฑ์ที่ใช้ตัดสินว่าอะไรได้แยกมีข้อเดียว — แยกเมื่อการอยู่รวมกันสร้างปัญหาจริง ไม่ใช่แยกเพราะเป็นคนละโดเมน โดเมนที่ต่างกันจัดการด้วยโมดูลในโค้ดได้อยู่แล้ว สิ่งที่โมดูลจัดการไม่ได้คือโปรไฟล์การสเกล รูปแบบการเชื่อมต่อ และขอบเขตความปลอดภัยที่ต่างกัน

หน่วย deployโมดูลข้างในเหตุผลที่แยกโปรไฟล์การสเกล
core-apiIdentity · Consent & DSR · Catalog · Cart · Order · Payment · Commission · Marketing · Seller · e-Tax · Moderation · Reportingไม่แยก — ทั้งหมดอยู่ใน transaction เดียวกันของ checkout และใช้ข้อมูลชุดเดียวกัน แยกเมื่อไรได้ saga เมื่อนั้นสเกลตาม traffic ผู้ใช้ · เพิ่ม replica ทั้งก้อน
search-apiIndexing · Query · Ranking · Recommendationเป็นภาระ read หนักที่พุ่งตอนแคมเปญ และเป็นเจ้าของคลัสเตอร์ค้นหาเพียงผู้เดียว ถ้าอยู่รวมจะลาก core ล่มไปด้วยตอน re-indexสเกลแยกตามคิวรี · re-index ไม่กระทบการสั่งซื้อ
ocn-apiGateway · Partner Auth · Registry · Adapter 5 ช่องทาง · Webhook Dispatcherผู้เรียกเป็นคนนอกองค์กร ใช้ auth คนละชุด (OAuth2 client-credentials ไม่ใช่ session ผู้ใช้) และมี quota รายพันธมิตร — เป็นขอบเขตความปลอดภัยคนละชั้นสเกลตาม fan-out ของพันธมิตร ไม่ใช่ตามผู้ใช้
live-apiLive Session · Anchor & Schedule · Moderation realtime · ผูกตะกร้าถือ connection ค้างไว้นาน ซึ่งเป็นรูปแบบตรงข้ามกับ request สั้น ๆ ของ core และทำให้ rolling deploy ของ core ตัดไลฟ์ที่กำลังออกอากาศสเกลตามจำนวนไลฟ์พร้อมกัน · deploy คนละรอบ
workerKafka consumer · งานตามเวลา · retry และ DLQ · sync ดัชนี · ส่ง e-Tax · สร้างรายงานไม่รับ traffic จากภายนอกเลย งานยาวและล้มเหลวได้โดยผู้ใช้ไม่ต้องรอ ถ้าอยู่ใน core งานหนักจะกินทรัพยากรของหน้าเว็บสเกลตามความยาวคิว · ล้มแล้ว retry ได้

แบบ B — microservice · 16 หน่วย deploy

แตกทุกโมดูลในหัวข้อที่ 02 ออกเป็นบริการของตัวเอง แต่ละตัวมีฐานข้อมูล pipeline และวงจรปล่อยของตัวเอง ทีมที่เป็นเจ้าของบริการหนึ่งปล่อยของได้โดยไม่ต้องรอใคร

16 หน่วย DEPLOY — แต่ละตัวมีฐานข้อมูลและ PIPELINE ของตัวเอง API Gateway / BFF — รวม response หลายบริการให้หน้าบ้านเรียกครั้งเดียว Identity Serviceฐานข้อมูล + pipeline ของตัวเอง Consent Serviceฐานข้อมูล + pipeline ของตัวเอง Catalog Serviceฐานข้อมูล + pipeline ของตัวเอง Cart Serviceฐานข้อมูล + pipeline ของตัวเอง Order Serviceฐานข้อมูล + pipeline ของตัวเอง Payment Serviceฐานข้อมูล + pipeline ของตัวเอง Commission Serviceฐานข้อมูล + pipeline ของตัวเอง Marketing Serviceฐานข้อมูล + pipeline ของตัวเอง Seller Serviceฐานข้อมูล + pipeline ของตัวเอง e-Tax Serviceฐานข้อมูล + pipeline ของตัวเอง Moderation Serviceฐานข้อมูล + pipeline ของตัวเอง Reporting Serviceฐานข้อมูล + pipeline ของตัวเอง Search Serviceแยกอยู่แล้วทั้งสองแบบ OCN Serviceแยกอยู่แล้วทั้งสองแบบ Live Serviceแยกอยู่แล้วทั้งสองแบบ Worker Poolแยกอยู่แล้วทั้งสองแบบ ของที่ต้องมีเพิ่ม เพราะแตกเป็น 16 บริการ API Gateway / BFFรวม responseให้หน้าบ้าน Service Discovery+ mTLSระหว่างบริการ Saga Orchestrator+ compensatingทุกขั้นตอน Distributed Tracingไล่ปัญหาข้าม16 บริการ Config & Secretกระจาย 16 ชุดให้ตรงกันเสมอ CI/CD และ Alert16 pipeline16 ชุด alert
ภาพที่ 5 — สิ่งที่มักถูกลืมตอนประเมินแบบนี้คือแถบล่าง ของหกอย่างนั้นไม่ใช่ฟีเจอร์ที่ สสว. ตรวจรับ แต่เป็นงานที่ต้องมีคนทำและดูแลตลอดสัญญา 24 เดือน

ความต่างที่จับต้องได้ที่สุด — เส้นทาง checkout

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

แบบ A — modular core-api — โพรเซสเดียว ฐานเดียว 1 · ตัดสต๊อก — โมดูล Catalog 2 · สร้างออร์เดอร์ — โมดูล Order 3 · ตัดเงิน — โมดูล Payment 4 · คิดคอมมิชชัน — โมดูล Commission BEGIN … COMMIT PostgreSQL — commit เดียว ทั้งสี่ขั้นอยู่ใน transaction เดียวกัน ขั้นไหนพัง rollback ทั้งก้อนอัตโนมัติ ไม่มีสถานะค้างกลางทาง แบบ B — microservice Saga Orchestrator — ของที่ต้องเขียนเพิ่ม 1 · ตัดสต๊อก — Catalog Service 2 · สร้างออร์เดอร์ — Order Service 3 · ตัดเงิน — Payment Service 4 · คิดคอมมิชชัน — Commission Service catalog-dborder-db payment-dbcommission-db เส้นย้อนกลับคือ compensating transaction ที่ต้องเขียนเองทุกขั้น สี่ขั้นเป็นคนละบริการ คนละฐาน คนละ commit ตัดเงินสำเร็จแล้วคอมมิชชันพัง = ต้องสั่งคืนเงินเอง และมีสถานะค้างระหว่างทาง
ภาพที่ 6 — ขั้นตอนเหมือนกันทั้งสองฝั่ง ต่างกันแค่ว่าขอบเขต transaction ลากคลุมทั้งสี่ขั้นหรือไม่ · ฝั่งขวาทุกเส้นประคือโค้ดที่ต้องเขียนเพิ่ม ทดสอบเพิ่ม และดูแลเพิ่มตลอดสัญญา

ตารางเทียบ

มิติแบบ A — modularแบบ B — microservice
หน่วยที่ deploy716 ขึ้นไป
ฐานข้อมูลPostgreSQL หนึ่ง instance · schema แยกตามโมดูลอย่างน้อย 12 ฐานที่ห้ามอ่านข้ามกัน · ต้องมีวิธี sync ข้อมูลที่ใช้ร่วม
checkouttransaction เดียว rollback อัตโนมัติsaga พร้อม compensating transaction ทุกขั้น
pipeline และ alert7 ชุด16 ชุด
ของที่ต้องมีเพิ่มไม่มีservice discovery · mTLS · saga orchestrator · distributed tracing · config กระจาย
การสเกลจุดร้อนขยาย replica ทั้ง core แม้ร้อนแค่โมดูลเดียวขยายเฉพาะบริการที่ร้อน — ข้อได้เปรียบจริงของแบบ B
การแบ่งงาน 3 partyต้องมีวินัย lint และ review ข้ามทีม ไม่งั้นโค้ดชนกันขอบเขตชัดโดยธรรมชาติ แต่ละ party เป็นเจ้าของบริการและปล่อยของเอง — ข้อได้เปรียบจริงของแบบ B
ความเสี่ยงต่องวดที่ 2ต่ำ — เวลาส่วนใหญ่ลงไปที่ฟีเจอร์สูง — เดือนแรก ๆ หมดไปกับ infrastructure ที่ยังตรวจรับไม่ได้
ตรวจรับตาม TORส่งมอบเป็นระบบงาน ตรงกับที่ชีต 5.2.1 เขียนไว้ต้อง map บริการกลับเข้าบรรทัดงบเอง ซึ่งไม่ตรงกันหนึ่งต่อหนึ่ง
ต้นทุน computeอยู่ในกรอบ 18 โหนดที่ตั้งงบไว้min replica และ sidecar ต่อบริการกินโหนดเพิ่ม ต้องคำนวณใหม่ก่อนยื่น
ทีมที่ต้องมีplatform engineer ที่ดูแลคลัสเตอร์ได้เพิ่มคนดูแล mesh · tracing · orchestrator แบบเต็มเวลา

ข้อเสนอ: เริ่มด้วยแบบ A แต่อย่าเลือกเพราะกลัว microservice — ข้อได้เปรียบสองข้อของแบบ B เป็นเรื่องจริงและตรงกับโจทย์ของที่ประชุมนี้พอดี คือมันแบ่งงานสาม party ได้สะอาดกว่ามาก โดยไม่ต้องอาศัยวินัยของคนในการ review โค้ดข้ามบริษัท · สิ่งที่ทำให้ยังไม่คุ้มคือเวลา ไม่ใช่หลักการ งวดที่ 2 อยู่ที่ 31 ธันวาคม 2569 และของหกอย่างในแถบล่างของภาพที่ 5 ต้องเสร็จก่อนฟีเจอร์แรกจะขึ้นได้ · ทางที่แนะนำคือแบบ A ที่บังคับขอบเขตเข้มพอจะแตกทีหลังได้ — โมดูลคุยกันผ่าน port อยู่แล้ว ถ้าปีที่สองพบว่าโมดูลไหนร้อนจริงหรือทีมไหนชนกันจริง ค่อยยกออกไปเป็นบริการของตัวเอง ราคาถูกกว่าการแตกทั้งหมดตั้งแต่ยังไม่รู้ว่าจุดไหนจะร้อน

07

3 แบบการแบ่งงานระหว่าง tech party

โครงสร้าง component เหมือนกันทั้งสามแบบ ต่างกันที่เส้นแบ่งความรับผิดชอบ — และเส้นที่ลากต่างกัน ทำให้ต้นทุนการประสานงานกับความเสี่ยงตอนตรวจรับต่างกันคนละเรื่อง

แบบ A — ตามชั้นระบบ แบบ B — ตาม business domain แบบ C — ตาม stack layer ตรงกับโครงสร้างงบและงวดส่งมอบ แต่ละ party ส่งมอบ end-to-end เอง ตรงกับ skill set ของทีม หน้าบ้าน 3 แอป + Design System Core — ผู้ซื้อ · ค้นหา · ตะกร้า · ชำระเงิน Core — ผู้ขาย · ออร์เดอร์ · ขนส่ง · e-Tax Admin · One Data · Moderation OCN + Adapter 5 ช่องทาง Cloud · Kubernetes · CI/CD · IaC Security · SIEM · Ops 24×7 · QA หน้าบ้าน 3 แอป + Design System Core — ผู้ซื้อ · ค้นหา · ตะกร้า · ชำระเงิน Core — ผู้ขาย · ออร์เดอร์ · ขนส่ง · e-Tax Admin · One Data · Moderation OCN + Adapter 5 ช่องทาง Cloud · Kubernetes · CI/CD · IaC Security · SIEM · Ops 24×7 · QA หน้าบ้าน 3 แอป + Design System Core — ผู้ซื้อ · ค้นหา · ตะกร้า · ชำระเงิน Core — ผู้ขาย · ออร์เดอร์ · ขนส่ง · e-Tax Admin · One Data · Moderation OCN + Adapter 5 ช่องทาง Cloud · Kubernetes · CI/CD · IaC Security · SIEM · Ops 24×7 · QA แบ่งภายในเองตาม domain แบ่งตามหน้าจอที่แต่ละทีมเป็นเจ้าของ ทีมกลาง ทีมกลาง P1P1P1 P2P2 P3P3 P1+P2+P3P1P2 P3P3 P1 P2P2P2P2 P3P3 เส้นแบ่งน้อยที่สุด 2 เส้น เส้นแบ่งกลาง แต่ตัดผ่านชั้นหน้าบ้าน ทุกฟีเจอร์ต้องผ่านทั้ง 3 party ภาระตกที่ P1 ราว 60–65% ของงานพัฒนา ต้องมีเจ้าของ Design System และ API contract ต้นทุนประสานงานสูงสุด ไม่มีเจ้าของผลลัพธ์
Party 1 Party 2 Party 3 ทีมกลาง
ภาพที่ 7 — ชั้นระบบชุดเดียวกันทั้งสามคอลัมน์ สิ่งที่เปลี่ยนคือสีเท่านั้น จำนวนเส้นแบ่งที่ตัดผ่านชั้นหนึ่งคือประมาณการต้นทุนการประสานงานที่ตรงที่สุดที่มี

แบบ A — ตามชั้นระบบ

P1 แอป · P2 OCN+Admin · P3 Infra/Sec/Ops

สัญญาระหว่างทีม
openapi.yaml ระหว่าง P1↔P2 · event schema ของ OCN · P3 ส่งมอบ namespace, pipeline และ environment ให้อีกสองทีมใช้เป็นบริการ
ข้อดี
  • เส้นแบ่งตรงกับชีตงบ 5.2.1 / 5.2.4+5.2.5+5.2.2 ตรวจรับและเบิกจ่ายแยกกันได้ทันที
  • P3 รับงาน 24×7 ทั้งก้อน ไม่ต้องแบ่งเวรข้ามบริษัท
  • OCN เป็นของ P2 ทั้งชิ้น ซึ่งเป็นส่วนที่คุยกับพันธมิตรภายนอกและต้องมีเจ้าของคนเดียว
ความเสี่ยง
  • P1 ใหญ่เกินไป — ราว 60–65% ของงานพัฒนาทั้งหมด ถ้า P1 ช้า ทั้งโครงการช้า
  • ต้องแบ่งงานภายใน P1 อีกชั้นอยู่ดี เท่ากับเลื่อนปัญหาไปไม่ได้แก้

แบบ B — ตาม business domain

P1 ผู้ซื้อ · P2 ผู้ขาย · P3 Admin+OCN

สัญญาระหว่างทีม
Design System และ packages/types เป็นของกลาง มีเจ้าของคนเดียว · ตาราง ownership ของฐานข้อมูลรายตาราง · Cloud/Security/Ops แยกเป็นทีมกลาง
ข้อดี
  • แต่ละ party ส่งมอบฟีเจอร์ได้จบในทีมเดียว ลด hand-off ต่อ ticket
  • ภาระงานเฉลี่ยกันดีที่สุดในสามแบบ
  • ตรงกับ demo scenario ที่ใช้ pitch อยู่แล้ว (Seller / Buyer / Admin)
ความเสี่ยง
  • สามทีมแก้ repo หน้าบ้านเดียวกัน ถ้าไม่มีเจ้าของ Design System ที่มีอำนาจตัดสิน UI จะแตกเป็นสามสไตล์ภายในเดือนที่สอง
  • ฐานข้อมูลใช้ร่วมกัน ต้องล็อกว่าใครเขียนตารางไหนได้ ไม่งั้น migration ชนกัน
  • ไม่มีใครเป็นเจ้าของ Cloud/Ops โดยตรง ต้องหาทีมที่สี่หรือจ้างข้างนอก ซึ่งขัดกับโจทย์ 3 party

แบบ C — ตาม stack layer

P1 Frontend · P2 Backend+OCN · P3 Infra/Sec/Ops

สัญญาระหว่างทีม
openapi.yaml เป็นสัญญาหลักเส้นเดียว generate client ด้วย orval · P3 ส่งมอบ platform เป็นบริการเหมือนแบบ A
ข้อดี
  • ตรงกับ skill set ที่ตลาดแรงงานไทยมี หาคนง่ายที่สุด
  • สัญญาระหว่างทีมชัดที่สุด มีเส้นเดียวคือ OpenAPI spec
ความเสี่ยง
  • ทุกฟีเจอร์ต้องเดินผ่านทั้งสาม party จบหนึ่ง ticket ใช้สามการประชุม
  • ไม่มีใครรับผิดชอบผลลัพธ์ต่อฟีเจอร์ เวลาตรวจรับไม่ผ่านจะชี้กันไปมา
  • P2 บวมพอ ๆ กับ P1 ของแบบ A แต่ไม่ได้ประโยชน์เรื่องความเป็นเจ้าของ

ข้อเสนอเพื่อเปิดวงถก: ใช้ แบบ A เป็นโครง แล้วยืมแบบ B มาแบ่งภายใน P1 — เพราะงวดส่งมอบและการตรวจรับของ สสว. ผูกกับชีต 5.2.x อยู่แล้ว การลากเส้นตามชั้นระบบทำให้ “ใครส่งมอบอะไร งวดไหน” ตรงกับเอกสารสัญญาโดยไม่ต้องแปลง ส่วนปัญหา P1 ใหญ่เกินไปแก้ด้วยการแบ่งภายในเป็นสาย ผู้ซื้อ / ผู้ขาย ตามแบบ B ซึ่งเป็นปัญหาที่จัดการภายในบริษัทเดียวได้ง่ายกว่าข้ามสัญญา · แบบ C ควรตัดทิ้ง ถ้าไม่ได้มีข้อจำกัดเรื่องคนที่บังคับจริง ๆ

08

สัญญาระหว่างทีมที่ต้องล็อกไม่ว่าจะแบ่งแบบไหน

หกอย่างนี้ต้องมีเจ้าของและต้องนิ่งก่อนใครเริ่มเขียนโค้ดบรรทัดแรกของระบบจริง ไม่ใช่ค่อยตกลงกันระหว่างทาง

สัญญารูปแบบกติกาที่ต้องตกลง
API Contractopenapi.yaml เป็น single source of truthแก้ spec ต้องผ่าน PR review ของทุก party ที่เรียกใช้ · client ทุกตัว generate ด้วย orval ห้ามเขียนมือ · breaking change ต้องขึ้น version ใหม่ ไม่แก้ของเดิม
Canonical Data Modelschema กลางของ Product · Order · Shop · Inventory · Shipment · Payment · Addressทั้ง e-Marketplace และ adapter ทุกตัวพูดภาษาข้อมูลเดียว · adapter เป็นฝ่ายแปลงเข้าหาพันธมิตร ไม่ใช่ core ปรับตามพันธมิตร
Event Taxonomyproduct.* · order.* · stock.* · shipment.* · payment.* · affiliate.conversionชื่อ event · payload · versioning · การรับประกัน at-least-once และ idempotency key ฝั่งผู้รับ
Shared TypeScript typespackages/types · packages/sdk · packages/uiใครมีสิทธิ์ merge · ปล่อยเวอร์ชันอย่างไร · ทีมอื่นอัปเดตตามภายในกี่วัน
Database ownershipตารางแยกตาม bounded contextห้ามอ่านเขียนข้ามขอบเขตโดยตรง ต้องผ่าน API หรือ event เท่านั้น · migration ต้อง review ข้ามทีม
Environment และ pipelineDev · Staging · UAT · สภาพแวดล้อมทดสอบโหลดแบบปิด · Productionใครมีสิทธิ์ deploy ที่ชั้นไหน · gate อะไรบ้างก่อนขึ้น production (Trivy scan · lint สถาปัตยกรรม · test coverage · pentest ผูกกับ major release)
09

สิ่งที่ต้องได้ข้อสรุปในที่ประชุมนี้

เรียงตามผลกระทบ — ข้อที่ 1 ถึง 3 ตัดสินไม่ได้ในที่ประชุมนี้แปลว่าอีกหลายข้อตัดสินไม่ได้ตามไปด้วย

  1. เส้นแบ่งงาน 3 party และเจ้าของ repo

    เลือกแบบ A / B / C หรือแบบผสม และตัดสินพร้อมกันว่าจะเป็น monorepo เดียวที่ทุก party ส่ง PR เข้ามา หรือแยก repo ต่อ party — สองเรื่องนี้แยกกันตัดสินไม่ได้ ถ้าแบ่งตาม domain แบบ B แล้วแยก repo หน้าบ้าน จะได้ Design System สามชุดทันที

    ต้องการ: หัวหน้าทีมทั้ง 3 party + เจ้าของสัญญา
  2. API Gateway กลางกับ OCN Gateway — ระบบเดียวหรือสองระบบ

    งบมีสองจุดที่ทำหน้าที่คล้ายกัน — API Gateway กลางที่ข้อ 6.2.1.1.5 (ชีต 5.2.1) และชั้น Gateway ของ OCN ถ้ารวมเป็น deployment เดียวจะประหยัดของที่ต้องดูแลแต่ผูกสองทีมเข้าด้วยกันตลอดโครงการ ถ้าแยกจะได้ขอบเขตความรับผิดชอบที่สะอาดกว่าตอนตรวจรับ แต่ต้องยอมมี policy สองชุด — ตัดสินพร้อมกับเส้นแบ่งงานในข้อ 1

    ต้องการ: ทีมสถาปัตยกรรม + เจ้าของ OCN
  3. ขนาดระบบที่จะยึด — 3,000 ร้าน หรือ 80,000 ราย

    TOR ขัดกันเอง เกณฑ์ทดสอบข้อ 6.2.3 เขียนฐานข้อมูลร้านค้า 3,000 ร้าน แต่ตัวชี้วัดข้อ 5 ตั้งเป้า SME 80,000 ราย ต่างกัน 27 เท่า ตัวเลขนี้กำหนดทั้ง sizing ของ search, fan-out ของ OCN และจำนวนโหนด — ควรทำหนังสือถาม สสว. ให้ชัดก่อน ไม่ใช่เดา

    ต้องการ: ทีมสถาปัตยกรรม + ผู้ประสานงาน สสว.
  4. NGFW วางที่ไหน และใครขอหนังสือรับรอง

    ทั้ง Fortinet และ Palo Alto ไม่ประกาศรองรับสแตก Huawei ที่ True IDC ใช้ ทางออกที่เสนอคือวางบน True IDC Private/Dedicated Cloud แล้วเชื่อมด้วย Direct Connect — ต้องได้หนังสือรับรองการสนับสนุนร่วมจาก True IDC และผู้ผลิตก่อนยื่น ไม่งั้นเป็นความเสี่ยงที่ตรวจรับไม่ผ่าน

    ต้องการ: ทีม security + จัดซื้อ
  5. Document store — PostgreSQL JSONB หรือ MongoDB แยก

    งบมี 3 โหนดรออยู่แล้ว ถ้าใช้ JSONB ในคลัสเตอร์เดิมได้ 3 โหนดนั้นเอาไปเสริม search หรือ worker ได้ทันทีโดยไม่เพิ่มเงิน ถ้าจะแยก MongoDB ต้องมีเหตุผลทางเทคนิคที่มากกว่า “demo ใช้อยู่”

    ต้องการ: ทีม backend + infra
  6. CI/CD ย้ายจาก Google Cloud Build ไปอะไร

    demo ใช้ Google Cloud Build ซึ่งใช้กับระบบจริงไม่ได้เพราะข้อบังคับศูนย์ข้อมูลในประเทศ โหนด Observability/CI 2 ตัวใน 6.2.4.1.1 รองรับ runner ไว้แล้ว เหลือแค่เลือกตัวและตกลงว่าใครดูแล

    ต้องการ: P3 หรือทีมที่จะรับงาน infra
  7. โค้ด demo เอาไปใช้ต่อหรือเขียนใหม่

    monorepo ปัจจุบันมี 57 spec, hexagonal architecture ที่บังคับด้วย lint และ OpenAPI spec 161 KB ที่ใช้งานได้จริง — ต้องตัดสินว่าเป็นฐานของระบบจริงหรือเป็นแค่ prototype สำหรับ pitch คำตอบนี้เปลี่ยนประมาณการเวลาของงวด 2 ทั้งหมด

    ต้องการ: ทุก party
  8. การเชื่อม SME Profile ของ สสว. — ใครติดต่อและได้ spec เมื่อไร

    บรรทัด 6.2.1.2.1 ผูกกับระบบของ สสว. โดยตรง ทั้งขาส่งข้อมูลผู้ขายเข้าไปและ API ส่งยอดขายกลับ ซึ่งเป็นฝั่งที่เราควบคุมเวลาไม่ได้ ต้องได้ schema, วิธียืนยันตัวตนระหว่างระบบ และสภาพแวดล้อมทดสอบตั้งแต่ก่อนเซ็นสัญญา ไม่ใช่รอถึงสปรินต์ที่จะทำ · และต้องตกลงฐานทางกฎหมายของการส่งข้อมูลส่วนบุคคลข้ามหน่วยงานพร้อมกันไปด้วย

    ต้องการ: เจ้าของโมดูลผู้ขาย + ฝ่ายประสานงาน สสว.