การ Deploy แอปพลิเคชันแบบ monolithic ที่มีเพียง process เดียวนั้นเป็นเรื่องที่ค่อนข้างตรงไปตรงมา แต่ microservices ที่มาพร้อมกับความสัมพันธ์พึ่งพากันและตัวเลือกเทคโนโลยีอันหลากหลายนั้นเป็นคนละเรื่องกันเลย ตอนที่ผมเขียนหนังสือฉบับพิมพ์ครั้งแรก บทนี้ก็มีเรื่องให้พูดถึงตัวเลือกมากมายมหาศาลอยู่แล้ว นับจากนั้นมา Kubernetes ก็ก้าวขึ้นมาเป็นผู้เล่นหลัก และแพลตฟอร์ม Function as a Service (FaaS) ก็มอบวิธีคิดใหม่ ๆ ให้เราได้พิจารณาว่าจะ ship ซอฟต์แวร์ของเราออกไปอย่างไร

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

แต่ก่อนอื่น เรามาแอบมองเบื้องหลังกันสักหน่อย เพื่อดูว่าเกิดอะไรขึ้นเมื่อเราเปลี่ยนจากมุมมองเชิง logical ของสถาปัตยกรรมระบบไปสู่ topology การ deploy ทางกายภาพ (physical) จริง ๆ