← Back to PostgreSQL course
PHASE 3: DEVOPS, MAINTAINABILITY & ARCHITECTURAL BOUNDARIES BOUNDARY MATRIX ⚖️

Day 13: Decision Matrix - App vs. DB Boundaries & CPU Protection (การกำหนดขอบเขตสถาปัตยกรรมระหว่าง Application Layer และ Database Layer, การสร้าง Decision Matrix, และการปกป้อง CPU ของฐานข้อมูล)

หลังจากเขียน Stored Units ได้ครบทุกเสาหลัก คำถามสำคัญที่สุดในชีวิตวิศวกรคือ "ตรรกะไหนควรทำใน App? และตรรกะไหนควรส่งให้ DB?" วันนี้เราจะสร้าง Architectural Decision Matrix อย่างเป็นระบบ แยกงาน CPU-Bound (Hashing, Crypto, String Parsing, External API) ไปไว้บน Stateless App เพื่อให้ Scale-Out ได้ง่าย และปกป้องเซิร์ฟเวอร์ DB ให้รับเฉพาะงาน Data-Bound & Atomic Transactions ปลอดล็อก CPU 100% ตลอดกาล!

📍 ตำแหน่งปัจจุบันของคุณบน Roadmap (18-Day Masterclass) Phase 3: Architectural Boundary Enforcement
Phase 1: Architecture Synthesis (Days 1–4) ✓
➔
Phase 2: 4 Pillars & Capstone (Days 5–10) ✓
➔ ➔ ➔
Day 13: App vs DB Decision Matrix
➔
1

🏛️ มโนทัศน์ สถาปัตยกรรมองค์กร และสถานการณ์จริง (Concept & Architecture)

ในอดีต ยุค Monolithic DB มักมีค่านิยมสุดโต่งเขียน Business Logic ทุกอย่างไว้ใน Stored Procedures จน DB กลายเป็น "Monolithic Brain" แต่ในยุค Cloud-Native ปัจจุบัน การหลับหูหลับตาโยนทุกอย่างลง DB ทำให้เซิร์ฟเวอร์ DB เกิด CPU Bottleneck 100% และค้างทั้งระบบ ในทางกลับกัน หากผลักทุกอย่างไปอยู่บน App ก็จะเกิดปัญหา Chatty Network RTT และขาดความปลอดภัยด้าน Data Integrity!

💥 บทเรียนจริงจากสมรภูมิระดับโลก: Basecamp (37signals) & Shopify กับกับดัก Monolithic DB CPU Churn
ในสถาปัตยกรรมของ Basecamp (โดย DHH) และระบบ Flash Sale ของ Shopify เคยเผชิญกับปัญหาสุดคลาสสิก: วิศวกรต้องการลด Network Round-Trip จึงเขียน Stored Function ทำการคำนวณ Hashing (SHA-256), ตรวจสอบรหัสผ่านผู้ใช้, และ Parse JSON Payload ขนาด 5 MB ภายในฐานข้อมูล PostgreSQL โดยตรง

วิกฤตเกิดขึ้นเมื่อมีผู้ใช้ล็อกอินพร้อมกันนับแสนรายในช่วง Cyber Monday: "CPU ของ Database Server พุ่งทะลุ 100% ทันที!" ฐานข้อมูลไม่สามารถประมวลผลคำสั่งโอนเงินหรือ INSERT ออเดอร์ซื้อขายได้เลย ในขณะที่ Application Servers วิ่งชิล ๆ มี CPU เหลือเฟือเพียง 8%! และที่เลวร้ายที่สุดคือ เซิร์ฟเวอร์ฐานข้อมูลไม่สามารถกดสเกลเพิ่มเครื่อง (Scale-Out) แบบหมุน Knob ได้เหมือน App ค่าใช้จ่ายในการอัปเกรดเครื่อง DB พุ่งขึ้นนับล้านบาท!

