โปรดอัพเดตเบราว์เซอร์

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

ไอที

Microservice คืออะไร ? รู้จักกับสถาปัตยกรรมที่เปลี่ยนแปลงโลก การพัฒนาซอฟต์แวร์

Thaiware

อัพเดต 24 ม.ค. 2568 เวลา 02.00 น. • เผยแพร่ 24 ม.ค. 2568 เวลา 02.00 น. • Cocothedog
Microservice Architecture คืออะไร ? รู้จัก แนวทางออกแบบพัฒนาซอฟต์แวร์ ที่แบ่งระบบขนาดใหญ่เป็นส่วนย่อย ทั้งความหมาย, หลักการ, องค์ประกอบ ฯลฯ

Microservice คืออะไร ? รู้จักกับสถาปัตยกรรมที่เปลี่ยนแปลงโลกของการพัฒนาซอฟต์แวร์

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

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

เนื้อหาภายในบทความ

  • สถาปัตยกรรมแบบ Microservice คืออะไร ?
    (What is Microservice Architecture ?)
  • ความแตกต่างระหว่าง สถาปัตยกรรมแบบ Monolithic และ Microservice
    (Monolithic vs Microservice Architectures)
  • หลักการทำงานของ สถาปัตยกรรมแบบ Microservice
    (How does Microservice Architecture work ?)
  • องค์ประกอบสำคัญของ สถาปัตยกรรมแบบ Microservice
    (Key Components of Microservice Architecture)
  • ข้อดีของ และ ข้อสังเกตของ สถาปัตยกรรมแบบ Microservice
    (Pros and Cons of Microservice Architecture)
  • ตัวอย่างการนำเอา สถาปัตยกรรมแบบ Microservice ไปใช้จริง
    (Examples of Microservice Architecture Implementations)
  • บทสรุปของ สถาปัตยกรรมแบบ Microservice
    (Microservice Architecture Conclusions)

สถาปัตยกรรมแบบ Microservice คืออะไร ? (What is Microservice Architecture ?)

ไมโครเซอร์วิส (Microservice) หรือ "สถาปัตยกรรมแบบ Microservice (Microservice Architecture)" คือแนวทางการออกแบบ และพัฒนาซอฟต์แวร์ที่มุ่งเน้นการแบ่งระบบขนาดใหญ่ให้กลายเป็นส่วนย่อย ๆ ที่เรียกว่า "บริการ (Service)" โดยแต่ละ Service ได้รับการออกแบบมาให้ทำงานเฉพาะด้านนั้น ๆ และสามารถพัฒนา, ทดสอบ, ปรับใช้ (Deploy) หรือขยายระบบ (Scale) ได้อย่างอิสระ โดยไม่ส่งผลกระทบต่อส่วนอื่น ๆ ของระบบนั่นเอง

Microservice คืออะไร ? รู้จักกับสถาปัตยกรรมที่เปลี่ยนแปลงโลก การพัฒนาซอฟต์แวร์

ภาพจาก : https://jpmorgenthal.com/2020/08/26/the-power-of-microservices/

ในมุมมองของ Microservice แต่ละบริการเปรียบเสมือน แอปพลิเคชันขนาดเล็ก ที่มีหน้าที่เฉพาะเจาะจง เช่น อาจจะทำหน้าที่จัดการคำสั่งซื้อ, ประมวลผลการชำระเงิน หรือการยืนยันตัวตนผู้ใช้ ซึ่งสามารถสื่อสารกันผ่านทาง ส่วนต่อประสานโปรแกรมประยุกต์ (API) เพื่อทำงานร่วมกัน และสร้างประสบการณ์การใช้งานที่สมบูรณ์ให้กับผู้ใช้แอปพลิเคชันนั่นเอง

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

ความแตกต่างระหว่าง สถาปัตยกรรมแบบ Monolithic และ Microservice (Monolithic vs Microservice Architectures)

