Apache Tomcat คือ ตอนที่ 8 : ความสามารถขั้นสูง

  1. การทำคลัสเตอร์ (Clustering) สำหรับ Load Balancing และ Failover
  2. JDBC DataSources และ JNDI Resources
  3. การปรับแต่งประสิทธิภาพและการเพิ่มประสิทธิภาพสำหรับ Tomcat
    JVM ปรับแต่ง (Tuning)
    การกำหนดค่าเธรดพูล (Thread Pool Configuration)
    Garbage Collection
    การปรับแต่ง HTTP Connector
  4. การทำแอพสำหรับ Tomcat

Apache Tomcat เป็นเว็บเซิร์ฟเวอร์แบบโอเพ่นซอร์สและคอนเทนเนอร์เซิร์ฟเล็ต เป็นแพลตฟอร์มที่มีประสิทธิภาพสำหรับการปรับใช้และทำแอพ Java แม้ว่าการกำหนดค่าพื้นฐานของ Tomcat จะตรงไปตรงมา แต่สิ่งสำคัญคือต้องเข้าใจหัวข้อขั้นสูง เช่น การทำคลัสเตอร์, JDBC DataSources, JNDI Resources, การปรับแต่งประสิทธิภาพ และที่สำคัญที่สุดคือ การทำแอพเพื่อใช้ประโยชน์จากความสามารถอย่างเต็มที่ บทความนี้เจาะลึกประเด็นเหล่านี้เพื่อนำเสนอมุมมองที่ครอบคลุม

1. การทำคลัสเตอร์ (Clustering) สำหรับ Load Balancing และ Failover

คุณสมบัติที่มีค่าที่สุดอย่างหนึ่งของ Apache Tomcat คือความสามารถในการทำคลัสเตอร์ คลัสเตอร์ Tomcat ช่วยให้อินสแตนซ์ Tomcat หลายรายการทำงานเป็นหน่วยขนาดใหญ่เพียงหน่วยเดียว โดยให้โหลดบาลานซ์เพื่อกระจายคำขอขาเข้าระหว่างเซิร์ฟเวอร์หลายเครื่อง และรับประกันการเฟลโอเวอร์เพื่อปรับปรุงความพร้อมใช้งานของแอปพลิเคชัน

เมื่อทำแอพเพื่อปรับใช้บนคลัสเตอร์ Tomcat สิ่งสำคัญคือต้องแน่ใจว่าแอปพลิเคชันนั้นสามารถทำคลัสเตอร์ได้ โดยเฉพาะอย่างยิ่ง แอปพลิเคชันควรได้รับการออกแบบในลักษณะที่สามารถดำเนินการกับหลาย ๆ อินสแตนซ์พร้อม ๆ กัน โดยข้อมูลเซสชันจะถูกทำซ้ำในทุกโหนด

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

มีสองวิธีหลักในการเปิดใช้งานการจำลองเซสชันใน Tomcat: Backup Session Manager และ Delta Manager โดยทั่วไปแล้ว Backup Session Manager จะใช้เมื่อมีโหนดจำนวนมาก เนื่องจากจะจำลองเซสชันไปยังโหนดอื่นเพียงโหนดเดียวเท่านั้น ในทางกลับกัน Delta Manager จะจำลองข้อมูลเซสชันไปยังโหนดอื่นๆ ทั้งหมด และโดยปกติจะใช้ในคลัสเตอร์ขนาดเล็ก

2. JDBC DataSources และ JNDI Resources

DataSource เป็นกลุ่มของการเชื่อมต่อฐานข้อมูลที่สร้างไว้ล่วงหน้าซึ่งแอปพลิเคชันสามารถใช้เพื่อเชื่อมต่อกับฐานข้อมูล การใช้ DataSource แทนที่จะจัดการการเชื่อมต่อแต่ละรายการ สามารถเพิ่มประสิทธิภาพของแอปพลิเคชันได้อย่างมาก โดยหลักแล้วหากแอปพลิเคชันเข้าถึงฐานข้อมูลบ่อยครั้ง

ในแอปพลิเคชัน Java ที่ทำงานบน Tomcat คุณสามารถกำหนดค่า DataSource โดยใช้ Java Database Connectivity (JDBC) API และทำให้แอปพลิเคชันของคุณพร้อมใช้งานเป็นทรัพยากร Java Naming and Directory Interface (JNDI)