ทางออกของทั้งสององค์กรคือการสร้าง Clean Boundary Enforcement: "งานคำนวณ Hashing, String Manipulation, และ External I/O ต้องทำบน Stateless App เท่านั้น ส่วน DB มีหน้าที่รับเฉพาะค่าที่ประมวลผลเสร็จแล้วมาทำ Atomic Persistence ใน RAM!"
🎯 บทเรียนสำคัญ: เซิร์ฟเวอร์ฐานข้อมูลเป็นทรัพยากรแบบ Stateful ที่ขยายเครื่อง (Scale-Out) ได้ยากและแพงที่สุดในระบบ จงปกป้อง CPU ของฐานข้อมูลให้ทำงานเฉพาะสิ่งที่จำเป็นต่อ Data Integrity เท่านั้น!
🚨 วิกฤต Flash Sale 50,000 req/sec: เมื่อการโยนทุกอย่างลง DB ทำระบบชำระเงินพัง 4 ชั่วโมง

ระบบชำระเงินของแพลตฟอร์ม E-Commerce ขนาดใหญ่ มีทีมพัฒนาที่หลงใหลใน PL/pgSQL มาก จึงเขียนตรรกะทุกอย่างลงใน DB:

  • เขียน Stored Procedure เข้ารหัสพาสเวิร์ดและสร้าง JWT Token โดยใช้ PL/pgSQL
  • เขียน UDF ทำการ Parse และ Format ข้อความ JSON/XML ขนาดใหญ่
  • เขียน Trigger ส่ง HTTP Request ยิงไปหา Payment Gateway ภายนอกผ่าน extension ใน DB
DB CPU 100%
เซิร์ฟเวอร์ DB สำลักงานเข้ารหัสและ String Parsing
App CPU 5%
App Server ว่างเปล่าเพราะไม่มีงานทำ
ล่ม 4 ชั่วโมง
External HTTP Timeout ดึง Connection Pool DB ค้าง

ต้นตอของวิกฤตนี้คือ "การไร้ขอบเขตสถาปัตยกรรม (Architectural Boundary Breakdown)" ทางออกเดียวคือการใช้ Architectural Decision Matrix เป็นธรรมนูญของทีมครับ!

🍳 อุปมาอุปไมย: ครัวเตรียมวัตถุดิบด้านนอก (App Layer) vs หน้าเตาผัดความร้อนสูง (DB Layer)

❌ Anti-Pattern: เอาผักทุกหัวและเนื้อทุกชิ้นมานั่งหั่นบนเตาไฟหลัก

เปรียบเหมือนเชฟเอาผักและเนื้อดิบทั้งตัวขึ้นมานั่งปอกเปลือก หั่นเต๋า ปรุงรส และโทรศัพท์คุยกับซัพพลายเออร์ (External HTTP) บนกระทะผัดหลักที่ตั้งไฟแรงสูง

  • กระทะผัดร้อนจัดควันโขมง (DB CPU 100%) แต่ไม่ได้ผัดอาหารจริงจัง
  • ลูกค้ารอคิวยาวเป็นชั่วโมงเพราะกระทะถูกยึดครอง (Connection Pool เต็ม)
  • ไม่สามารถเพิ่มกระทะหลักได้ง่ายๆ เพราะห้องครัวมีพื้นที่จำกัด (Stateful Scale-Up แพง)
✅ Clean Architecture: เตรียมของที่โต๊ะนอก แล้วส่งลงกระทะผัดใน 2 วินาที

ให้ผู้ช่วยในครัว 20 คน (App Nodes) ช่วยกันหั่นผัก ปรุงรส ใส่กล่องพร้อมปรุงไว้ด้านนอก แล้วส่งลงกระทะหลักเพียง 2 วินาทีเพื่อผัดสุกทันที!

  • Scale-Out สบาย: แขกมาเยอะ แค่จ้างผู้ช่วยหั่นผักเพิ่มอีก 50 คน (App Autoscaling)
  • กระทะหลักว่างตลอดเวลา: DB มีหน้าที่เพียงแค่รับของพร้อมปรุงมาเทลงจาน (Atomic Persistence & Data Integrity)
  • อาหารเสิร์ฟเร็วทันใจ: รองรับได้นับแสนออเดอร์โดยที่เตาไฟหลักไม่เคยน็อก!