การพัฒนาซอฟต์แวร์ในปัจจุบันมักต้องเลือกใช้ระหว่าง สถาปัตยกรรมแบบ Monolithic และ สถาปัตยกรรมแบบ Microservice ซึ่งทั้งสองมีจุดเด่น และข้อจำกัดที่แตกต่างกันอย่างชัดเจน เราลองมาดูความแตกต่างของสถาปัตยกรรมทั้งสองแบบกัน

Microservice คืออะไร ? รู้จักกับสถาปัตยกรรมที่เปลี่ยนแปลงโลก การพัฒนาซอฟต์แวร์

ภาพจาก : https://ideausher.com/blog/what-is-microservice-architecture/

Monolithic Architecture

ใน Monolithic Architecture ทุกกระบวนการ และฟังก์ชันของระบบจะถูกรวมเข้าด้วยกัน และทำงานในฐานะ บริการเดียว (Single Service) ซึ่งหมายความว่าทุกส่วนของระบบ ทั้งระบบจัดการผู้ใช้, ชำระเงิน และประมวลผลคำสั่งซื้อ ทั้งหมดจะทำงานร่วมกันอย่างแนบแน่น (Tightly Coupled)

ลักษณะสำคัญของ Monolithic Architecture

  • การพัฒนา : การเพิ่มหรือปรับปรุงฟีเจอร์ใหม่ ๆ เป็นเรื่องซับซ้อน เนื่องจากทุกฟีเจอร์ และทุกกระบวนการอยู่ภายในโครงสร้างเดียวกัน หากโค้ดเบส (Codebase) มีขนาดใหญ่ ความซับซ้อนจะเพิ่มขึ้นเป็นทวีคูณเลยทีเดียว
  • การขยายระบบ : หากต้องการขยายระบบเพื่อรองรับความต้องการที่เพิ่มขึ้น เช่นเพิ่มปริมาณการประมวลผลในบางส่วนของระบบ จะต้องเพิ่มขนาดทั้งระบบ (Scale Up) ซึ่งอาจเป็นการใช้ทรัพยากรอย่างไม่คุ้มค่า และใช้จ่ายสูง
  • ความเสี่ยง : การล่มของกระบวนการใดกระบวนการหนึ่ง อาจส่งผลต่อระบบทั้งหมด เนื่องจากส่วนต่าง ๆ ของระบบพึ่งพากัน

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

Microservice Architecture

Microservice Architecture คือแนวทางการพัฒนาซอฟต์แวร์ที่แบ่งระบบออกเป็น ส่วนประกอบอิสระ (Independent Components) โดยแต่ละบริการจะรับผิดชอบเพียงหนึ่งหน้าที่เฉพาะของตนเท่านั้น อย่างเช่น ระบบจัดการผู้ใช้, หรือการชำระเงิน ซึ่งบริการเหล่านี้สามารถพัฒนา, ปรับใช้ และขยายได้อย่างอิสระ และสื่อสารกันผ่าน API แบบเบา (Lightweight APIs) ซึ่งไม่กระทบต่อประสิทธิภาพโดยรวม

ลักษณะสำคัญของ Microservice Architecture

  • การพัฒนา : แต่ละบริการทำงานแยกกันโดยไม่ต้องพึ่งพาส่วนอื่น ๆ ซึ่งช่วยลดความซับซ้อนของระบบโดยรวม เพิ่มฟีเจอร์ใหม่ก็ทำได้ไง หรือทดลองแนวคิดใหม่ก็ได้เช่นกัน
  • การขยายระบบ : สามารถขยายระบบเฉพาะบริการที่ต้องการได้ (Scale Out) เช่น หากระบบจัดการผู้ใช้มีการใช้งานสูง ก็สามารถเพิ่มทรัพยากรให้บริการนี้เพียงอย่างเดียว โดยไม่ต้องเพิ่มทั้งระบบประหยัดกว่าชัดเจน
  • ความเสี่ยง : หากบริการใดเกิดปัญหา บริการอื่น ๆ ในระบบยังคงสามารถทำงานได้ตามปกติ เนื่องจากบริการแต่ละส่วนไม่เชื่อมต่อกันอย่างแนบแน่นนั่นเอง

