System Design คืออะไร?

System Design คือกระบวนการออกแบบสถาปัตยกรรมและองค์ประกอบ (Architecture & Components) ที่เกี่ยวข้องกับ Software System ให้สอดคล้องกับความต้องการที่เฉพาะเจาะจงของธุรกิจและผู้ใช้งาน โดยในกระบวนการนี้จะประกอบด้วยการออกแบบสถาปัตยกรรมของระบบ องค์ประกอบที่เกี่ยวข้อง โมดูลต่าง ๆ ที่ต้องใช้เพื่อให้ระบบสามารถทำงานได้ตาม Requirements ไปจนถึงหน้า Interface ในการใช้งานและรวมถึง Technology ต่าง ๆ ที่จะต้องใช้ในการ Implement ระบบ

Components of System Design

Component ของ System Design นั้นหมายถึงส่วนประกอบต่าง ๆ ที่รวมกันอยู่ในการออกแบบระบบ โดยประกอบไปด้วย

  1. Load Balancer
  2. Key Value Store
  3. Blob Storage & Databases
  4. Rate Limiters
  5. Monitoring System
  6. Distributed System Messaging Queue
  7. Distributed Unique ID Generator
  8. Distributed Search
  9. Distributed Logging Services
  10. Distributed Task Scheduler

1. Load Balancer

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

Layer 4 Load Balancers จะทำงานที่เลเยอร์ของ Network ของ OSI Model (Open Systems Interconnection เครือข่ายสื่อสารสำหรับระบบด้วยกันเอง) โดยจะกระจาย Request ที่เข้ามาตามแหล่งที่มา Destination IP Address และ Port ของ Request

Layer 7 Load Balancers ทำงานที่ Application Layer โดยจะกระจาย Request ตามเนื้อหาของมันเช่น URL หรือประเภทของ HTTP Method ที่ใช้

Global Load Balancers กระจาย Request ที่เข้ามาไปยังเครื่องเซิฟเวอร์ต่าง ๆ ตามภูมิภาค

Application Load Balancers ออกแบบมาเพื่อทำงานกับ Application หรือ Protocols เฉพาะทาง ตัวอย่าเช่น HTTP หรือ HTTPS

2. Key-Value Stores

เป็นประเภทของการเก็บข้อมูลใน NoSQL Databases ที่จะเก็บข้อมูลในรูปแบบของคู่ Key-Value โดยที่ Key คือตัวระบุถึงข้อมูล ส่วน Value ก็คือตัวข้อมูล โดยการเก็บข้อมูลลักษณะนี้จะใช้กับข้อมูลที่ถูกเรียกใช้งานบ่อย ๆ เนื่องจากมันสามารถเข้าถึงข้อมูลได้อย่างรวดเร็วโดยคีย์

ประเภทของการเก็บข้อมูลแบบ Key-Value นั้นมีทั้ง In-Memory ที่เน้นไปที่การใช้งานเพื่อความรวดเร็วชั่วคราว และ Key-Value ที่เก็บบน Disk หรือ Distributed File System สำหรับเก็บแบบระยะยาว สามารถนำการเก็บข้อมูลแบบ Key-Value ไปใช้ได้ทั้งกับ Caching, Session Management และ Real-Time Analytics

และการเก็บข้อมูลลักษณะนี้โดยทั่วไปแล้วจะง่ายต่อการทำ Scalable มากกว่าฐานข้อมูลประเภทอื่น ๆ แต่ก็จะไม่เหมาะนักกับการเก็บข้อมูลที่มีโครงสร้างซับซ้อนและต้องการความสามารถในการ Query ขั้นสูง

3. Blob Storage & Databases

Blob Storage และ Database Systems นั้นต่างก็เป็นประเภทของ Storage System ที่ไว้ใช้เก็บข้อมูลและจัดการ โดยที่ทั้งสองอย่างนี้สามารถใช้งานร่วมกันได้ใน Distributed System เพื่อช่วยกันจัดการประเภทของข้อมูลที่หลากหลาย

