โหมดมืด
Microservices
ส่วนหนึ่งของ Beginner Book — หมวดที่ลึกที่สุดในเล่ม เพราะ microservices = "ระบบใหญ่ที่ทำงานร่วมกัน"
เปิดอ่านครั้งแรก? เริ่มที่นี่
ถ้านี่คือครั้งแรกที่คุณเปิดโฟลเดอร์นี้ — อย่าเพิ่งเลื่อนลงไปดู TOC ด้านล่าง (จะตกใจกับศัพท์)
ไปอ่าน บท Quickstart — Microservices ใน 15 นาที ก่อน. มันจะให้:
- คำเปรียบเทียบ "ร้านอาหาร vs ฟู้ดคอร์ท"
- ภาพ 1 request วิ่งผ่านอะไรบ้าง
- ตารางแปลศัพท์ใน TOC เป็นภาษามนุษย์
- ทางลัด "ถ้ามีปัญหา X → อ่านบท Y"
หลังจากนั้นกลับมาที่ README นี้แล้วค่อยตัดสินใจว่าจะเดินทางต่อยังไง
ผู้อ่านที่เคยทำ microservices แล้ว ข้าม Quickstart ได้ ไปบท 00 Mindset โดยตรง
หนังสือเล่มนี้สอนอะไร
อ่านจบทุกบท + ทำ checkpoint คุณจะ:
- เข้าใจ เมื่อไหร่ควร (และเมื่อไหร่ ไม่ควร) ใช้ microservices — ไม่ตามกระแสจน app เจ๊ง
- ตัด service ออกจาก monolith เป็น (DDD, bounded context, strangler fig)
- เลือกวิธีคุยระหว่าง service — REST vs gRPC vs Message Queue — แต่ละแบบเหมาะกับงานอะไร
- ตั้ง API Gateway (Spring Cloud Gateway, Kong, Envoy) + BFF
- ทำ Service Discovery (Eureka, Consul) + Centralized Config
- เข้าใจ Message Broker ลึกถึงแก่น — RabbitMQ และ Kafka ตั้งแต่ติดตั้งไปจน production tuning
- รู้จัก broker อื่น ๆ — Redis Streams, NATS/JetStream, Pulsar, AWS SQS/SNS, GCP Pub/Sub — และ "เลือกตัวไหนใช้กับงานอะไร"
- ทำ Stream Processing ด้วย Kafka Streams + Apache Flink
- ทำ Event-Driven Patterns — Saga, Outbox, Inbox, Change Data Capture (Debezium)
- ออกแบบ resilience — Circuit Breaker, Bulkhead, Retry, Timeout, Backpressure
- จัดการ data ใน microservices — DB per service, CQRS, Event Sourcing
- ทำ Distributed Tracing + correlation ID ที่กระโดดข้าม service ได้
- ทำ security — mTLS, Zero Trust, JWT propagation, broker SASL/SCRAM
- ใช้ Service Mesh — Istio, Linkerd, Envoy
- deploy — Canary, Blue-Green, Feature Flag, GitOps
- ดูตัวอย่าง polyglot ที่ Java + Go + Node คุยกันผ่าน Kafka จริง
เป้าหมาย: อ่านจบไปแล้ว สร้าง microservice ใหม่ขึ้น production ได้คนเดียว หรือ เป็น tech lead ของทีมได้
หนังสือนี้ออกแบบมาให้ใคร
✅ Backend developer ที่ทำ monolith แล้วเริ่มมีปัญหา scale / team / deploy ✅ คนที่ทำ microservices อยู่แต่ตอบไม่ได้ว่า "ทำไม" แต่ละ component มี ✅ คนที่อยากเป็น senior / staff / tech lead ✅ คนที่จะไป interview ตำแหน่ง backend / SRE / platform engineer ✅ คนที่ทำงานกับ Kafka / RabbitMQ อยู่แต่งง config
❌ ยังไม่เคยเขียน backend เลย — ไปอ่าน java/ + spring-boot/ ก่อน ❌ ยังไม่เคยใช้ Docker — ไปอ่าน devops/03-docker-deep.md ก่อน (ลิงก์ verified — ไฟล์มีอยู่จริง) ❌ ยังไม่เข้าใจ HTTP / REST API — ไปอ่าน api-design/ ก่อน
ก่อนเริ่ม — ต้องรู้อะไรก่อน
| หัวข้อ | ระดับที่ต้องรู้ | ไปอ่านได้ที่ |
|---|---|---|
| HTTP + REST API | ต้องเขียน API เป็น | api-design/ |
| Database พื้นฐาน | SQL + transaction | database/ |
| Docker | สร้าง image + รัน container | devops/03-docker-deep.md |
| Kubernetes | รู้จัก Pod, Service, Deployment | devops/04-kubernetes-intro.md |
| Java/Go/Node | เลือก 1 ภาษาให้คล่อง | java/, go/ |
| Spring Boot (แนะนำ) | REST + JPA + Security | spring-boot/ |
| Distributed Systems theory (แนะนำ) | CAP, consensus | distributed-systems/ |
ถ้ายังไม่พร้อม → ไปอ่าน prerequisite ก่อน 2-4 สัปดาห์แล้วค่อยกลับมา
🎯 Self-Assessment Quiz — พร้อมอ่านเล่มนี้หรือยัง?
ตอบ "ใช่/ไม่" ในใจ 10 ข้อนี้ — เพื่อรู้ว่าคุณ "พร้อม" จริงหรือควรไป prerequisite ก่อน:
text
[backend essentials]
1. □ เคยเขียน REST API ที่มีอย่างน้อย 5 endpoint + ต่อ DB จริง (ไม่ใช่ tutorial)
2. □ อธิบายความต่างของ HTTP status code 200/201/400/401/403/404/500/503 ได้
3. □ เคยใช้ database transaction (BEGIN/COMMIT/ROLLBACK) จริง
4. □ เขียน SQL ที่มี JOIN + GROUP BY ได้โดยไม่ต้องค้น Google ทุกครั้ง
[ops basics]
5. □ เคย deploy แอปของตัวเองขึ้น production จริง (Heroku/Render/VPS/cloud) — ไม่ใช่แค่ run local
6. □ เคยเขียน Dockerfile + รัน `docker compose up` ที่มี service ≥ 2 ตัว
7. □ รู้จัก JWT (JSON Web Token — โทเคนยืนยันตัวตนที่ใช้กันทั่วไปใน REST API) — สร้าง + verify ได้
[mindset]
8. □ เคยอ่าน log production จริง + debug bug ที่ user เจอ
9. □ เคยมี "monolith" ที่ตัวเองเขียน > 5,000 บรรทัด — รู้สึก pain เรื่อง deploy/scale
10. □ เข้าใจคำว่า "eventual consistency" หรืออย่างน้อยพอเดาความหมายจากคำได้ — *ไม่ต้องรู้นิยามทางการ แค่เดาความหมายตามตัวอักษรว่า "ความสอดคล้องที่จะมาในที่สุด" ก็ถือว่าผ่านได้*คะแนน:
- 8-10 ข้อ: ✅ พร้อม — อ่านเรียงตั้งแต่ 00 → 19 ได้เลย
- 5-7 ข้อ: ⚠️ พร้อมบางส่วน — เริ่มที่ 00-quickstart + 00-mindset ก่อน, ข้อที่ตอบ "ไม่" ให้ไป prerequisite ที่ตรง (ตารางข้างบน) คู่ขนาน
- < 5 ข้อ: ❌ ยังไม่พร้อม — หยุดที่นี่ ไปอ่าน java/ หรือ go/ + spring-boot/ + database/ + devops/03 Docker ก่อน 1-3 เดือน แล้วกลับมา. ถ้าฝืนอ่านเล่มนี้ตอนนี้จะงงตั้งแต่ต้น เพราะบท 06-12 ใช้ความรู้ Docker + transaction + broker ตลอด และสมมติว่าคุณรู้แนวคิดเหล่านั้นแล้ว
💡 ตอบไม่ได้เพราะไม่รู้คำใน quiz หรือเปล่า? ถ้าใช่ — คุณยังไม่พร้อม. quiz นี้ใช้คำที่ทุก backend dev ทำงาน 1-2 ปีควรรู้
ตอบไม่ได้ข้อไหน → ไปอ่านอะไรก่อน (map ตรง ๆ ไม่ใช่ส่ง link ทั้งเล่ม):
| ข้อ quiz | ถ้าไม่ผ่าน → ไปอ่าน |
|---|---|
| 1, 2 (REST API + status code) | api-design/ — REST แนวคิด + HTTP ครบ |
| 3, 4 (transaction + SQL join) | database/ — โดยเฉพาะบท transaction + indexing |
| 5 (deploy production) | devops/ — ตั้งแต่ basic deploy ไป CI/CD |
| 6 (Dockerfile + compose) | devops/03-docker-deep.md |
| 7 (JWT) | security/ ถ้ามี หรือ spring-boot/ บท Spring Security |
| 8, 9 (log + monolith pain) | 00-mindset ในเล่มนี้พอใช้เป็น on-ramp |
| 10 (eventual consistency) | distributed-systems/ — CAP + consistency models |
⚠️ ยังไม่เข้าใจศัพท์ในตารางข้างล่าง? อย่าเพิ่งตกใจ — ไปอ่าน Quickstart ก่อน มีตารางแปลศัพท์ทุกคำเป็นภาษามนุษย์ แล้วค่อยกลับมาดู TOC นี้
โครงสร้างหนังสือ (20 บท)
Part 0 — Quickstart (อ่านก่อนถ้าใหม่)
| # | บท | สอนอะไร |
|---|---|---|
| ⭐ | Quickstart — Microservices ใน 15 นาที | เปรียบเทียบ "ร้านอาหาร vs ฟู้ดคอร์ท", ภาพ 1 request, ตารางแปลศัพท์, ทางลัดตามปัญหา |
Part 1 — รากฐาน (บทที่ 00-02)
ปูพื้นความเข้าใจก่อนลงเทคนิค
| # | บท | สอนอะไร |
|---|---|---|
| 0 | Microservices Mindset | เมื่อไหร่ใช้/ไม่ใช้, ประวัติ, monolith → micro, fallacies of distributed computing |
| 1 | Service Decomposition | DDD, bounded context, event storming, strangler fig pattern |
| 2 | Communication Overview | sync vs async, REST/gRPC/Message ตัดสินใจยังไง |
Part 2 — Service-to-Service Communication (บทที่ 03-05)
| # | บท | สอนอะไร |
|---|---|---|
| 3 | REST + gRPC Between Services | timeout, retry, idempotency, deadline propagation, code generation |
| 4 | API Gateway + BFF | Spring Cloud Gateway, Kong, BFF pattern, rate limit, auth offload |
| 5 | Service Discovery + Config | Eureka (legacy — deprecated for new projects), Consul, K8s DNS, etcd, dynamic config (Spring Cloud Config, ConfigMaps) — new project ใช้ K8s DNS แทน Eureka |
Part 3 — 🔥 Message Broker (บทที่ 06-12) ← หัวใจของเล่มนี้
| # | บท | สอนอะไร |
|---|---|---|
| 6 | Broker Fundamentals | queue vs topic, delivery semantics (at-most-once/at-least-once/exactly-once), ordering, idempotent consumer, DLQ, outbox |
| 7 | RabbitMQ เข้ม | exchange, binding, publisher confirm, prefetch, mirrored/quorum queue, DLX, cluster, tuning |
| 8 | Kafka เข้ม | partition, replica, ISR, idempotent producer, consumer group, EOS, schema registry, KRaft, Connect, MirrorMaker |
| 9 | Brokers อื่น ๆ | Redis Streams, NATS/JetStream, Pulsar, SQS/SNS, GCP Pub/Sub — แต่ละตัวเหมาะกับอะไร |
| 10 | Broker Comparison | matrix เลือก broker, hybrid architecture, migration story |
| 11 | Stream Processing | Kafka Streams (KStream/KTable), Apache Flink, Materialize, ksqlDB |
| 12 | Event-Driven Patterns | Saga (orchestration vs choreography), Outbox, Inbox, CDC (Debezium), exactly-once delivery |
Part 4 — Reliability + Data (บทที่ 13-15)
| # | บท | สอนอะไร |
|---|---|---|
| 13 | Resilience | Circuit Breaker (Resilience4j), Bulkhead, Retry budget, Timeout, Backpressure |
| 14 | Data Management | DB per service, polyglot persistence, CQRS, Event Sourcing, data mesh |
| 15 | Tracing + Correlation | OpenTelemetry, W3C Trace Context, propagation ผ่าน Kafka header, Jaeger/Tempo |
Part 5 — Security + Ops (บทที่ 16-19)
| # | บท | สอนอะไร |
|---|---|---|
| 16 | Security | mTLS, Zero Trust, JWT propagation, broker auth (SASL/SCRAM, ACL), OPA |
| 17 | Service Mesh | Istio, Linkerd, Envoy, sidecar pattern, traffic management |
| 18 | Deployment | Canary, Blue-Green, Feature Flag (OpenFeature standard + Unleash/LaunchDarkly/flagd providers), GitOps (Argo CD, Flux) |
| 19 | Polyglot Example | end-to-end project — Java producer + Go consumer + Node/NestJS service + Python/FastAPI service + Kafka + Postgres (polyglot 4 ภาษา) |
วิธีอ่านที่แนะนำ
⏱️ เรื่องเวลาที่ระบุในแต่ละบท ("ใช้เวลา 3-4 ชั่วโมง", "5-6 ชั่วโมง") เป็นเวลาสำหรับ ผู้อ่านที่มี prerequisite ครบ (Spring Boot/Docker/SQL คล่อง). ถ้าคุณเป็น basic ที่เพิ่งครบ prerequisite พื้นฐาน — คาดว่าใช้เวลา 2-3 เท่า เป็นเรื่องปกติ ไม่ต้องเร่งตัวเอง
มือใหม่ microservices
อ่านเรียงตั้งแต่ 00 → 19 — ห้ามข้าม Part 3 (broker) เด็ดขาด เพราะ microservices ยุคใหม่ event-driven เกือบทั้งหมด
ใช้เวลาประมาณ 8-12 สัปดาห์ (วันละ 1-2 ชม.) — รวมลงมือทำ (basic จริง ๆ อาจใช้ 16-20 สัปดาห์)
เคยทำ microservices แล้วแต่ยังไม่ลึก
- เริ่มจาก 01 — Decomposition เพื่อปรับ mindset
- ไปบท 06-12 ทั้งหมด (broker + stream)
- จบที่บท 13-15 (resilience + data + tracing)
มาเพื่อสัมภาษณ์งาน senior backend / SRE
- อ่าน 00, 01, 02, 06, 08 (Kafka), 12 (saga), 13 (resilience), 14 (CQRS/ES), 15 (tracing)
- ฝึก draw diagram + อธิบาย trade-off ตอนสัมภาษณ์
มาเพื่อใช้ Kafka / RabbitMQ ในงานจริง
- 06 (fundamentals) → 07 หรือ 08 → 12 (pattern) → 15 (tracing)
สิ่งที่จะใช้ในเล่มนี้ (เครื่องมือ)
| ประเภท | ตัวอย่าง |
|---|---|
| Languages | Java 21 (Spring Boot 3), Go 1.22, Node.js 20 (NestJS) — เพื่อแสดง polyglot |
| Brokers | RabbitMQ 4.x (Khepri metadata store), Apache Kafka 4.0 (KRaft mode, ZooKeeper removed), Redis 7, NATS JetStream, Pulsar 3 |
| Schema | Apache Avro, Protocol Buffers, JSON Schema, Confluent Schema Registry |
| Stream Processing | Kafka Streams, Apache Flink 1.18, ksqlDB |
| Service Mesh | Istio 1.22, Linkerd 2.18+, Envoy |
| Gateway | Spring Cloud Gateway, Kong 3, Envoy Gateway |
| Discovery/Config | Eureka, Consul, etcd, Spring Cloud Config |
| Tracing | OpenTelemetry, Jaeger, Grafana Tempo |
| Deployment | Docker, Kubernetes, Helm, Argo CD, Flux |
| Feature Flag | OpenFeature (CNCF standard) + Unleash (open source) / LaunchDarkly (SaaS) / flagd (providers) |
| CDC | Debezium 3.x (2026 baseline) |
| Resilience | Resilience4j (Java), gobreaker (Go) |
หลายตัวเป็น optional — เลือกตามที่ทีมคุณใช้ แต่หนังสือเล่มนี้สอนทั้งหมดเพื่อให้ "เห็นภาพ landscape" และเปลี่ยน tool ได้
Feature → Minimum Version (สำคัญสำหรับ Production)
📌 ตารางนี้สำหรับผู้อ่านที่จะ deploy production จริง — มือใหม่ที่กำลังเรียนรู้แนวคิดยังไม่ต้องจำตัวเลขเวอร์ชัน อ่านบทเนื้อหาแล้วค่อยกลับมาดูตารางนี้ก่อนทำ production จริงได้
ตารางนี้ช่วยตรวจว่า feature ในเนื้อหาต้องเวอร์ชันไหน — pin ใน production ตามนี้ก่อนใช้
📅 ตารางนี้สถานะ ณ 2026-06 — ตรวจ release notes ทางการก่อนใช้จริงเสมอ (เวอร์ชันขยับเร็วโดยเฉพาะ Kafka, Istio, Spring Cloud)
| Feature | เวอร์ชันต่ำสุด | บทที่อ้าง | หมายเหตุ |
|---|---|---|---|
| Kafka KRaft mode | Kafka 3.3 GA, 4.0 = removes ZooKeeper | 08 | production ใช้ 4.0+ ถ้าเริ่มใหม่ |
| Kafka KIP-848 (new rebalance) | Kafka 4.0 default | 08 | early-access ใน 3.7 |
| Kafka KIP-932 (Share Groups) | Preview ใน 4.0 (ณ 2026-06 ยัง preview — ตรวจ release notes ก่อนใช้) | 06, 08 | ห้ามใช้ใน production จนกว่า GA |
| Kafka Tiered Storage | 3.6 preview, 3.9 GA | 08 | production-ready ใน 4.0 |
| Istio Ambient mode | 1.22 GA (May 2024) | 17 | sidecar ยัง support คู่ |
| Linkerd CNCF graduated | 2.10+ ตั้งแต่ 2021 | 17 | mature |
| Cilium Service Mesh | 1.14+ GA (2023) | 17 | ต้อง Cilium CNI |
| Spring Cloud Gateway MVC | 2024.0+ (servlet stack) | 04 | ตรวจ default ใน 2026 release |
| Spring Cloud Netflix Eureka | maintenance mode ตั้งแต่ 2018, deprecated for new projects 2024 | 05 | ใช้ K8s DNS แทน |
| Resilience4j | 2.x (Spring Boot 3) | 13 | Hystrix EOL 2018 |
| OpenTelemetry Logs | Stable 2023 | 15 | Logs GA; Profiling ยังไม่ GA |
| OpenTelemetry Profiling signal | Development phase (2024+) — partial SDK support, ยังไม่ GA across SDKs | 15 | Pyroscope/Grafana integration available — ตรวจ status ก่อน production |
| Debezium | 2.7+ | 12 | Postgres logical replication |
| OpenFeature CNCF | sandbox 2023, incubating 2024 | 18 | vendor-neutral feature flag |
| Argo Rollouts | 1.6+ stable | 18 | progressive delivery |
| Temporal | 1.20+ | 12 | workflow orchestration |
| SPIFFE/SPIRE CNCF graduated | 2022 | 16 | workload identity |
| HashiCorp BSL relicense | Terraform/Consul/Vault/Nomad Aug 2023 | 06 (devops), 17 | OpenTofu/OpenBao alternatives |
| AWS Free Plan (replaces Free Tier) | Jul 2024 | devops 06 | บัญชีใหม่ใช้โครงสร้างนี้ |
Refresh cadence แนะนำ: ตรวจตารางนี้ Q1 ของทุกปี — Kafka/Istio release notes มักมี breaking change ที่ต้องอัปเดต
ความเชื่อมโยงกับหมวดอื่นในหนังสือ
คำเตือนสำคัญก่อนเริ่ม ⚠️
"Microservices ไม่ใช่เป้าหมาย แต่เป็นผลที่ตามมา" — คือเราไม่ได้ตั้งใจทำ microservices เพราะอยากทำ แต่ทำเพราะระบบโตจนจำเป็นต้องแยก
(ต้นฉบับภาษาอังกฤษ — Sam Newman: "Microservices is not a goal. It's a consequence.")
หลายทีมที่ผมเคยเจอย้ายไป microservices แล้ว เจ๊ง เพราะ:
- ไม่จำเป็น — app เล็ก team เล็ก แค่ 5 คน ทำ monolith ก็พอ
- ทีมยังไม่พร้อม — ไม่มี DevOps culture, ไม่มี CI/CD, ไม่มี observability
- decomposition ผิด — แตก service ตาม "เทคโนโลยี" (user-service, order-service) แทนที่จะตาม "domain"
- distributed monolith — ตัด service ออกแต่ทุกตัวยัง share database / deploy พร้อมกัน
- ไม่เข้าใจ network — สมมติว่า network reliable (ดู "8 fallacies of distributed computing" ในบท 00)
ถ้ายังไม่แน่ใจว่าควรใช้ microservices ไหม → อ่านบท 00 ก่อนทำอะไรทั้งสิ้น
← กลับสารบัญหลัก | ➡️ เริ่มอ่าน บทที่ 00: Microservices Mindset
🔤 Glossary · 📋 Style guide · 📅 last_verified: 2026-06-12