ฉันกำลังตั้งค่าระบบที่คล้ายกัน (ในระดับมืออาชีพ) และนี่คือการออกแบบที่ฉันเลือก:
- ตัวโหลดบาลานซ์ Nginx สองตัว (ทั้งแอ็คทีฟและทั้งสองล้มเหลวสำหรับอีกตัวหนึ่งซึ่งสมดุลกับ DNS round robin)
- ฐานข้อมูล MySQL สองฐานข้อมูลในโหมดการจำลองข้อมูลหลัก
- Tomcat สองอินสแตนซ์เป็นคลัสเตอร์ Tomcat
- Memcached สองอินสแตนซ์สำหรับทั้งแคชและการแชร์สถานะเซสชันสำหรับคลัสเตอร์ Tomcat
สิ่งนี้จะทำให้เกิดความพร้อมใช้งานสูงและพร้อมใช้งานสูงโซลูชันที่ปรับขนาดได้
ตัวโหลดบาลานซ์ (บนฮาร์ดแวร์ที่เหมาะสม) จะทำการโหลดดุล 1gbit บรรทัดที่อิ่มตัวได้อย่างง่ายดาย นี่เป็นสถานที่ที่เหมาะสำหรับการถ่าย SSL
คุณสามารถบันทึกข้อมูลเซสชั่นของคุณใน memcached ในกรณีที่ Tomcat อินสแตนซ์ล้มเหลวอีกคราว Tomcat สามารถดึงข้อมูลเซสชั่นที่เกี่ยวข้องและลูกค้าจะไม่สังเกตเห็นสิ่งใด อย่าลืมที่จะรวมสิ่งนี้เข้ากับช่วงเหนียวเช่นกัน (เพื่อลดทราฟฟิกเครือข่าย)
การจัดกลุ่ม Tomcat ยังมีตัวเลือกในการแบ่งปันข้อมูลเซสชันระหว่างกลุ่มในแบบเรียลไทม์โดยไม่ต้องใช้ memcached แม้ว่าฉันจะคิดว่าประสิทธิภาพฉลาด แต่การใช้ Memcached จะดีกว่า
หากคุณต้องการพลังงานเพิ่มขึ้นในแอปพลิเคชันเหล่านี้:
- Nginx: เพิ่ม loadbalancer ให้มากขึ้นถึงแม้ว่าฉันไม่คิดว่ามันจะเป็นคอขวดในไม่ช้า
- Tomcat: คุณสามารถเพิ่มขนาดของคลัสเตอร์ Tomcat ได้อย่างง่ายดายหรือเพิ่มกลุ่มเพิ่มเติม
- Mysql: เพิ่มทาสแบบอ่านอย่างเดียวหรือเพิ่มขนาดของคลัสเตอร์ (ขึ้นอยู่กับแอปพลิเคชันของคุณ แต่เนื่องจากคุณเขียนแอปพลิเคชันที่ใช้ REST จึงไม่น่าจะมีปัญหา)
- Memcached: เพิ่มโหนดมากขึ้น Memcached สเกลค่อนข้างดีฉันเชื่อว่า
ฉันไม่ทราบว่าแอปพลิเคชันของคุณเป็นอย่างไรและแหล่งทรัพยากรขนาดใหญ่เป็นอย่างไร แต่ถ้าคุณเห็นการโหลดฐานข้อมูลสูง (ระหว่างการทดสอบโหลด!) การเพิ่มแคชระหว่างแอปพลิเคชันและฐานข้อมูลจะช่วยปรับปรุงประสิทธิภาพได้อย่างมาก แต่อย่าลืมว่าไม่ใช่ทุกอย่างที่สามารถเข้าถึงได้หากคำสั่งของคุณแตกต่างกันเสมอการแคชจะไม่ช่วยได้ (มาก)
คำแนะนำของฉันคือการดาวน์โหลด VMware Workbench (หรือซอฟต์แวร์ virtualization similair) และพยายามสร้างการตั้งค่าอย่างง่าย ไม่มีการโหลดบาลานซ์หรือทำคลัสเตอร์เพียงพื้นฐานและทำงานจากที่นั่น ทีละหนึ่งเพิ่มคุณสมบัติเพิ่มเติม (สมดุลแคชการจัดกลุ่มและอื่น ๆ ) และให้แน่ใจว่าจะทำวิจัยบางอย่างในแต่ละหัวข้อดังนั้นคุณจะรู้ว่าคุณเลือกที่ถูกต้อง
หากคุณยังคงใช้การทดสอบประสิทธิภาพเดิมต่อไปในระหว่างกระบวนการนี้คุณสามารถดูด้วยตัวคุณเองว่าการใช้Xนั้นดีกว่าการใช้Yในการตั้งค่าของคุณหรือจะมีการแคชผลกระทบอะไรบ้างเป็นต้น
ในที่สุดการตั้งค่าเช่นนี้ขึ้นอยู่กับความต้องการของแอปพลิเคชันและลูกค้าของคุณทุกสิ่งสามารถทำได้หลายวิธีโดยแต่ละจุดมีจุดแข็งและจุดอ่อนของตัวเอง
มีคำถามอื่นอีกไหม?
โชคดี!
เวสลีย์