ตัวอย่างหากเมื่อระบบชำระเงินมีความต้องการสูงในช่วงเทศกาล ก็สามารถเพิ่มจำนวน เซิร์ฟเวอร์ (Server) สำหรับบริการนี้โดยไม่กระทบต่อบริการอื่น

หลักการทำงานของ สถาปัตยกรรมแบบ Microservice (How does Microservice Architecture work ?)

Microservice เน้นการแยกแอปพลิเคชันขนาดใหญ่ และซับซ้อนออกเป็นส่วนย่อย ๆ ที่เป็นอิสระต่อกัน โดยบริการเหล่านี้ทำงานร่วมกันผ่านการสื่อสารที่เป็นมาตรฐาน ซึ่งช่วยเพิ่มความสามารถในการขยายระบบ (Scalability) และลดความซับซ้อนในการบำรุงรักษา เราลองมาดูลำดับการทำงานของมันอย่างละเอียดกัน

1. แบ่งระบบเป็นบริการย่อย (Self-Contained Services)

แอปพลิเคชันถูกแบ่งออกเป็น บริการย่อย (Microservice) ซึ่งแต่ละบริการจะรับผิดชอบงานเฉพาะด้าน เช่น ค้นหาจัดการสินค้า (Product Management/Search) หรือตรวจสอบสถานะคำสั่งซื้อ (Order Status) ตามที่ออกแบบมา การแบ่งแบบนี้ช่วยให้การพัฒนาแต่ละส่วน และบำรุงรักษาทำได้ง่ายขึ้น เพราะแต่ละบริการเป็นโมดูลที่แยกออกจากกัน

Microservice คืออะไร ? รู้จักกับสถาปัตยกรรมที่เปลี่ยนแปลงโลก การพัฒนาซอฟต์แวร์

ภาพจาก : https://www.innoq.com/en/articles/2016/11/self-contained-systems-different-microservices/

2. มุ่งเน้นที่ความสามารถเฉพาะด้าน (Business Feature Specificity)

Microservice แต่ละตัวจะถูกออกแบบมาเพื่อทำงานเฉพาะฟังก์ชันธุรกิจ เช่น จัดการคำสั่งซื้อ (Order Service), แนะนำสินค้า (Recommendation Service) ซึ่งความเฉพาะเจาะจงนี้ช่วยให้ทีมพัฒนาสามารถโฟกัสกับการปรับปรุง และพัฒนาส่วนใดส่วนหนึ่งได้อย่างเต็มที่

3. สื่อสารผ่าน API (API-Driven Communication)

บริการต่าง ๆ ในระบบ Microservice สื่อสารกันผ่าน API แบบเบา (Lightweight APIs) ซึ่งกำหนดรูปแบบการแลกเปลี่ยนข้อมูลที่ชัดเจน โดย API เป็นตัวกลางที่ช่วยให้บริการที่เขียนด้วยภาษาโปรแกรม หรือฮาร์ดแวร์ และฟังก์ชันต่าง ๆ สามารถเชื่อมต่อกันได้ ตัวอย่างเช่นบริการจัดการคำสั่งซื้อส่งคำขอไปยังบริการชำระเงินผ่าน API เพื่อดำเนินการชำระเงินต่อไปนั่นเอง

Microservice คืออะไร ? รู้จักกับสถาปัตยกรรมที่เปลี่ยนแปลงโลก การพัฒนาซอฟต์แวร์

ภาพจาก : https://learn.microsoft.com/en-us/dotnet/architecture/microservices/architect-microservice-container-applications/direct-client-to-microservice-communication-versus-the-api-gateway-pattern

4. ใช้เทคโนโลยีที่หลากหลาย (Technology Diversity)

Microservice เปิดโอกาสให้แต่ละบริการสามารถเลือกใช้เทคโนโลยีที่เหมาะสมกับงานของตัวเองได้เช่น บริการจัดการข้อมูลสินค้าอาจใช้ฐานข้อมูล SQL ในขณะที่บริการวิเคราะห์ข้อมูลใช้ฐานข้อมูล NoSQL ซึ่งความยืดหยุ่นนี้ช่วยให้ทีมพัฒนาสามารถเลือกเครื่องมือที่เหมาะสมที่สุดสำหรับแต่ละงาน