⚖️ แม่บทดรรชนีการตัดสินใจเชิงสถาปัตยกรรม (Architectural Decision Matrix)

ประเภทภาระงาน (Workload Type) สถานที่ประมวลผลที่ถูกต้อง เหตุผลเชิงสถาปัตยกรรมและผลกระทบต่อระบบ
Complex Math / Hashing / Crypto
bcrypt, Argon2, SHA-256, JWT Token
💻 Application Layer เป็นงาน CPU-Bound อย่างแท้จริง; ฝั่ง App สามารถขยายเครื่องแบบ Scale-Out (Kubernetes/Nodes) ได้ง่ายและถูกกว่า DB มหาศาล
External API / HTTP Requests
Payment Gateway, SMS, Line Notify
💻 Application Layer ป้องกันไม่ให้ Network Timeout ของระบบภายนอกมาแช่ idle in transaction และล็อกตารางจน Connection Pool ใน DB เต็ม
File / PDF / Image Formatting
PDF Invoice Generation, Image Resizing
💻 Application Layer สิ้นเปลือง Memory Heap และ CPU Cycle สูงมาก ไม่เกี่ยวกับความถูกต้องของ Relational State
Multi-Row Atomic Transactions
ตัดเงินในกระเป๋า + เพิ่มเงินปลายทาง + บันทึกบัญชี
🗄️ Database Layer การันตีคุณสมบัติ ACID, ควบคุม Row Locks สั้นที่สุด และป้องกัน Race Condition / Double Spending 100%
Mass Data Aggregation (Sum/Avg)
สรุปยอดขาย 10 ล้านแถว, คำนวณงบดุล
🗄️ Database Layer ประมวลผลแบบ Data-Bound ติดชิดกับ Data Pages ใน RAM (shared_buffers) ลด Network RTT และหลีกเลี่ยงการขนย้ายข้อมูล
Data Integrity & Audit Trail
Foreign Keys, Unique Constraints, Triggers
🗄️ Database Layer สร้าง Zero-Bypass Compliance Boundary เป็นด่านสุดท้ายที่ไม่มีใครแอบแก้ไขหรือบายพาสได้ แม้จะเชื่อมต่อผ่าน DBeaver
สถาปัตยกรรมระดับลึก: การไหลของข้อมูลแบบ Clean Boundaries vs Monolithic DB Overload Architectural Boundary Enforcement
❌ แย่: Monolithic DB Trap (โยนทุกอย่างลง DB จน CPU น็อก) ✅ ปัง: Clean Boundary Architecture (App ทำงาน CPU / DB ทำงาน Data) 1. App Server (Node.js/Python) - CPU เหลือทิ้ง 5% • รับ Request ดิบ ➔ ไม่คิดอะไรเลย ➔ ส่งก้อน String เข้า DB ตรงๆ • ปล่อยให้เครื่อง App Server ว่างงานโดยไม่ได้ใช้ประโยชน์จากการ Scale-Out 2. Database Server (PostgreSQL) - CPU น็อก 100%! • CPU-Bound Churn: นั่งคำนวณ Password Hash (digest sha256) ทุก req • Memory Heap Churn: Parse JSONB Payload ขนาด 5 MB ใน DB RAM • Network Hang: DB Trigger ยิง HTTP ไป Payment Gateway ค้าง 5 วิ! • Connection Pool เต็มกะทันหัน เกิด Lock Wait Timeout มหาศาล 💥 เซิร์ฟเวอร์ DB ล่มสนิท งานโอนเงินหยุดชะงักนานกว่า 4 ชั่วโมง! ผลกระทบ: Scale-Up Trapped • ไม่สามารถแก้ปัญหาด้วยการเพิ่มเครื่อง App ได้ (เพราะ DB ตัน) • ค่าเครื่อง Cloud DB ไซส์ยักษ์พุ่งสูงถึงหลักแสนบาทต่อเดือน 1. Stateless App Cluster (Auto Scale-Out สบาย) • CPU-Bound: App ทำการ Hash Password (bcrypt) ด้วย CPU ตัวเอง • String/JSON: Validate และ Parse JSON Payload ให้เรียบร้อย ⚡ ขยายเครื่อง App ได้อิสระ 100 Nodes บน Kubernetes ค่าใช้จ่ายต่ำ! • ส่งเฉพาะ Clean Values สำเร็จรูปส่งต่อไปยัง DB • เรียก External HTTP API นอก Transaction (ไม่ดึง DB ค้าง) 2. Protected Database Server (Lightning Fast DB Engine) • Data-Bound Only: รับ Hash สำเร็จรูปมาทำ INSERT/UPDATE ในเสี้ยววินาที • Atomic Transaction: ตรวจสอบยอดเงิน ตัดสต็อก รับประกัน ACID 100% • Zero-Bypass Audit: AFTER Trigger เก็บ Audit Trail อัตโนมัติ ⚡ CPU ของ DB ทำงานเพียง 15%! มี Headroom เหลือเฟือรับแสน TPS ผลลัพธ์: สเกลได้ไม่จำกัด + ต้นทุน Cloud ลดลง 60% ระบบเสถียร 100%, DB ไม่เคยน็อก, ปราศจาก Connection Exhaustion
🎙️ สคริปต์คำพูดสำหรับพรีเซนท์บนเวที (Presentation Pitch Script)