คำแนะนำทีละขั้นตอนในการสร้าง DataSource สำหรับแอปพลิเคชัน Java ใน Tomcat มีดังนี้

  1. สร้างไฟล์ context.xml ในไดเรกทอรี META-INF ของแอปพลิเคชันของคุณ หากมีอยู่แล้ว คุณสามารถแก้ไขได้
  2. กำหนดทรัพยากรในไฟล์ context.xml ตัวอย่างเช่น สำหรับฐานข้อมูล MySQL คุณอาจเขียน:
<Resource name="jdbc/MyDB"
          auth="Container"
          type="javax.sql.DataSource"
          driverClassName="com.mysql.cj.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/mydb"
          username="username"
          password="password"
          maxActive="20"
          maxIdle="10"/>
  1. ในแอปพลิเคชันของคุณ ตอนนี้คุณสามารถค้นหาแหล่งข้อมูลโดยใช้ JNDI ตัวอย่างเช่น:
Context initialContext = new InitialContext();
DataSource ds = (DataSource) initialContext.lookup("java:comp/env/jdbc/MyDB");
Connection conn = ds.getConnection();

โปรดทราบว่าเพื่อให้ใช้งานได้ ไฟล์ JAR ของไดรเวอร์ JDBC (ในกรณีนี้คือสำหรับ MySQL) จะต้องอยู่ในไดเร็กทอรี lib ของ Tomcat

3. การปรับแต่งประสิทธิภาพและการเพิ่มประสิทธิภาพสำหรับ Tomcat

การเพิ่มประสิทธิภาพ Tomcat เกี่ยวข้องกับการปรับแต่งส่วนประกอบต่างๆ เช่น การตั้งค่า JVM, การกำหนดค่าเธรดพูล, การรวบรวมขยะ (Garbage Collection) และแอตทริบิวต์ของตัวเชื่อมต่อ HTTP

JVM ปรับแต่ง (Tuning)

การทำแอพ Java ทำงานภายใน Java Virtual Machine (JVM) ซึ่งจะจัดการหน่วยความจำสำหรับแอปพลิเคชัน ขนาดฮีป JVM เป็นการตั้งค่าที่สำคัญสำหรับการปรับแต่งประสิทธิภาพ ขึ้นอยู่กับขนาดของแอปพลิเคชันของคุณและหน่วยความจำกายภาพทั้งหมดที่มีอยู่ คุณสามารถเพิ่มขนาดฮีปสูงสุดได้โดยใช้ตัวเลือก -Xmx ตัวอย่างเช่น หากต้องการตั้งค่าขนาดฮีปสูงสุดเป็น 512MB คุณควรใช้ -Xmx512m

การกำหนดค่าเธรดพูล (Thread Pool Configuration)

ตัวเชื่อมต่อ Tomcat HTTP สร้างพูลของเธรดผู้ปฏิบัติงานเพื่อประมวลผลคำขอ HTTP ที่เข้ามา โดยค่าเริ่มต้น เธรดพูลของ Tomcat ได้รับการกำหนดค่าให้รองรับการเชื่อมต่อพร้อมกัน 200 รายการ ขึ้นอยู่กับโหลดที่เซิร์ฟเวอร์ของคุณกำลังจัดการ คุณอาจต้องเพิ่มหรือลดจำนวนนี้

Garbage Collection

การรวบรวมขยะ (Garbage Collection) ที่มีประสิทธิภาพมีความสำคัญต่อประสิทธิภาพสูงสุด การเลือกอัลกอริธึมการรวบรวมขยะอาจส่งผลต่อประสิทธิภาพของแอปพลิเคชันอย่างมาก โดยทั่วไป ขอแนะนำให้ใช้ G1 Garbage Collector สำหรับแอปพลิเคชันเซิร์ฟเวอร์ส่วนใหญ่

การปรับแต่ง HTTP Connector

