ความพร้อมใช้งานของแอปพลิเคชันไม่เคยได้รับการพิจารณาอย่างจริงจังเหมือนในทุกวันนี้เมื่อเราใช้แอปเป็นมากกว่าการสื่อสาร ไม่ว่าจะเป็นเรื่องส่วนตัวหรือเพื่อการทำงาน และเมื่อแอปเป็นธุรกิจ
แอปพลิเคชันที่ไม่ได้ออนไลน์ตลอดเวลา หรือไม่เสถียร สูญเสียผู้ใช้และความเกี่ยวข้อง ในที่สุดก็ล้าสมัย มันเกิดขึ้นในพริบตา เนื่องจากอินเทอร์เน็ตไม่เคยหลับไหลและทำงานตลอด 24 ชั่วโมง 7 วันต่อสัปดาห์ แนวคิดเดียวกันนี้จึงต้องใช้กับแอป
ความสามารถในการปรับขนาดมีความสำคัญต่อการทำเช่นนี้และช่วยให้มั่นใจว่าแอปพลิเคชันพร้อมใช้งาน การทำโหลดบาลานซ์เป็นหนึ่งในองค์ประกอบที่สำคัญที่สุดในการรับรองความพร้อมใช้งาน หลายคนยังคงเชื่อว่าการทำโหลดบาลานซ์สามารถทำได้ด้วยสคริปต์ง่ายๆ
อย่างไรก็ตาม นี่ไม่ใช่กรณี เพียงอย่างเดียวทำให้สามารถเข้าถึงโปรแกรมต่างๆ ได้ทั่วโลก — ได้ตลอดเวลาและจากอุปกรณ์ใดๆ
ในโพสต์นี้ เราจะเจาะลึกถึงการทำโหลดบาลานซ์ อัลกอริธึม และความเกี่ยวข้องกับไมโครเซอร์วิส เหนือสิ่งอื่นใด เอาล่ะ!
การทำโหลดบาลานซ์คืออะไร?
เนื่องจากความต้องการเว็บไซต์หรือแอปพลิเคชันทางธุรกิจเพิ่มขึ้น ในไม่ช้าเซิร์ฟเวอร์เดียวจะไม่สามารถรองรับการโหลดทั้งหมดได้ องค์กรกระจายปริมาณงานไปยังเซิร์ฟเวอร์จำนวนมากเพื่อตอบสนองความต้องการ วิธีการนี้เรียกว่า “การทำโหลดบาลานซ์” ป้องกันไม่ให้เซิร์ฟเวอร์เครื่องเดียวทำงานหนักเกินไป ซึ่งอาจทำให้เซิร์ฟเวอร์ทำงานช้าลง ทิ้งคำขอ หรือแม้แต่หยุดทำงาน
การทำโหลดบาลานซ์จะกระจายทราฟฟิกเครือข่ายอย่างเท่าเทียมกันเพื่อหลีกเลี่ยงความล้มเหลวเนื่องจากการโอเวอร์โหลดของทรัพยากร แอปพลิเคชัน เว็บไซต์ ฐานข้อมูล และทรัพยากรคอมพิวเตอร์อื่นๆ ทำงานได้ดีขึ้นและพร้อมใช้งานมากขึ้นโดยใช้วิธีนี้ นอกจากนี้ยังช่วยในการประมวลผลคำขอของผู้ใช้อย่างเหมาะสมและทันเวลา
จากมุมมองของผู้ใช้ การทำโหลดบาลานซ์ทำหน้าที่เป็นตัวกลางที่มองไม่เห็นระหว่างไคลเอนต์และคอลเลกชันของเซิร์ฟเวอร์ เพื่อให้แน่ใจว่าคำขอเชื่อมต่อจะไม่ถูกทิ้ง แอปพลิเคชัน เว็บไซต์ ฐานข้อมูล และบริการออนไลน์มักจะล่มสลาย หากความต้องการมีมากเกินไปโดยไม่มีการทำโหลดบาลานซ์
คำขอของผู้ใช้หลายแสนรายการสามารถส่งไปยังเว็บไซต์ที่มีการเข้าชมสูงเพียงแห่งเดียวได้ในเวลาเดียวกัน ต้องใช้เซิร์ฟเวอร์หลายเครื่องในการเติมหน้าเว็บอย่างถูกต้องด้วยเนื้อหาที่ร้องขอ เช่น ข้อความ รูปภาพ วิดีโอ และการสตรีมเสียง การทำโหลดบาลานซ์มักใช้ในฟาร์มเซิร์ฟเวอร์ของเว็บไซต์ที่มีการเข้าชมสูง เช่นเดียวกับเซิร์ฟเวอร์ DNS ฐานข้อมูล และไซต์ File Transfer Protocol (FTP)
หากเซิร์ฟเวอร์เดียวมีภาระมากเกินไป สิ่งนี้อาจทำงานได้ไม่ดีหรือเกิดความผิดพลาดได้ ตัวโหลดบาลานซ์ลดโอกาสในการหยุดทำงานโดยกระจายคำขอของผู้ใช้ไปยังกลุ่มเซิร์ฟเวอร์อย่างสม่ำเสมอ หากเซิร์ฟเวอร์ใดในกลุ่มหนึ่งล้มเหลว การรับส่งข้อมูลจะเปลี่ยนเส้นทางไปยังเซิร์ฟเวอร์อื่นในกลุ่ม ตัวโหลดบาลานซ์จะเพิ่มเซิร์ฟเวอร์ใหม่โดยอัตโนมัติในกระบวนการกระจายทราฟฟิกเมื่อมีการเพิ่มลงในพูลเซิร์ฟเวอร์
การทำโหลดบาลานซ์ทำงานอย่างไร?
มันทำงานดังนี้:
- เมื่อไคลเอ็นต์ได้รับคำขอ เช่น ผ่านเบราว์เซอร์หรือแอปพลิเคชัน ไคลเอ็นต์จะพยายามเชื่อมต่อกับเซิร์ฟเวอร์
- เมื่อโหลดบาลานเซอร์ได้รับคำขอ มันจะกำหนดเส้นทางไปยังหนึ่งในเซิร์ฟเวอร์ในกลุ่มเซิร์ฟเวอร์ตามรูปแบบที่กำหนดโดยอัลกอริทึม (หรือฟาร์ม)
- เซิร์ฟเวอร์ได้รับคำขอเชื่อมต่อและตอบไคลเอ็นต์ผ่านตัวโหลดบาลานซ์
- เมื่อโหลดบาลานเซอร์ได้รับการตอบกลับ จะจับคู่ที่อยู่ IP ของไคลเอ็นต์กับที่อยู่ IP ของเซิร์ฟเวอร์ที่เลือก หลังจากนั้น คำตอบจะถูกส่งไปพร้อมกับแพ็กเก็ต
- SSL offload เป็นกระบวนการถอดรหัสข้อมูลโดยใช้โปรโตคอลการเข้ารหัส Security Socket Layer เพื่อให้เซิร์ฟเวอร์ไม่ต้องทำ
- กระบวนการนี้จะทำซ้ำจนกว่าเซสชั่นจะสิ้นสุดลง
วิธีการปรับสมดุลโหลด
ในการเลือกเซิร์ฟเวอร์ในเซิร์ฟเวอร์ฟาร์มที่จะได้รับคำขอครั้งต่อไป เทคนิคการปรับสมดุลการโหลดแต่ละรายการจะใช้ชุดของเกณฑ์ มีห้าวิธีทั่วไปสำหรับการทำโหลดบาลานซ์:
- โรบินรอบ: นี่เป็นวิธีการเริ่มต้น และใช้งานได้ตามที่ได้ยิน ตัวโหลดบาลานซ์จะกระจายคำขอในรูปแบบการหมุนเวียน โดยเริ่มจากเซิร์ฟเวอร์แรกในกลุ่มและดำเนินการลงไปที่ด้านล่างสุด ซึ่งจะรอการเรียกอีกครั้ง วิธีนี้ช่วยให้แน่ใจว่าแต่ละเซิร์ฟเวอร์จัดการการเชื่อมต่อในจำนวนที่เท่ากันโดยประมาณ
- โรบินกลมถ่วงน้ำหนัก: วิธีการนี้จะกำหนดน้ำหนัก (หรือการกำหนดค่าตามความชอบ) ให้กับแต่ละเซิร์ฟเวอร์ ซึ่งโดยทั่วไปจะเป็นสัดส่วนกับความจุของเซิร์ฟเวอร์ ยิ่งเซิร์ฟเวอร์ได้รับคำขอมากเท่าใด น้ำหนักก็จะยิ่งมากขึ้นเท่านั้น ตัวอย่างเช่น เซิร์ฟเวอร์ที่มีค่าน้ำหนักเป็นสองเท่าจะได้รับคำขอเป็นสองเท่าของเซิร์ฟเวอร์ที่มีค่าน้ำหนักเท่ากับหนึ่ง
- เหนียวหนึบ: วิธีการนี้ หรือที่เรียกว่าการคงอยู่ของเซสชัน เชื่อมต่อไคลเอนต์และเซิร์ฟเวอร์บางตัวในช่วงระยะเวลาของเซสชัน ในการสร้างลิงก์ ตัวจัดสรรภาระงานจะใช้คุกกี้หรือที่อยู่ IP ของผู้ใช้เพื่อระบุแอตทริบิวต์ผู้ใช้ เมื่อสร้างการเชื่อมต่อแล้ว คำขอของผู้ใช้จะถูกส่งไปยังเซิร์ฟเวอร์เดียวกันจนกว่าเซสชันจะสิ้นสุดลง สิ่งนี้จะปรับทรัพยากรเครือข่ายให้เหมาะสมในขณะเดียวกันก็ปรับปรุงประสบการณ์ผู้ใช้ด้วย
- การเชื่อมต่อน้อยที่สุด: กลยุทธ์นี้ถือว่าคำขอทั้งหมดส่งผลให้เกิดภาระเซิร์ฟเวอร์เท่ากัน ด้วยเหตุนี้ เซิร์ฟเวอร์ที่มีจำนวนคำขอน้อยที่สุดจึงได้รับคำขอครั้งต่อไป
- แฮชไอพี: อัลกอริธึมนี้สร้างแฮชคีย์เฉพาะตามที่อยู่ IP ต้นทางและปลายทางของไคลเอ็นต์และเซิร์ฟเวอร์ คีย์นี้ใช้เพื่อกำหนดเส้นทางคำขอและอนุญาตให้มีการเชื่อมต่อที่ขาดหายไปกับเซิร์ฟเวอร์เดียวกันเพื่อดำเนินการต่อ
ฮาร์ดแวร์เทียบกับ ซอฟต์แวร์โหลดบาลานเซอร์
ฮาร์ดแวร์โหลดบาลานเซอร์
ฮาร์ดแวร์ทางกายภาพ เช่น อุปกรณ์ ประกอบขึ้นเป็นโหลดบาลานเซอร์ของฮาร์ดแวร์ เหล่านี้จะกำหนดเส้นทางการรับส่งข้อมูลไปยังเซิร์ฟเวอร์โดยขึ้นอยู่กับปัจจัยต่างๆ เช่น จำนวนการเชื่อมต่อที่มีอยู่ การใช้ตัวประมวลผล และประสิทธิภาพของเซิร์ฟเวอร์ ตัวโหลดบาลานซ์ฮาร์ดแวร์มีเฟิร์มแวร์ที่เป็นกรรมสิทธิ์ซึ่งต้องได้รับการบำรุงรักษาและอัปเดตเมื่อมีเวอร์ชันใหม่และการแก้ไขความปลอดภัย
ตัวโหลดบาลานซ์ของฮาร์ดแวร์มักจะให้ประสิทธิภาพและการควบคุมที่สูงขึ้น เช่นเดียวกับความสามารถที่หลากหลาย เช่น การรับรองความถูกต้องของ Kerberos และการเร่งความเร็วฮาร์ดแวร์ SSL แต่ต้องใช้ความเชี่ยวชาญด้านการจัดการและการบำรุงรักษาในระดับหนึ่ง เนื่องจากตัวโหลดบาลานซ์ของฮาร์ดแวร์มีความยืดหยุ่นน้อยกว่าและสามารถปรับขนาดได้กว่าตัวโหลดบาลานซ์ของซอฟต์แวร์ จึงมีแนวโน้มที่จะมีการจัดสรรโหลดบาลานเซอร์ของฮาร์ดแวร์มากเกินไป
ซอฟต์แวร์โหลดบาลานเซอร์
โหลดบาลานเซอร์ของซอฟต์แวร์มักจะตั้งค่าได้ง่ายกว่าฮาร์ดแวร์คู่ขนาน นอกจากนี้ยังประหยัดต้นทุนและปรับเปลี่ยนได้ และทำงานได้ดีกับสภาพแวดล้อมการพัฒนาซอฟต์แวร์ วิธีการของซอฟต์แวร์ช่วยให้คุณปรับแต่งโหลดบาลานเซอร์ตามความต้องการที่แท้จริงของสภาพแวดล้อมได้ ความยืดหยุ่นที่เพิ่มขึ้นอาจทำให้เสียเวลาเพิ่มเติมในการตั้งค่าตัวโหลดบาลานซ์
ซอฟต์แวร์บาลานเซอร์ให้ความยืดหยุ่นในการปรับเปลี่ยนและอัปเดตมากกว่าฮาร์ดแวร์ซึ่งมีแนวทางแบบปิดมากกว่า เครื่องเสมือนที่บรรจุไว้ล่วงหน้าสามารถใช้เป็นซอฟต์แวร์โหลดบาลานเซอร์ (VM) เครื่องเสมือนจะช่วยคุณประหยัดเวลาในการตั้งค่า แต่อาจไม่มีฟังก์ชันการทำงานทั้งหมดที่มีอยู่ในฮาร์ดแวร์คู่หูของตน
การใช้งาน Load Balancing อย่างง่าย
เราจะใช้ไลบรารี Spring Cloud เพื่อ สร้างแอพ ที่เชื่อมต่อกับแอพอื่นในลักษณะโหลดบาลานซ์ ขณะประมวลผลคำขอบริการระยะไกล เราสามารถสร้างโหลดบาลานซ์ได้อย่างง่ายดายโดยใช้เทคนิคใดก็ได้ที่เราต้องการ พิจารณารหัสต่อไปนี้เป็นตัวอย่าง เราจะเริ่มต้นด้วยแอปพลิเคชันเซิร์ฟเวอร์พื้นฐาน
เซิร์ฟเวอร์จะมีจุดปลาย HTTP เพียงจุดเดียวและจะดำเนินการในหลายกรณี จากนั้นเราจะสร้างแอปไคลเอ็นต์ที่ใช้ Load Balancer เพื่อแจกจ่ายคำขอข้ามอินสแตนซ์ของเซิร์ฟเวอร์หลายตัว
เซิร์ฟเวอร์
เราเริ่มต้นด้วยพื้นฐาน สปริงบูต แอปพลิเคชันสำหรับเซิร์ฟเวอร์ตัวอย่างของเรา:
ในการเริ่มต้น เราใส่ตัวแปรที่ปรับแต่งได้ที่เรียกว่า instance_ID ซึ่งช่วยให้เราแยกแยะระหว่างอินสแตนซ์จำนวนมากที่ทำงานอยู่ หลังจากนั้น เราสร้างปลายทาง HTTP GET เดียวที่ส่งคืนข้อความและ ID อินสแตนซ์
อินสแตนซ์เริ่มต้นที่มี ID 1 จะทำงานบนพอร์ต 8080 เราจำเป็นต้องเพิ่มพารามิเตอร์โปรแกรมสองสามตัวเพื่อเปิดใช้อินสแตนซ์ที่สองเท่านั้น:
ไคลเอนต์
ตอนนี้เรามาดูรหัสลูกค้ากัน นี่คือที่มาของ Load Balancer ดังนั้นเรามาเริ่มด้วยการรวมเข้ากับแอปพลิเคชันของเรา:
หลังจากนั้น เราพัฒนาการนำ ServiceInstanceListSupplier ไปใช้งาน นี่เป็นหนึ่งในอินเทอร์เฟซที่สำคัญที่สุดใน Load Balancer ระบุวิธีที่เราค้นหาอินสแตนซ์บริการที่เข้าถึงได้
เราจะฮาร์ดโค้ดสองอินสแตนซ์แยกกันของเซิร์ฟเวอร์ตัวอย่างของเราในแอปพลิเคชันตัวอย่างของเรา ทำงานบนระบบเดียวกันแต่ใช้พอร์ตแยกกัน:
สร้างคลาส LoadBalancerConfiguration ตอนนี้:
คลาสนี้มีจุดประสงค์เดียวเท่านั้น: สร้างตัวสร้าง WebClient แบบโหลดบาลานซ์สำหรับการร้องขอระยะไกล คำอธิบายประกอบของเราใช้ชื่อสมมติสำหรับบริการ
เนื่องจากเรามักจะไม่ทราบชื่อโฮสต์และพอร์ตที่แน่นอนสำหรับการเรียกใช้อินสแตนซ์ล่วงหน้า ด้วยเหตุนี้ เราจึงใช้ชื่อสมมติเป็นตัวยึดตำแหน่ง และเฟรมเวิร์กจะแทนที่ข้อมูลจริงเมื่อเลือกอินสแตนซ์ที่ทำงานอยู่
ต่อไป มาสร้างคลาสการกำหนดค่าที่จะใช้เพื่อสร้างอินสแตนซ์ของการจัดหาอินสแตนซ์บริการของเรา โปรดทราบว่าเราใช้นามแฝงเดิมเหมือนเมื่อก่อน:
ตอนนี้เราสามารถสร้างแอปพลิเคชันไคลเอนต์จริงได้แล้ว ส่งแบบสอบถาม 10 รายการไปยังเซิร์ฟเวอร์ตัวอย่างโดยใช้ WebClient bean จากก่อนหน้านี้:
เราจะเห็นได้จากผลลัพธ์ที่เรากำลังโหลดบาลานซ์ระหว่างสองอินสแตนซ์แยกกัน:
การทำโหลดบาลานซ์ในไมโครเซอร์วิส
สถาปัตยกรรมไมโครเซอร์วิสกำลังถูกใช้โดยบริษัทหลายแห่ง เช่น Netflix และ Amazon เพื่อพัฒนาแอปพลิเคชันทางธุรกิจเป็นชุดของบริการที่เชื่อมต่อแบบหลวมๆ การจัดส่งแบบไฮเปอร์สเกลและต่อเนื่องสำหรับแอปพลิเคชันที่ซับซ้อนเป็นเพียงเหตุผลสองประการในการย้ายไปยังสถาปัตยกรรมแบบกระจายและเชื่อมต่อแบบหลวมๆ นี้
ทีมขององค์กรเหล่านี้ได้ใช้กลยุทธ์ Agile และ DevOps เพื่อผลิตแอปได้รวดเร็วขึ้นและมีอัตราความล้มเหลวต่ำกว่าวิธีการแบบเดิม อย่างไรก็ตาม คุณต้องสร้างสมดุลระหว่างความซับซ้อนของสถาปัตยกรรมแบบกระจายกับความต้องการของแอปพลิเคชัน ข้อกำหนดด้านขนาด และข้อจำกัดด้านเวลาสู่ตลาด
เป็นเวลาหลายปีแล้วที่ Application Delivery Controllers (ADCs) มีความสำคัญอย่างยิ่งต่อการปฏิบัติตามข้อกำหนดระดับบริการสำหรับแอปพลิเคชันขององค์กรที่โฮสต์ในองค์กรหรือในระบบคลาวด์ ลูกค้าที่มีส่วนร่วมกับแอปพลิเคชันที่ใช้ไมโครเซอร์วิสไม่จำเป็นต้องทราบเกี่ยวกับอินสแตนซ์ที่ให้บริการ เพื่อที่จะขยายไคลเอ็นต์และไมโครเซอร์วิสอย่างอิสระ
นี่คือการดีคัปปลิ้งที่มีให้โดย reverse proxy หรือตัวโหลดบาลานซ์ อีกครั้งหนึ่ง การทำโหลดบาลานซ์คือโซลูชันเพื่อให้แน่ใจว่าไมโครเซอร์วิสสามารถรองรับความต้องการ ความปลอดภัย และความพร้อมใช้งานได้
เมื่อคุณรวมการโหลดบาลานซ์แบบ North-South แบบดั้งเดิมระหว่างแอพไคลเอนต์และไมโครเซอร์วิสเข้ากับการปรับใช้ East-West สำหรับความสามารถในการปรับขนาดในแนวนอน คุณจะได้รับการเพิ่มขึ้นอย่างมาก วัตถุประสงค์คือเพื่อรักษาสภาพแวดล้อมที่ปลอดภัยและควบคุมโดยฝ่ายไอทีโดยไม่สูญเสียความคล่องตัวในการพัฒนาหรือ การทำงานอัตโนมัติของ DevOps ความต้องการ
ประโยชน์
การทำโหลดบาลานซ์ให้ประโยชน์หลากหลายโดยการปรับปรุงการใช้ทรัพยากร การส่งมอบข้อมูล และเวลาตอบสนองสำหรับเว็บไซต์และแอพที่มีปริมาณการใช้งานสูง รวมถึงฐานข้อมูลที่มีคิวรีจำนวนมาก การทำโหลดบาลานซ์ช่วยให้มั่นใจได้ว่าคำขอของผู้ใช้จะได้รับการตอบสนองอย่างรวดเร็วและถูกต้องในสถานการณ์ที่มีการเข้าชมสูง
พวกเขาช่วยผู้ใช้ให้พ้นจากความยุ่งยากในการจัดการกับโปรแกรมและทรัพยากรที่เฉื่อยชา การทำโหลดบาลานซ์ยังช่วยหลีกเลี่ยงการหยุดทำงานและการรักษาความปลอดภัยที่ง่ายขึ้น ลดความเสี่ยงที่จะสูญเสียประสิทธิภาพการทำงานและรายได้สำหรับบริษัทของคุณ
- การทำโหลดบาลานซ์ให้ความยืดหยุ่นในการเพิ่มและลบเซิร์ฟเวอร์ตามความต้องการ นอกเหนือจากการจัดการทราฟฟิกให้มีประสิทธิภาพสูงสุด เนื่องจากทราฟฟิกถูกเปลี่ยนเส้นทางไปยังเซิร์ฟเวอร์อื่นระหว่างการบำรุงรักษา จึงเป็นไปได้ที่จะดำเนินการบำรุงรักษาเซิร์ฟเวอร์โดยไม่รบกวนผู้ใช้
- การทำโหลดบาลานซ์ให้ความซ้ำซ้อนในตัวโดยแบ่งทราฟฟิกระหว่างชุดของเซิร์ฟเวอร์ คุณสามารถโอนภาระงานไปยังเซิร์ฟเวอร์อื่นได้ทันทีหากล้มเหลว ซึ่งลดผลกระทบต่อผู้ใช้ให้เหลือน้อยที่สุด
- หากการใช้งานแอปพลิเคชันหรือเว็บไซต์เพิ่มขึ้น ปริมาณการใช้ข้อมูลที่เพิ่มขึ้นอาจทำให้ประสิทธิภาพลดลงหากไม่ได้รับการจัดการอย่างมีประสิทธิภาพ ด้วยการทำโหลดบาลานซ์ คุณสามารถเพิ่มเซิร์ฟเวอร์จริงหรือเสมือนเพื่อตอบสนองความต้องการโดยไม่กระทบต่อบริการ ตัวโหลดบาลานซ์จะระบุเซิร์ฟเวอร์ใหม่เมื่อออนไลน์และรวมเข้ากับการทำงานได้อย่างง่ายดาย วิธีนี้ดีกว่าในการย้ายเว็บไซต์จากเซิร์ฟเวอร์ที่มีภาระมากเกินไปไปยังเซิร์ฟเวอร์ใหม่ ซึ่งมักเกี่ยวข้องกับการหยุดทำงาน
สรุป
การทำโหลดบาลานซ์เป็นองค์ประกอบที่สำคัญของระบบร่วมสมัยที่ทนต่อความผิดพลาด เราสามารถสร้างแอพที่แจกจ่ายคำขอไปยังหลายอินสแตนซ์บริการโดยใช้วิธีการปรับสมดุลโหลดที่หลากหลาย ธุรกิจต้องสนับสนุนระบบไอทีที่ซับซ้อนเพื่อให้แอปพลิเคชันมีความปลอดภัย
การกำหนดค่าไมโครเซอร์วิสแบบข้ามโดเมน การปรับใช้ และการบำรุงรักษาอาจเกิดข้อผิดพลาดได้ง่าย มีราคาแพง และใช้เวลานาน ฝ่ายไอทีควรใช้แนวทางปฏิบัติที่ดีที่สุดสำหรับระบบอัตโนมัติ การมองเห็น การวิเคราะห์ และการประสาน และเทคโนโลยีที่เข้ากันได้กับกระบวนการที่คล่องตัวและ DevOps เพื่อทำให้การตั้งค่าและการบำรุงรักษาไมโครเซอร์วิสเหล่านี้ง่ายขึ้น
เขียนความเห็น