ความสามารถในการขยายตัวของระบบ (Scalable) กับ Service
รูปข้างล่างเป็นจำนวนผู้ใช้บน Facebook
ใน Facebook ตอนนี้มีผู้ใช้กว่า 500 ล้านคนประมาณ 50% ของผู้ใช้ทั้งหมดเข้าใช้งานทุกวันแต่ละคนใช้งานระบบเฉลี่ยอยู่ที่ 20 นาทีต่อคนในแต่ละเดือนมี 30 ล้าน content เช่น status update, comments, likes, photo uploads, video uploads, chat messages, inbox messages, group events, fan pages, friend connects, ... ถูกแชร์บน facebookในแต่ละเดือน application ถูกใช้มากกว่าล้านคน
ลองคิดเล่นๆ ว่าเค้าต้องออกแบบระบบยังไงให้ยืดหยุ่นรองรับการขยายตัว เพื่อให้รองรับปริมาณการใช้บริการต่างๆ จะเห็นว่าความสามารถในการขยายตัว จะสัมพันธ์กับสัดส่วนของบริการ และ product ใหม่ๆ ที่จะตามออกมา เหมือนอย่างที่ Google หลังจากค้นคว้าวิจัยเทคโนโลยี GFS, MapReduce, BigTable และถูกนำไปใช้ไม่นานหลังจากนั้นก็มีบริการและ product ใหม่ๆ ออกมา ในสัดส่วนที่เร็วกว่าแต่ก่อนมาก จะเห็นว่าภาพจะเป็นไปในแนวทางนี้ Infrastructure (scalable) -> Services-> Customer need
Distributed system กับ ทฤษฏี CAP
ระบบที่มีความสามารถในการขยายตัวส่วนใหญ่จะเป็นอยู่ใน model ของ distributed system เมื่อเราพูดถึง distributed เราจะต้องเจอกับทฤษฏี CAP ซึ่งมันเป็นแนวคิดที่เรียบง่ายแต่ไว้ใช้อธิบายเรื่องที่ซับซ้้อน ตัวทฤษฏี CAP มีต้นกำเนิดมาจาก Dr. Eric Brewer ในปี 2000 และกลายมาเป็นทฤษฏีที่มีผลกระทบต่อ โลก internet ในเวลาต่อมา
CAP มาจากคำว่า Consistency, Availability, Partition Tolerance ซึ่งมันบอกว่าระบบที่เป็น distributed storage จะสามารถรองรับคุณสมบัติแค่สองคุณสมบัติเท่านั้น นั่นคือเราไม่สามารถเลือกทั้งหมดได้พร้อมๆ กัน ณ เวลาใดเวลาหนึ่ง ซึ่งแต่ละคุณสมบัติมีรายละเอียดดังนี้
Consistency ทุก node จะเห็นข้อมูลกันเดียวกันในเวลาเดียวกันไม่ว่าจะเข้าถึงข้อมูลที่ node ใดใน cluster ก็ตาม ดังนั้นข้อมูลจึงมีแค่สองสถานะคือถูก กับไม่ถูก โดย consistency มีสองประเภทคือ strongly consistent และ weak consistencyตัวอย่างของ strongly consistent จะเทียบได้กับ database ที่มีคุณสมบัติ ACID (Atomicity, Consistency, Isolation, Durability)ส่วน weak consistency จะเจอเมื่อเนื้อข้อมูลของเรามีการ replicate กันโดยแต่ละ node ใน cluster ก็จะมีข้อมูลเดียวกันอยู่ แต่อาจไม่ใช่ version ล่าสุด ข้อมูล version ล่าสุดจะถูกเก็บอยู่ใน node ใด node หนึ่งในวง cluster แล้วจะ replicate ข้อมูลล่าสุดออกไป ดังนั้นในตอนสุดท้ายข้อมูลในทุก node ก็จะเป็นข้อมูลชุดเดียวกันAvailability ถึงแม้ node ใด node หนึ่ง fail แต่ก็จะไม่ขัดขวางการทำงานของระบบ ตัวระบบยังคงสามารถให้บริการต่อได้ เท่ากับว่าระบบจะต้องถูกออกแบบให้มี High-Availability เพื่อให้บริการได้ตลอดเวลาไม่ว่าจะเกิดเหตุการณ์ใดๆ ขึ้น เช่นเมื่อมีบาง node failures ขณะที่ software หรือ hardware กำลัง upgrade แต่ระบบโดยรวมยังคงให้บริการได้ต่อไปPartition Tolerance ระบบยังคงต้องทำงานต่อไปถึงแม้ว่าเส้นทางการเชื่อมต่อระหว่าง node จะเสียหาย แต่ client ยังเข้าถึงได้อยู่ถ้าระบบสามารถทนต่อสภาพเช่นนี้ได้ ตัว database ก็จะสามารถทำงานได้ตาม อ่าน, เขียนได้ตามปกติขณะที่ database 2 rack แยกออกจากกันถ้าไม่รองรับคุณสมบัตินี้แล้วเราอาจทำการอ่านข้อมูลได้เพียงอย่างเดียว แต่ไม่สามารถที่จะเขียนข้อมูลลงใน database ได้
สำหรับ RDBMS ได้คุณสมบัติ CA นั่นคือ Consistency และ Availability แต่ no Partition tolerance นั่นคือเมื่อ host หนึ่ง fail ไป RDBMS ก็จะหยุดการทำงานไปด้วย ดังนั้น RDBMS จึงต้องพยายามการันตีว่าจะต้องให้บริการได้ตลอด (High-Availability) เพราะฉะนั้นจึงไม่เกิดกรณี Partition Tolerance แน่ๆ
No comments:
Post a Comment