Blob Storage หรือ Object Storage ออกแบบมาเพื่อเก็บข้อมูลจำพวก Unstructured Data อย่างเช่น เอกสาร, รูปภาพ, วิดีโอ, ไฟล์เสียง เป็นต้น โดยปกติแล้ว Blob Storage สามารถที่จะ Scalable ได้และรองรับ Request ที่เข้ามาอย่างต่อเนื่องได้

Database Systems ออกแบบมาเพื่อเก็บข้อมูลประเภทที่มีโครงสร้างและจัดเก็บอย่างมีรูปแบบเฉพาะ โดยจะแยกเป็น relational database management systems (RDBMS), NoSQL databases, และ in-memory databases.

4. Rate Limiters

คือการกำหนดอัตราการใช้งานสูงสุดของการ Request ในการดำเนินการบางอย่างไม่ให้มีมากเกินไปในช่วงเวลาที่กำหนด ออกแบบมาเพื่อป้องกันการ Overload ของระบบจากการที่ Request มากเกินไปและป้องกันผู้ใช้งานที่มีการ Request เยอะจนผิดปกติจนส่งผลกระทบต่อระบบได้ ตัวอย่างของ Rate Limiters ทั่วไป

Request Rate Limiters ใช้สำหรับกำหนดจำนวน Request สูงสุดในช่วงเวลาที่กำหนด

Action Rate Limiters ใช้สำหรับจำกัดจำนวนครั้งที่สามารถดำเนินการได้ภายในเวลาที่กำหนด

User Rate Limiters ใช้สำหรับจำกัดจำนวนที่จะ Request มายังระบบได้ตามประเภทของ User

Token Bucket Rate Limiters จำกัดจำนวนการ Request ของระบบไว้ภายในช่วงเวลาที่กำหนด โดยส่วนที่เกินออกมานั้นจะเก็บรวมกันไว้รอดำเนินการในช่วงถัดไป

5. Monitoring System

ออกแบบมาเพื่อเก็บรวบรวม วิเคราะห์ และรายงานผลประสิทธิภาพต่าง ๆ ตามที่กำหนดเมทริกซ์ไว้ สิ่งนี้จะทำให้เราสามารถติดตามการทำงานของระบบได้ว่าระบบทำงานได้ตามที่กำหนดไว้จริงหรือไม่ ตัวอย่างของ Monitoring System ทั่วไป

Network Monitoring System ไว้ติดตามประสิทธิภาพของระบบเครือข่ายเช่น Routers, Switches, และ Servers

System Monitoring Systems ใช้สำหรับรายงานประสิทธิภาพของ CPU, Memory, และ Disk Usage เป็นต้น

Application Monitoring Systems ใช้สำหรับรายงานประสิทธิภาพของ Web Server และ Databases เป็นต้น

Infrastructure Monitoring Systems ใช้สำหรับรายงานประสิทธิภาพของเครื่องที่รันระบบของเราอยู่ เช่น Virtual Machines หรือ Containers

6. Distributes System Messaging Queue

ในกรณีที่ระบบของเรานั้นมีเครื่องจำนวนมากที่จะต้องทำงานร่วมกันในระบบเพื่อให้สามารถดำเนินการบน Request จำนวนมากได้นั้น แต่ละเครื่องจำเป็นจะต้องสื่อสารกันเพื่อแบ่งงาน โดยแต่ละ Node จะทำงานเป็นอิสระแยกออกเป็นผู้รับและผู้ส่ง โดยมีประเภทของ Messaging Queue เป็น

Point-to-Point Queues ข้อความจะถูกส่งไปยังผู้รับที่ถูกกำหนดไว้

Publish-Subscribe Queues ข้อความจะถูกส่งไปยังหัวข้อที่กำหนดและภายใต้หัวข้อนั้นจะมีกลุ่มของผู้รับอยู่