5. ปรับปรุง และขยายระบบอย่างอิสระ (Independent Updates and Scalability)

แต่ละบริการสามารถพัฒนา, ทดสอบ และปรับใช้ (Deploy) ได้โดยไม่ส่งผลกระทบต่อบริการอื่น ๆ หากบริการใดมีปริมาณการใช้งานเพิ่มขึ้น ก็สามารถขยายเฉพาะบริการนั้น (Scale Out) โดยไม่ต้องเพิ่มขนาดทั้งระบบ

องค์ประกอบสำคัญของ สถาปัตยกรรมแบบ Microservice (Key Components of Microservice Architecture)

Microservice คืออะไร ? รู้จักกับสถาปัตยกรรมที่เปลี่ยนแปลงโลก การพัฒนาซอฟต์แวร์

ภาพจาก : https://youtu.be/J0ftx-jnjlg?si=71LR3Exfd4BMRItR

Microservice (บริการย่อย)

บริการย่อยที่มีหน้าที่เฉพาะ และทำงานแยกจากกัน เช่น บริการจัดการผู้ใช้หรือบริการชำระเงิน

API Gateway (เกตเวย์กลางสำหรับ API)

เป็นจุดศูนย์กลางที่ช่วยจัดการคำขอจากผู้ใช้งานภายนอก เช่น การกำหนดเส้นทาง (Routing) การตรวจสอบสิทธิ์ (Authentication) และส่งคำขอไปยังบริการที่เหมาะสม

Service Registry และ Discovery (ระบบลงทะเบียน และค้นหาบริการ)

ช่วยให้บริการต่าง ๆ ในระบบสามารถค้นหาที่อยู่ (Location) ของบริการอื่น ๆ ได้แบบไดนามิก เช่น หากมีการปรับเปลี่ยนตำแหน่งของบริการ ระบบจะสามารถค้นหา และเชื่อมต่อกับบริการนั้นได้โดยอัตโนมัติ

Load Balancer (ตัวกระจายโหลด)

กระจายปริมาณคำขอที่เข้ามาไปยังบริการย่อยต่าง ๆ เพื่อป้องกันการทำงานที่หนักเกินไปในบริการใดบริการหนึ่ง

Containerization (การบรรจุลงในคอนเทนเนอร์)

ใช้เทคโนโลยีเช่น Docker เพื่อบรรจุบริการเข้าไว้ในโครงสร้างเดียวกัน และส่วนประกอบที่เกี่ยวข้อง เช่น ไลบรารี (Library) หรือการตั้งค่าในรูปแบบ คอนเทนเนอร์ (Container)

Event Bus/Message Broker (ตัวจัดการเหตุการณ์/ตัวกลางข้อความ)

ช่วยในการสื่อสารระหว่างบริการผ่านข้อความ (Message) โดยเฉพาะการสื่อสารแบบอะซิงโครนัส (Asynchronous Communication) เช่น RabbitMQ หรือ Kafka

Database per Microservice (ฐานข้อมูลแยกสำหรับแต่ละบริการ)

บริการแต่ละตัวมีฐานข้อมูลของตัวเอง เพื่อแยกการจัดการข้อมูลอย่างอิสระ

ตัวอย่าง: บริการการชำระเงินใช้ฐานข้อมูล SQL ในขณะที่บริการแนะนำสินค้าใช้ฐานข้อมูล NoSQL

Caching (ระบบแคช)

การจัดเก็บข้อมูลที่ถูกเรียกใช้งานบ่อยในหน่วยความจำใกล้กับบริการ เช่น Redis เพื่อเพิ่มความเร็วในการประมวลผล

ข้อดีของ และ ข้อสังเกตของ สถาปัตยกรรมแบบ Microservice (Pros and Cons of Microservice Architecture)

ข้อดี

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

ข้อสังเกต

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

ตัวอย่างการนำเอา สถาปัตยกรรมแบบ Microservice ไปใช้จริง (Examples of Microservice Architecture Implementations)

