การเข้าใจ Three-Tier Architecture และนำไปใช้ในการพัฒนา ซอฟต์แวร์

By KDBEER | Last updated Jan 24, 2024
การเข้าใจและนำไปใช้งานระบบ-Three-Tier-Architecture-ในพัฒนาระบบซอฟต์แวร์-65b0ad23c651578a07b2d99a

ระบบ Three-Tier Architecture เป็นโครงสร้างการออกแบบซอฟต์แวร์ที่ได้รับความนิยมมากในการพัฒนาและบริหารจัดการระบบซอฟต์แวร์ในปัจจุบัน เป็นระบบที่แบ่งแยกการทำงานเป็นสามส่วนหลัก ได้แก่ Presentation tier, Application tier, และ Data tier ทำให้การพัฒนาและบำรุงรักษาระบบเป็นไปอย่างมีประสิทธิภาพและยืดหยุ่นมากขึ้น ในบทความนี้เราจะพิจารณาถึงการเข้าใจและการนำระบบ Three-Tier Architecture ไปใช้งานในการพัฒนาระบบซอฟต์แวร์อย่างละเอียด

1. ทำความเข้าใจกับ Three-Tier Architecture

1.1 แนวคิดของ Three-Tier Architecture

Three-Tier Architecture ประกอบด้วยสามส่วนหลักที่ทำหน้าที่แตกต่างกันอย่างชัดเจน ซึ่งประกอบไปด้วย

1. Presentation tier: เป็นชั้นที่เกี่ยวข้องกับการแสดงผลและการตอบโต้กับผู้ใช้งาน วัตถุประสงค์หลักของชั้นนี้คือการแสดงข้อมูลและการเก็บข้อมูลจากผู้ใช้ หรือเรามองว่า Presentation tier อาจจะเป็นการสร้าง webpage หรือ application บนมือถือ ที่มีการใช้ GUI ในการตอบโต้กับผู้ใช้ก็ได้ ปกติจะใช้ HTML, CSS และ JavaScript ในการพัฒนา 

2. Application tier หรือ Logic tier: เป็นชั้นที่เป็นตรรกะหรือชั้นกลาง เป็นหัวสมองของ Three-Tier Architecture ในชั้นนี้ ข้อมูลที่เก็บรวบรวมจากชั้น Presentation tier ถูกประมวลผลเพื่อดูว่า user ต้องการอะไร มองว่าชั้นนี้คือชั้นของ API ก็ได้ครับ ชั้นแอปพลิเคชันทั่วไปจะถูกพัฒนาโดยใช้ Python, Java, Perl, PHP หรือ Ruby และสื่อสารกับชั้นข้อมูลโดยใช้การเรียกใช้ API (Application Programming Interface)

3. Data tier: เป็นชั้นของ data หรือฐานข้อมูล ชั้นนี้ก็ตรงตามตัวเลยครับ ก็คือเอาไว้เก็บข้อมูล ควบคุมการเข้าถึงข้อมูล แบ่งเป็น relational database เช่น PostgreSQL, MySQL, MariaDB, Oracle, DB2, Informix, Microsoft SQL Server  หรือถ้าเป็น NoSQL อาจจะเป็น Cassandra, CouchDB or MongoDB เป็นต้น


 1.2 ความสำคัญของการแยก Tier

การสื่อสารข้อมูลของ Three-Tier Architecture จะสื่อสารกันตาม  Tier  คือ Presentation tier -> Application tier -> Data tier เท่านั้นนะครับ เราจะไม่ออกแบบระบบที่ Presentation tier สามารถ access เข้า Data tier ตรงๆ หรือง่ายๆ เราไม่เอา webpage ตรงไปหา database ตรงๆ ครับ

การแยกการทำงานของระบบเราออกเป็นชั้นๆ จะทำให้ง่ายต่อการบำรุงรักษาและปรับปรุงระบบ นอกจากนี้ยังทำให้เกิดความยืดหยุ่นในการพัฒนาโปรแกรม เนื่องจากสามารถแก้ไขหรือเพิ่มเติมส่วนหนึ่งๆ โดยไม่ต้องสัมผัสส่วนอื่น ๆ

ลองยกตัวอย่างง่ายๆ อย่างเช่น ตอนนี้เราอาจจะใช้พัฒนาเว็บไซต์ๆ หนึ่งครับ อยู่ซึ่งเว็บไซต์นี้ออกแบบระบบเป็น Three-Tier Architecture แบ่งได้เป็น

1. Presentation tier หรือ หน้าเว็บใช้ HTML, CSS

2. Application tier หรือ API Service เขียนโดย NodeJS

3. Data tier หรือ Database ใช้เป็น MySQL

วันดีคืนดีเราอยากจะเปลี่ยน Data tier จาก MySQL เป็น PostgreSQL ครับ ทีนี้สิ่งที่เราต้องทำก็คือย้ายข้อมูลในชั้น Data tier คือ copy ข้อมูลจาก MySQL ไปที่ PostgreSQL และทำการแก้ไขชั้น Application tier หรือแก้ไขให้โปรแกรมที่เขียนด้วย NodeJS ไปต่อ PostgreSQL แทน ซึ่งถ้าทำแบบถูกต้อง ส่วนของ Presentation tier หรือหน้าเว็บไม่ควรจะได้รับผลกระทบเลย เพราะว่า เราไม่ได้ไปแก้ในส่วยของ api request , response เป็นต้นครับ

2. Benefits of three-tier architecture

ประโยชน์หลักของ Three-Tier Architecture คือการแยก function การทำงานออกออกไปตาม logic ( ส่วนที่ต้องต่อกับผู้ใช้, ส่วนประมวลผล, ส่วนเก็บข้อมูล ) และลักษณะทางการภาพ แต่ละชั้นเราออกแบบให้ทำงานบน Operating System และ Platform ที่แตกต่างกันได้ เช่น เว็บเซิร์ฟเวอร์, แอปพลิเคชันเซิร์ฟเวอร์, เซิร์ฟเวอร์ฐานข้อมูล ซึ่งเราสามารถ custom server แต่ละตัวได้โดยที่ไม่ Impact กับ server อื่นๆ

ประโยชน์อื่นๆ

  • Faster development: เนื่องจากแต่ละชั้นสามารถถูกพัฒนาพร้อมกันโดยทีมที่แตกต่างกัน องค์กรสามารถนำแอปพลิเคชันสู่ตลาดได้เร็วขึ้น และโปรแกรมเมอร์สามารถใช้ภาษาและเครื่องมือที่ทันสมัยและดีที่สุดสำหรับแต่ละชั้น
  • Improved scalability: อย่างที่กล่าวไปข้างต้น เราสามารถ scale แต่ละ tier แยกกันได้อย่างอิสระ
  • Improved reliability: ถ้าเกิดการขัดข้องในหนึ่งชั้นนั้น ไม่น่าจะมีผลกระทบต่อความพร้อมใช้งานหรือประสิทธิภาพของชั้นอื่น ๆ 
  • Improved security: เนื่องจากชั้นนำเสนอและชั้นข้อมูลไม่สามารถสื่อสารโดยตรงกันได้, ชั้นแอปพลิเคชันที่ออกแบบอย่างดีสามารถทำหน้าที่เป็นเหมือนไฟวอลล์ภายใน ป้องกันการเข้าถึงไม่ปลอดภัย เช่น SQL injections และการโจมตีที่เป็นอันตรายอื่น ๆ