"ทุกท่านครับ การโยน Business Logic ทุกอย่างลง Stored Procedure คือค่านิยมยุคเก่าที่ทำลายการ Scale ระบบบน Cloud!

ด้วย Decision Matrix ของ Day 13 เราจะคุ้มครอง CPU ของฐานข้อมูลอย่างเด็ดขาด งานประเภท Hashing, String Parsing, PDF Formatting และ External API ต้องทำบน Stateless App สเกลออกได้ 100 เครื่อง! ส่วนงานที่ต้องแตะข้อมูลล้านแถว, การตัดเงิน Atomic และ Audit Trail เราขังไว้ใน PL/pgSQL เพื่อประสิทธิภาพสูงสุด!

ผลลัพธ์คือ DB CPU ของเราจะเหลือเฟือสำหรับรับ Transaction ชำระเงิน ค่า Cloud ลดลง 60% และระบบเสถียรไม่มีวันล่มเพราะ CPU Bottleneck อีกต่อไปครับ!"

🧮 วิดเจ็ตทดลอง: ตัวจำลองการกระจายภาระงาน CPU (App vs. DB Boundary Simulator)

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

ผลลัพธ์การประเมินสถาปัตยกรรม (System Health & CPU Impact):
• App Nodes: รับงาน Hashing และ JSON Parsing ทำงานเต็มที่ (CPU 65% สเกลเครื่องเพิ่มได้สบาย)
• Database Server: ได้รับการปกป้อง CPU วิ่งชิล ๆ เพียง 18% รับ Transaction ชำระเงินได้ลื่นไหล ไร้คอขวด!
✅ DB Safe (CPU: 18%)
2

💻 ปูพื้นฐานไวยากรณ์ & แบบฝึกหัดไต่ระดับ (Boundary Refactoring Mechanics)

การออกแบบระบบแบบ Clean Boundary เริ่มจากการมองเห็นจุดตัดการทำงานอย่างชัดเจน: ฝั่ง App ทำงานที่เป็น CPU-Bound / External I/O ให้เสร็จสิ้น แล้วส่งเฉพาะค่าที่จำเป็นมาให้ Stored Procedure ฝั่ง DB ทำงานที่เป็น Data-Bound / Atomic Mutation รวดเดียวจบ:

