หัวใจสำคัญของสภาพแวดล้อมแบ็กเอนด์คือการส่งมอบข้อมูลให้ผู้ใช้อย่างเสถียร เพื่อให้ทำเช่นนั้นได้ จำเป็นต้องมีองค์ประกอบหลัก 3 อย่าง ได้แก่ เว็บเซิร์ฟเวอร์, WAS และฐานข้อมูล ทั้งสามสิ่งนี้ได้วิวัฒนาการมาเพื่อแก้ปัญหาที่เกิดขึ้นในกระบวนการพัฒนาของเว็บ เทคโนโลยีขั้นสูงอย่างการมอนิเตอร์ริง, โหลดบาลานซิง, แคชชิง, CI/CD pipeline และ Kubernetes หากไม่มีความเข้าใจในองค์ประกอบทั้ง 3 อย่างนี้มาก่อน ก็ไม่ต่างจากการสร้างบ้านที่พร้อมจะพังได้ทุกเมื่อ
อย่างแรก บทบาทของเว็บเซิร์ฟเวอร์
บทบาทหลักของเว็บเซิร์ฟเวอร์คือการเป็นไฟล์เซิร์ฟเวอร์ที่ใช้ส่งไฟล์ โดยเว็บเซิร์ฟเวอร์ที่เป็นตัวแทนได้แก่ Nginx, Apache, IIS, Caddy เป็นต้น เว็บเซิร์ฟเวอร์เหล่านี้ทำหน้าที่พื้นฐานในการให้บริการไฟล์แบบสแตติกได้อย่างยอดเยี่ยม และได้รับการปรับแต่งประสิทธิภาพมาอย่างสูง
อย่างที่สอง การปรากฏขึ้นและบทบาทของ WAS(Web Application Server)
WAS ทำงานในลักษณะที่เมื่อได้รับคำขอบางอย่าง ก็จะรันโปรแกรมที่กำหนดไว้ล่วงหน้า และส่งผลลัพธ์ที่โปรแกรมนั้นสร้างขึ้นกลับไปให้ผู้ใช้ วิธีการเช่นนี้ถือได้ว่าเป็นจุดกำเนิดของแบ็กเอนด์อย่างแท้จริง และเป็นช่วงเวลาที่เซิร์ฟเวอร์ก้าวข้ามจากการแค่แสดงไฟล์ ไปสู่การคิด คำนวณ และประมวลผลลอจิก เว็บเซิร์ฟเวอร์จะส่งคืนหน้าเว็บแบบสแตติกที่เหมือนเดิมเสมอ แต่ WAS จะส่งคืนหน้าเว็บแบบไดนามิก
อย่างที่สาม ความจำเป็นและบทบาทของฐานข้อมูล
ฐานข้อมูลมีหน้าที่จัดเก็บข้อมูลอย่างถาวร บริหารจัดการข้อมูลอย่างปลอดภัย และควบคุมการเข้าถึงพร้อมกัน
นอกจากนี้ สิ่งอื่น ๆ ที่มีประโยชน์มากสำหรับการวางแผนแบ็กเอนด์และควรรู้ไว้ ได้แก่ การออกแบบ RESTful API (หลักการออกแบบ API ตาม REST architectural style เช่น การออกแบบ URL ที่ยึดทรัพยากรเป็นศูนย์กลาง, ความหมายของ HTTP(GET, POST, PUT, DELETE เป็นต้น), การใช้สถานะโค้ด ฯลฯ), การยืนยันตัวตน (ความเข้าใจพื้นฐานเกี่ยวกับวิธีการยืนยันตัวตนและการกำหนดสิทธิ์ของผู้ใช้ เช่น การยืนยันตัวตนแบบ session-based รวมถึงการกำหนดนโยบายการจัดการผู้ใช้) และการจัดการข้อผิดพลาด (แนวคิดเกี่ยวกับการจัดการกรณียกเว้นที่จำเป็นต่อการทำให้ระบบมีเสถียรภาพ)
8 ความคิดเห็น
คิดว่าโลกนี้แบ็กเอนด์ใช้แค่เว็บโปรโตคอลเท่านั้น
พอพูดว่าเป็น 3 องค์ประกอบหลักของแบ็กเอนด์แล้วกลับมีเว็บเซิร์ฟเวอร์โผล่มา ก็ชวนให้มึนงง
ตอนนี้มีทั้ง ALB และ CDN ที่ทำในส่วนที่อยากให้เว็บเซิร์ฟเวอร์ทำให้อยู่แล้ว ผมเลยไม่ค่อยเข้าใจว่าทำไมยังต้องยึดติดกับสิ่งนั้นอยู่ พวกคุณมีกรณีด้านความปลอดภัยอะไรบ้างไหมที่ในทางปฏิบัติสามารถป้องกันได้เพราะมีเว็บเซิร์ฟเวอร์อยู่?
หมายความว่า หาก ALB ทำหน้าที่แทนเว็บเซิร์ฟเวอร์ในเชิงฟังก์ชัน และผู้ใช้ไม่สามารถเข้าถึงแบ็กเอนด์อย่าง WAS ได้โดยตรง ก็ถือว่าตรงตามการจัดโครงสร้างสภาพแวดล้อมความปลอดภัยแบบเดิมใช่ไหมครับ และบริการจำนวนมากก็ยังคงทำงานอยู่บนสภาพแวดล้อม on-premises กันอยู่มากด้วยครับ
เมื่อพิจารณาในด้านความปลอดภัย ผมยังคงคิดว่าจำเป็นต้องแยก Web Server / เซิร์ฟเวอร์ WAS ออกจากกัน ไม่ได้มีอะไรเปลี่ยนไปแม้จะอยู่ในสภาพแวดล้อมแบบ cloud-native ก็ตาม Backend อย่าง WAS ไม่ควรอยู่ในเลเยอร์ที่ผู้ใช้สามารถเชื่อมต่อได้โดยตรง
ยังมีความหมายอยู่ไหมที่จะต้องรู้แนวคิดของเว็บเซิร์ฟเวอร์ / WAS เพื่อการวางแผนแบ็กเอนด์?
ในยุคที่ Java EE, php, CGI กำลังได้รับความนิยม การแบ่งแยกแบบนั้นก็ถือว่าเหมาะสมอยู่ แต่ทุกวันนี้ภาษาส่วนใหญ่ก็มักมี
http serverในตัวอยู่แล้ว และเมื่อแนวคิดอย่าง ALB, API Gateway, CDN, Object Storage ได้ถือกำเนิดขึ้นและกลายเป็นเรื่องปกติ ยุคสมัยก็ได้เปลี่ยนไปแล้วในทางกลับกัน หากไม่มีบริบททางประวัติศาสตร์ แนวคิดเรื่อง Web Server กับ WAS ที่แตกต่างจากปัจจุบันอย่างมากนั้น ไม่ใช่แนวคิดที่เหมาะสมอีกต่อไปแล้ว และผมรู้สึกว่ามันอาจยิ่งสร้างความสับสนให้กับผู้เริ่มต้นมากขึ้นเสียด้วย
ในฝั่งฟินเทค เนื่องจากข้อกำหนดด้านความปลอดภัย จึงยังมีหลายสภาพแวดล้อมที่แยก Web-WAS ออกจากกันอยู่ครับ ไม่รู้ว่าตัวเองจะได้ไปอยู่ในสภาพแวดล้อมแบบไหน ดังนั้นผมมองว่าเตรียมตัวไว้กับทุกแบบน่าจะถูกต้องครับ 555
แม้ในปัจจุบันที่เป็นสภาพแวดล้อมคลาวด์ ก็ยังใช้เพื่อกระจายโหลด
WASหลายตัวภายในอินสแตนซ์เดียวอย่างมีประสิทธิภาพสำหรับการประมวลผลปริมาณมากหากมีคำขอผ่านเครือข่ายไม่มากก็อาจไม่จำเป็น
เห็นด้วยครับ คิดว่าการสอนหลักการ 12-factor app และแพตเทิร์น cloud-native น่าจะใช้งานได้จริงมากกว่า ตัวคอนเซปต์เองก็เก่าเกินไปแล้ว