ตั้งแต่เราจักความได้ในการออกแบบระบบ (สำหรับผมก็ 10 ปีมาแล้ว)
ก็เคยได้เคยสัมผัสกับการพัฒนาระบบในรูปแบบที่เรียกว่า
Application 1- Tier (ที่จะใช้งานก็ต้องลงโปรแกรมบนเครื่องนั้นๆ)
Client Server 2-Tier (ก็เครื่องที่ติดตั้ง Application Server (DB Server) และ Application Client )
Web Application 3/N-Tier (มี DB Server , Application , Web Server , เรียกใช้งานผ่าน Web Browser )
โดยเท่าที่รู้ก็ N-Tier เป็น การออกแบบระบบที่รองรับการขยายระบบเพื่อรองรับการเข้าใช้งานได้อย่างไม่จำกัด ตามที่เข้าใจก็คือเพิ่ม Hardware Resources + Tuning Application ไปยัง Server ในส่วนนั้นๆไม่ว่าจะเป็น
เพิ่ม CPU/เพื่อรองรับการขยายประสิทธิภาพการประมวลผล
เพิ่ม Memory /RAM เพื่อรองรับ Concurrent ที่เพิ่มขึ้น
เพิ่ม Storage / HDD เพื่อรองรับการจัดเก็บข้อมูล
เพิ่ม Bandwidth Network เพื่อรองรับการส่งผ่านข้อมูลระหว่างกัน
และสำหรับปัจจุบันก็มี เทคโนโลยี Cloud มาเสริมเรื่อง การแยกส่วน Resources กับ OS ให้เป็นอิสระ
และรองรับการเพิ่มขีดจำกัดในการขยายระบบขึ้นไปอีก
แต่สุดท้ายทั้งระบบก็ต้องทำงานบน Platform Data Center ชุดเดียวกัน
(คำถามก็คือ สำหรับระบบงานที่มีผู้ใช้เป็นแสนๆ ล้านๆ และ มีปริมาณ Con-current
รวมถึงข้อมูลระดับ TB แต่สามารถมี Response Times ในการใช้งานที่เท่าที่เคยรองแม้ระบบ Application บนเครื่องตัวเองก็ยังทำไม่ได้ แล้วระบบเหล่านั้น ออกแบบกันอย่างไร )
คำถามนี้ก็คงอาจจะเกิดขึ้นกับคนส่วนมาก ที่ใช้งาน Google /Facebook/Amazon ซึ่งเป็นระบบที่เปิดให้บริการกับคนทั้งโลก ผ่าน ระบบ Web Application ด้วย Domain เดียวกัน
ในคำถามหลักนี้ก็ได้แนวทางคำตอบเบื้องต้นว่า ระบบเหล่านั้น ใช้เทคนิคขั้นสูงในการออกแบบระบบ ซึ่งไม่นับ เทคนิดเกี่ยวกับการออกแบบระบบ Hardware/Network ก็คือ
แนวทางการออกแบบเกี่ยวกับ Software Architecture ที่ต่างออกไปจากหลักการที่เราได้เข้าใจมาในการพัฒนาSoftware อย่างสิ้นเชิง นั้นคือ
1.เราใช้การออกแบบและพัฒนาเรื่อง Persistence Data (ส่วนการจัดเก็บข้อมูล) ผ่าน Rational DB (TABULAR DATA)
2.เราใช้การออกแบบและพัฒนาเรื่อง Session Data (ส่วนการจัดเก็บข้อมูลขณะใช้งาน) ผ่าน Session Management ของ Framework ของแต่ละภาษา Programming (PHP/Java/.Net)
3.เราใช้การออกแบบและพัฒนาเรื่อง File Data (ส่วนการจัดเก็บข้อมูลแฟ้มเอกสารต่างๆรวมถึงรูปภาพ) ผ่านการบันทึกในรูปแบบ File-Type ต่างๆ ผ่าน OS และผ่าน Framework ของแต่ละภาษา Programming (PHP/Java/.Net)
4.เราใช้การออกแบบและพัฒนาเรื่อง Network Data (ส่วนการจัดส่งและรับข้อมูล) ผ่าน Protocol TCP/IP เป็นพื้นฐานโดยเฉพาะ Web Application ก็จะมี Layer (ลำดับชั้นในการเชื่อมต่อกันเป็นขั้นๆ ตาม Tier ต่างๆ )
สิ่งเหล่านี้เราทำเพราะเราได้รับการถ่ายถอดมา ถึงแนวทางนี้ ทั้งตำรา และการเรียนการสอน ไม่ว่าจะเป็นการพัฒนาระบบในแบบใด ก็จะมีหลักการประมาณนี้ การจะทำให้ระบบทำงานมีประสิทธิภาพ จึงมีปัจจัยแปลงผันโดยตรงก็คือ
ข้อ 1 เรื่องการประสิทธิภาพการอ่าน/เขียน DB ก็ต้องใช้ หลักๆ ก็การเกี่ยวกับ Indexing/DB Tuning และถ้าจะ Backup ข้อมูลก็ต้องทำ Replication หรือ Job Schedule เพื่อ Backup ฐานข้อมูล และ เพิ่ม Storage เพื่อรองรับการเพิ่มของข้อมูล
ข้อ 2 เรื่องการ เพิ่มการรองรับ Con-Current ต่างๆ ก็ต้องเสริมด้วย หลักๆ ก็การเพิ่ม Caching + Tuning Session Data และสุดท้ายก็เพิ่ม Memory ให้กับ OS หรือ Application Server
ข้อ 3 เรื่องการ เพิ่มประสิทธิภาพก็พึงพา OS ล้วนๆ และ Framework ของแต่ละภาษา Programming เป็นหลัก (ระบบจัดการ File System ของแต่ละ OS)
ข้อ 4 ในส่วนนี้ก็เช่นเดียวกับข้อ 3 (ระบบจัดการ Network ของแต่ละ OS)
(โดยทุกข้อนั้นไม่นับการเสริมด้วยเทคนิคของ Hardware/Storage/Network)
และจากแนวทางเหล่านั้นสำหรับระบบที่ได้รับการออกแบบที่ต้องรองรับการใช้งานและจัดเก็บข้อมูลมากๆ เรื่องที่เรียกกันว่า Big Data นั้น จุดนึงที่แตกต่างในการออกแบบและพัฒนาระบบคือ
ไม่ใช้ การเข้าถึงและจัดเก็บข้อมูลแบบ Rational DB เป็นหลัก
ไม่ใช้ การเข้าถึงและจัดการข้อมูล Session ผ่าน Framework ของภาษาระบบงานเป็นหลัก
ไม่ใช้ การเข้าถึงและจัดการแฟ้มข้อมูลผ่าน OS เป็นหลัก
แต่ใช้หลักที่เรียกว่า " Polyglot Persistence "
http://youtu.be/qI_g07C_Q5I
ตอบลบLink เพิ่มเติมเพื่อความเข้าใจมากขึ้น