🧱 แกะโครงสร้างสถาปัตยกรรม: การแยกขอบเขตงานระหว่าง App Layer vs Database Layer

พิมพ์เขียวสถาปัตยกรรม: Clean Boundaries Blueprint Architecture Pattern
-- ❌ ANTI-PATTERN (Heavy CPU inside DB):
-- App ---> CALL pr_everything() ---> [ Hash Password ] -> [ Parse Large JSON ] -> [ Update Table ] -> [ Call External HTTP API ]

-- ✅ REFACTORED PATTERN (Clean Boundaries):
-- 1. App Server [ Hash Password (bcrypt) & Validate JSON ] (CPU-Bound บน Stateless App)
-- 2. App Server ---> CALL pr_atomic_save(hash, jsonb) ---> DB Server [ INSERT/UPDATE + Audit Trigger ] (Data-Bound บน DB)
-- 3. App Server <--- Return Success <--- DB Server (ปลด DB Connection ทันทีใน < 2ms)
-- 4. App Server ---> Call External Payment API / Send Email (External I/O บน App นอก DB Transaction!)
💡 กฎเหล็กของ Decision Matrix: หากโค้ดส่วนใดใช้เวลาวิ่งขึ้นอยู่กับความเร็ว CPU เพียว ๆ หรือต้องติดต่อกับระบบภายนอก ให้ทำบน App เสมอ! ส่วนโค้ดใดที่ต้องแตะข้อมูลในตารางหลายแถว หรือต้องคุมเงินไม่ให้หาย ให้ทำบน DB เสมอ!

🏋️‍♂️ แบบฝึกหัดไต่ระดับการเขียนจริง (จากระดับเริ่มต้น ➔ Clean Boundary Architecture)

🟢 Level 1: การจำแนก Code Smell เชิงสถาปัตยกรรม (Architectural Smell Classification) ระดับเริ่มต้น
-- 🎯 โจทย์: วิเคราะห์ตรรกะ 3 ข้อนี้ ว่าควรจัดวางไว้ที่เลเยอร์ใดจึงจะถูกต้องตาม Decision Matrix?
-- ข้อ [1]: การทำ Password Hashing ด้วย bcrypt / Argon2
-- ข้อ [2]: การคำนวณยอดเงินคงเหลือสุทธิจากรายการโอน 1,000,000 แถวในตาราง
-- ข้อ [3]: การส่ง Email / SMS แจ้งเตือนลูกค้าหลังชำระเงินสำเร็จ

-- ✅ เฉลยและเหตุผลเชิงสถาปัตยกรรม:
-- ข้อ [1] ➔ Application Layer:
--     เหตุผล: เป็นงาน CPU-Bound มหาศาล ยิ่งตั้ง Work Factor สูงยิ่งกิน CPU การทำบน App ช่วยให้สเกลเครื่อง App Node เพิ่มได้ง่าย
-- ข้อ [2] ➔ Database Layer (PL/pgSQL):
--     เหตุผล: เป็นงาน Data-Bound ต้องอ่าน Data Pages ใน shared_buffers การทำบน DB ช่วยตัด Network RTT และลดเวลาเหลือเสี้ยววินาที
-- ข้อ [3] ➔ Application Layer:
--     เหตุผล: เป็น External I/O ห้ามเอาไปไว้ใน DB Trigger เด็ดขาด เพราะถ้าเมลเซิร์ฟเวอร์ช้า จะดึง DB Connection ค้างจนระบบล่ม!
จุดที่ต้องสังเกต: การแบ่งแยกตามลักษณะงาน (CPU-Bound vs Data-Bound vs External I/O) คือหัวใจของการเป็น Software Architect มืออาชีพ
🟡 Level 2: การสร้าง Pattern - App-Side CPU Processing + DB-Side Atomic Settlement ระดับปานกลาง
-- db/migration/R__01_atomic_settlement.sql
-- 🎯 ฝั่ง DB เน้นเฉพาะ Atomic State Transition และ Data Integrity เท่านั้น!
-- รับพารามิเตอร์สำเร็จรูปที่ผ่านการคำนวณและตรวจสอบมาจาก App เรียบร้อยแล้ว