หลายองค์กรทั่วโลกได้ปรับเปลี่ยนจากระบบ Monolithic ไปเป็นสถาปัตยกรรมแบบ Microservice เพื่อเพิ่มประสิทธิภาพ และความยืดหยุ่นในการพัฒนาระบบ เราลองมาดูตัวอย่างบริษัทใหญ่ ๆ ที่ใช้ระบบนี้กัน

1. Amazon

ในช่วงแรกนั้น Amazon ใช้ระบบแบบ Monolithic ซึ่งรวมทุกฟังก์ชันไว้ในโครงสร้างแอปพลิเคชันเดียว เมื่อธุรกิจเติบโต ระบบเดิมเริ่มมีข้อจำกัด ทำให้ Amazon เลือกใช้ Microservice แทน โดยแยกส่วนของระบบออกเป็นบริการย่อย ๆ

Microservice คืออะไร ? รู้จักกับสถาปัตยกรรมที่เปลี่ยนแปลงโลก การพัฒนาซอฟต์แวร์

ภาพจาก : https://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/Amazon_logo.svg/1024px-Amazon_logo.svg.png

ผลลัพธ์คือ

  • สามารถอัปเดตฟีเจอร์แต่ละส่วนได้โดยไม่กระทบต่อระบบทั้งหมด
  • เพิ่มความสามารถในการปรับตัว ต่อปริมาณผู้ใช้ที่เพิ่มขึ้น
  • ช่วยให้ทีมพัฒนาสามารถทำงานบนบริการที่แยกจากกันได้ง่ายขึ้น

2. Netflix

ในปี ค.ศ. 2007 (พ.ศ. 2550) Netflix เปลี่ยนจากการให้บริการเช่าดีวีดีไปสู่การเป็นแพลตฟอร์มสตรีมมิ่ง แต่ในช่วงเปลี่ยนผ่านนั้น ระบบ Monolithic ของ Netflix ประสบปัญหาบ่อยครั้งมาก ๆ เกิดการล่มของระบบเมื่อผู้ใช้งานเพิ่มขึ้น Netflix จึงเปลี่ยนไปใช้ Microservice Architecture โดยแยกแต่ละฟังก์ชันออกจากกัน ไม่ว่าจะเป็น ระบบแนะนำภาพยนตร์ และระบบสตรีมมิ่ง แบ่งออกเป็นบริการย่อยที่ทำงานอิสระ

Microservice คืออะไร ? รู้จักกับสถาปัตยกรรมที่เปลี่ยนแปลงโลก การพัฒนาซอฟต์แวร์

ภาพจาก : https://brand.netflix.com/en/assets/logos/

ผลลัพธ์คือ

  • ลดปัญหาการล่มของระบบ (Downtime)
  • ระบบทำงานได้เสถียรขึ้น แม้จะมีผู้ใช้งานจำนวนมาก
  • เพิ่มความเร็วในการพัฒนา และอัปเดตฟีเจอร์ใหม่

บทสรุปของ สถาปัตยกรรมแบบ Microservice (Microservice Architecture Conclusions)

มาถึงส่วนสุดท้ายกันแล้ว Microservice ไม่ใช่เพียงแค่แนวทางการพัฒนาซอฟต์แวร์ แต่เป็นการเปลี่ยนแปลงวิธีคิดในการออกแบบระบบใหม่ ด้วยการแยกส่วนระบบออกเป็นบริการย่อยที่สามารถทำงานได้อย่างอิสระ ทำให้การพัฒนา และปรับปรุงฟีเจอร์ใหม่ ๆ เป็นไปอย่างรวดเร็ว ลดความเสี่ยงของระบบล่ม และช่วยให้ทีมพัฒนาสามารถจัดการงานของตนได้อย่างมีประสิทธิภาพ

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

➤ Website : https://www.thaiware.com
➤ Facebook : https://www.facebook.com/thaiware
➤ Twitter : https://www.twitter.com/thaiware
➤ YouTube : https://www.youtube.com/thaiwaretv

ดูข่าวต้นฉบับ
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...