Hybrid Queues เป็นแบบผสมระหว่าง 2 อย่างข้างต้น

Messaging Queue ยังสามารถนำมาใช้กับ Components ของระบบได้ด้วยเช่น Microservices หรือ Distributed Application ซึ่งจะช่วยให้แต่ละ Component ทำงานแยกจากกันได้ช่วยเพิ่มความยืดหยุ่นให้กับระบบและง่ายต่อการทำ Scalability ตัวอย่าง Tools และ Framework เช่น Apache Kafka, RabbitMQ, Amazon Simple Queue Service

7. Distributed Unique ID Generator

ใช้สำหรับสร้าง Unique ID ในการระบุถึง Object หรือ Entity ใน Distributed System โดยทั่วไปแล้วใช้ระบุถึงไอเทมในฐานข้อมูลหรือทรัพยากรที่เข้าถึงได้ในเครือข่ายของระบบ ตัวอย่างการ Distributed Unique ID เช่น Centralized Service, Distributed Consensus Algorithm, Timestamps

8. Distributes Search

คือการใช้งานเครื่องหลาย ๆ เครื่องในการจัดกลุ่มและค้นหาชุดข้อมูลขนาดใหญ่ใน Distributed Systems เพื่อเพิ่มประสิทธิภาพในการค้นหาและ Scalability โดยมีวิธีการ Implement ระบบค้นหานี้เช่น

Distributed Search Engine จะเป็นการเพิ่มจำนวนเครื่องที่ใช้ในการค้นหา ระบบจะกระจาย Index ของข้อมูลที่กำลังค้นหาเพื่อให้สามารถดำเนินการค้นหาพร้อมกันแบบคู่ขนานได้เช่น Elasticsearch, Apache Solr

Database with Search Capabilities เช่น MongoDB และ Cassandra พวกนี้จะมีระบบการทำ Indexing และ Search หาข้อมูลในฐานข้อมูลอยู่แล้ว

Cloud-Based Search Service เช่น Amazon Elasticsearch Service และ Google Cloud Search

9. Distributed logging services

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

10. Distributes task scheduler

ใช้สำหรับการกำหนดช่วงเวลาให้รันงานบางอย่างโดยอัตโนมัติภายใน Distributed System โดยอาจจะเป็นกำหนดการแบบปกติหรือเป็นช่วงเวลาที่เฉพาะเจาะจงก็ได้ ซึ่งก็มีทั้งแบบ Standalone, Built-in หรือ Cloud-base ให้เลือกใช้สำหรับ Task Scheduler ควรจะเลือกให้เหมาะสมกับ Requirements ที่ต้องการ

Joby_Aviation_1

Flying Cars – Joby Aviation

Flying Cars นี้คิดค้นโดยบริษัท Joby Aviation มีจุดเริ่มต้นจากความคิดของ Bevirt ที่อยากให้มีเครื่องบินที่สามารถบินขึ้งลงได้เหมือนเฮลิคอปเตอร์
apple

iPhone 12 – Apple

Apple เพิ่งตัว Apple Watchs นาฬิการุ่นใหม่สองรุ่นเมื่อเดือนที่แล้วแต่ก็ยังไม่เสร็จสิ้นในการเปิดตัวผลิตภัณฑ์ใหม่สำหรับ iPhone 12 เผย 13 ต.ค.
Logo FB-1.1

Deep Learning & Neural Networks

วิธีการเรียนรู้ขั้นสูงของคอมพิวเตอร์ Deep Learning สิ่งนี้มีการคิดที่ซับซ้อนกว่า ML ทั่วไปหรือเรียกได้ว่าเป็นวิธีการที่ใช้สร้าง ML อีกทีก็ว่าได้

ติดตาม SUBBRAIN ได้ที่นี่

Categories: Data&IT