CREATE OR REPLACE PROCEDURE pr_execute_settlement_atomic(
    p_account_id BIGINT,
    p_amount     NUMERIC,
    p_auth_hash  VARCHAR -- รับ Hash ที่คำนวณเสร็จแล้วมาจาก App
)
LANGUAGE plpgsql
AS $$
BEGIN
    -- [1] ตรวจสอบและล็อกแถวแบบ Atomic (Data Integrity Boundary)
    PERFORM 1 FROM accounts WHERE account_id = p_account_id FOR UPDATE;

    -- [2] อัปเดตยอดเงินใน DB (รันติดชิด RAM Buffer ในเสี้ยววินาที)
    UPDATE accounts
    SET balance = balance - p_amount
    WHERE account_id = p_account_id;

    -- [3] บันทึก Audit Log ทันที
    INSERT INTO transaction_logs(account_id, amount, auth_hash, type)
    VALUES (p_account_id, -p_amount, p_auth_hash, 'SETTLEMENT');

    -- [4] ยืนยัน Transaction และปลด Lock ทันที ไม่ค้างคา
    COMMIT;
END $$;
จุดที่ต้องสังเกต: Procedure นี้ใช้เวลาประมวลผลไม่ถึง 0.5 มิลลิวินาที ไม่มีการคำนวณสูบ CPU ใด ๆ ทำให้ DB สามารถรองรับ Transaction โอนเงินได้หลายหมื่นครั้งต่อวินาที

🔴 Level 3: Refactoring Flawed Code (ย้ายงาน CPU-Bound ออกจาก PL/pgSQL สู่ App Layer)

เปรียบเทียบโค้ดเดิมที่นำ Hashing และ String Manipulation มายัดใน Stored Procedure จน DB CPU 100% กับโค้ดใหม่ที่แบ่งขอบเขตการทำงานอย่างถูกต้อง:

❌ โค้ดเดิมแบบ Flawed: ยัด Hashing + JSON Parsing ใน DB DB CPU 100% & สเกลไม่ได้
-- ❌ Flawed Code: เอา Hashing และ String Manipulation มาทำใน PL/pgSQL
CREATE OR REPLACE PROCEDURE pr_process_user_registration_flawed(
    p_username TEXT,
    p_raw_password TEXT,
    p_json_payload TEXT
)
LANGUAGE plpgsql
AS $$
DECLARE
    v_hashed_pw TEXT;
    v_parsed_data JSONB;
BEGIN
    -- ❌ CPU Bottleneck #1: คำนวณ Hash หนักๆ ใน DB (เผา CPU บน DB)
    v_hashed_pw := digest(p_raw_password || 'salt_secret', 'sha256');

    -- ❌ CPU Bottleneck #2: Parse และ Clean String ขนาดใหญ่ใน DB RAM
    v_parsed_data := p_json_payload::jsonb;

    INSERT INTO users(username, password_hash, profile_data)
    VALUES (p_username, v_hashed_pw, v_parsed_data);

    COMMIT;
END $$;
วิเคราะห์ข้อเสีย: เมื่อมีผู้ใช้สมัครสมาชิกพร้อมกันนับหมื่นคน DB CPU จะพุ่ง 100% ทันทีจากการคำนวณ Hashing ส่งผลกระทบให้ระบบการเงินหลักล่มตามไปด้วย
✅ โค้ดใหม่ระดับ Production: Clean Boundary Architecture Lightning Fast & Scale-Out 100%
-- db/migration/R__02_user_registration_optimized.sql
-- 🎯 ฝั่ง App ทำการ Hash Password และ Parse JSON มาให้เสร็จเรียบร้อยแล้ว
-- ฝั่ง DB มีหน้าที่รับค่าสำเร็จรูปมาทำ INSERT แบบ Lightning Fast!