ตัวเชื่อมต่อ HTTP ของ Tomcat มีแอตทริบิวต์หลายอย่างที่สามารถปรับเปลี่ยนเพื่อประสิทธิภาพ รวมถึง acceptCount (ความยาวคิวสูงสุดสำหรับคำขอการเชื่อมต่อที่เข้ามา) connectionTimeout (การหมดเวลาเป็นมิลลิวินาทีสำหรับคำขอ HTTP) และ compression (กำหนดว่าจะบีบอัดการตอบสนอง HTTP)

4. การทำแอพสำหรับ Tomcat

การทำแอพเพื่อปรับใช้บน Tomcat มักจะเกี่ยวข้องกับการใช้เทคโนโลยีเช่น Java Servlet, JavaServer Pages (JSP) และ JavaServer Faces (JSF) โดยทั่วไป คุณจะต้องใช้สภาพแวดล้อมการพัฒนาแบบรวม (IDE) เช่น Eclipse หรือ IntelliJ IDEA เพื่อทำแอพของคุณ

ต่อไปนี้เป็นขั้นตอนง่ายๆ ในการทำเว็บแอปพลิเคชันพื้นฐานสำหรับ Tomcat:

  1. ตั้งค่าสภาพแวดล้อมการพัฒนาของคุณ:สิ่งนี้เกี่ยวข้องกับการติดตั้ง Java Development Kit (JDK) การตั้งค่า IDE ของคุณ และติดตั้ง Tomcat บนระบบโลคัลของคุณ
  2. ทำเว็บแอปพลิเคชันใหม่: IDE ส่วนใหญ่มีตัวเลือกในการทำโครงการเว็บแอปพลิเคชันใหม่ ขณะสร้างโปรเจ็กต์ อย่าลืมรวมไลบรารีสำหรับ Servlets และ JSP
  3. พัฒนาแอปพลิเคชันของคุณ:สร้างเซิร์ฟเล็ต, JSP หรือ JSF ตรวจสอบให้แน่ใจว่าได้กำหนดเซิร์ฟเล็ตของคุณในweb.xmlตัวให้คำอธิบายการปรับใช้
  4. ทำแอปพลิเคชันของคุณ:ทำแอปพลิเคชันของคุณเป็นไฟล์ WAR (Web ARchive) นี่เป็นรูปแบบมาตรฐานสำหรับเว็บแอปพลิเคชันใน Tomcat
  5. ปรับใช้แอปพลิเคชันของคุณ:คุณสามารถปรับใช้แอปพลิเคชันของคุณโดยคัดลอกไฟล์ WAR ไปยังไดเร็กทอรี webapps ของการติดตั้ง Tomcat หรือผ่านแอปพลิเคชัน Tomcat Manager

โปรดจำไว้ว่า เมื่อทำแอพสำหรับ Tomcat สิ่งสำคัญคือต้องคำนึงถึงสภาพแวดล้อมที่จะใช้งาน โดยเฉพาะอย่างยิ่ง หากคุณกำลังใช้คุณสมบัติขั้นสูง เช่น การทำคลัสเตอร์หรือทรัพยากร JNDI แอปพลิเคชันของคุณจะต้องได้รับการออกแบบให้ทำงานในบริบทเหล่านั้น


Apache Tomcat เป็นเครื่องมืออเนกประสงค์สำหรับการโฮสต์แอปพลิเคชัน Java แม้ว่าการตั้งค่าพื้นฐานจะค่อนข้างง่าย แต่การทำความเข้าใจคุณสมบัติขั้นสูง เช่น การทำคลัสเตอร์ แหล่งข้อมูล JDBC ทรัพยากร JNDI และการปรับแต่งประสิทธิภาพสามารถเพิ่มประสิทธิภาพและความน่าเชื่อถือของแอปพลิเคชันของคุณได้อย่างมาก หัวใจสำคัญของสิ่งเหล่านี้คือการทำแอพที่แข็งแกร่งและมีประสิทธิภาพซึ่งออกแบบโดยคำนึงถึงลักษณะของคอนเทนเนอร์เซิร์ฟเล็ตและความสามารถของมัน


Apache Tomcat คืออะไร

Apache Tomcat คือ ตอนที่ 7 : การบันทึก (Logging) และการแก้ไขปัญหา (Troubleshooting)
Apache Tomcat คือ ตอนที่ 9 : เวอร์ชันของ Tomcat