-- [Statement 1] สร้าง Stored Procedure ที่เน้นเฉพาะ Data Persistence
CREATE OR REPLACE PROCEDURE pr_process_user_registration_optimized(
    p_username      VARCHAR,
    p_hashed_pw     VARCHAR, -- รับ Hash จาก App (App ใช้ CPU ของตัวเอง)
    p_profile_data  JSONB    -- รับ JSONB ที่ Validate มาแล้วจาก App
)
LANGUAGE plpgsql
AS $$
BEGIN
    -- [บรรทัดที่ 1-2] บันทึกข้อมูลลงตารางทันที ไม่เสียเวลาคำนวณ CPU
    INSERT INTO users(username, password_hash, profile_data)
    VALUES (p_username, p_hashed_pw, p_profile_data);

    -- [บรรทัดที่ 3] ยืนยัน Transaction
    COMMIT;
END $$;
วิเคราะห์ข้อได้เปรียบ: DB ทำหน้าที่เพียง Persist ข้อมูลลงดิสก์ ใช้เวลาเสี้ยววินาที ส่วนงานคำนวณ Hash ถูกผลักไปให้ App Nodes จัดการ ซึ่งเพิ่มเครื่องรองรับได้ไม่จำกัดบน Kubernetes!
3

📝 คลังข้อสอบและแบบประเมินความรู้ (18 ข้อ Multiple Choices พร้อมเฉลยยิบ)

แบบทดสอบวัดระดับความเข้าใจ Day 13: Decision Matrix - App vs. DB Boundaries & CPU Protection (CPU-Bound vs Data-Bound, Scale-Out vs Scale-Up, Zero-Bypass Compliance) และข้อสอบสะสมทบทวนครบทั้ง Days 1–12 คลิกเลือกคำตอบ ก, ข, ค, หรือ ง เพื่อดูผลลัพธ์และคำอธิบายอย่างละเอียดทันที

📊 สรุปผลการประเมิน App vs DB Decision Matrix (Day 13) 0 / 18
ความคืบหน้า ตอบแล้ว 0 จาก 18 ข้อ

🎉 ยินดีด้วยครับ! คุณเข้าใจการกำหนดขอบเขตสถาปัตยกรรม App vs. DB อย่างลึกซึ้งแล้ว

บทเรียน Day 13: Decision Matrix - App vs. DB Boundaries & CPU Protection ได้สร้างกรอบความเข้าใจเชิงสถาปัตยกรรมในการแบ่งแยกภาระงานระหว่าง Application Layer และ Database Layer อย่างเป็นระบบ โดยกำหนดให้นำงานประเภท CPU-Bound (Hashing, Crypto, String Parsing) และ External I/O ไปไว้ที่ฝั่ง App เพื่อเปิดทางให้ Scale-Out ได้ง่าย และปกป้อง CPU ของฐานข้อมูล ให้ทำเฉพาะงาน Data-Bound และ Atomic Transactions อย่างมีประสิทธิภาพสูงสุด

🚩 ก้าวต่อไปสู่ Day 14 (Architectural Trade-offs & Anti-patterns Summary):

ในวันถัดไป เราจะไปสรุปภาพรวมของ Phase 3 โดยการเจาะลึกข้อดี-ข้อเสีย (Trade-offs) และรวบรวม Anti-patterns ทั้งหมดที่ต้องหลีกเลี่ยงในการสร้าง In-Database Automation Engine เพื่อเตรียมความพร้อมเข้าสู่ Phase 4 (การซ้อมพรีเซนท์และตั้งรับคำถามระดับ Executive/Senior Architect) ครับ!

เปิดบทเรียน Day 14 →