Tìm Hiểu Về Các Công Nghệ Backend Trong Thiết Kế Hệ Thống

Đồ án kỹ thuật nghiên cứu 2 tìm hiểu về các công nghệ backend, thiết kế chi tiết, tính toán kỹ thuật theo tiêu chuẩn, đánh giá tính khả thi dự án.

Chuyên ngành

Công Nghệ Thông Tin

Người đăng

Ẩn danh

Thể loại

Đồ Án Tốt Nghiệp

2023

134
2
0

Phí lưu trữ

35 Point

Mục lục chi tiết

1. Chương 1: Tổng quan về thiết kế hệ thống

1.1. Thiết kế trong các hệ thống nhỏ và trong các hệ thống lớn

1.1.1. Thiết kế trong hệ thống nhỏ

1.1.2. Thiết kế trong hệ thống lớn

1.2. Các nguyên lý thiết kế hệ thống

1.3. Các khái niệm về fault tolerance

1.3.1. Byzantine fault

2. Chương 2: Xây dựng hệ thống với . Services & Dependency injection

2.1. Thiết kế hệ thống lớn

3. Chương 3: Load balancer

3.1. Triển khai Load Balancer

3.1.1. Hardware Load Balancer

3.1.2. Software Load Balancer

3.2. Tăng availability của hệ thống

5. Chương 5: Distributed transactions

5.1. Tổng quan về transaction

5.2. Đảm bảo Tính nhất quán “Consistency” và Tính bền bỉ “Durability”

5.3. Đảm bảo Tính nguyên tử “Atomicity” và Tính độc lập “Isolation”

5.3.1. Tính nguyên tử (Atomicity)

5.3.2. Xác nhận 2 pha “2-Phase Commit” (2PC)

5.3.2.1. Xử lý lỗi của người tham gia
5.3.2.2. Blocking trong giao thức 2PC
5.3.2.3. Ứng dụng của giao thức 2PC

5.3.3. Xác nhận 3 pha “3-Phase Commit” (3PC)

5.3.3.1. Các vấn đề của 2PC
5.3.3.2. Giải quyết vấn đề của 2PC bằng 3PC
5.3.3.3. Lợi ích của 3PC
5.3.3.4. Lỗi phân mảnh mạng trong 3PC

5.4. So sánh Two-phase commit/Three-phase commit và Saga

6. Chương 6: Caching

6.1. Tổng quan về caching

6.2. Các pattern trong caching

6.2.1. Reverse Proxy Cache

6.2.2. Reverse Proxy Sidecar Cache

6.2.3. Read–aside caching

6.2.4. Write-aside caching

6.2.5. Write-around

7. Chương 7: Microservices

7.1. Miêu tả microservice

7.2. Các nguyên tắc cơ bản khi thiết kế hệ thống Microservices

7.3. Phương thức giao tiếp giữa các service

7.4. Khuyết điểm của microservice

8. Chương 8: Service discovery & API Gateway

8.1. Phân loại service discovery

8.2. Phân loại hình thức register

8.3. Đăng ký bên thứ ba (third-party registration)

8.4. Sử dụng service

8.5. Kiến trúc

9. Chương 9: Consensus

9.1. Định nghĩa về vấn đề Consensus

9.2. Bầu chọn leader

9.3. Thuật toán Raft

9.3.1. Khái quát về Raft

9.3.2. Giao tiếp giữa các nút Raft

9.3.2.1. Cơ chế giao tiếp
9.3.2.2. Sự phân kỳ giữa các nút
9.3.2.3. Giải quyết sự phân kỳ

9.3.3. Ưu và nhược điểm của Raft

10. Chương 10: Deployment

10.1. Multiple instance per host

10.2. Once instance per host

10.3. Kubernetes và Helm

10.4. Grafana

11. Chương 11: Demo và tổng kết

11.1. Tổng kết

Tài liệu tham khảo

Tóm tắt

I. Tổng Quan Về Các Công Nghệ Backend Trong Thiết Kế Hệ Thống

Thiết kế hệ thống backend là một phần quan trọng trong việc phát triển ứng dụng. Các công nghệ backend giúp xây dựng và duy trì các dịch vụ, đảm bảo rằng hệ thống hoạt động hiệu quả và đáp ứng nhu cầu của người dùng. Các công nghệ này bao gồm ngôn ngữ lập trình, framework, cơ sở dữ liệu và API. Việc lựa chọn công nghệ phù hợp sẽ ảnh hưởng lớn đến hiệu suất và khả năng mở rộng của hệ thống.

1.1. Các Ngôn Ngữ Lập Trình Backend Phổ Biến

Các ngôn ngữ lập trình như Java, Python, và Node.js thường được sử dụng trong phát triển backend. Mỗi ngôn ngữ có ưu điểm riêng, từ hiệu suất đến khả năng mở rộng. Việc lựa chọn ngôn ngữ phù hợp sẽ giúp tối ưu hóa quy trình phát triển và bảo trì hệ thống.

1.2. Các Framework Backend Thông Dụng

Framework như Express.js, Django, và Spring Boot cung cấp các công cụ và thư viện cần thiết để phát triển ứng dụng backend. Chúng giúp giảm thiểu thời gian phát triển và tăng cường tính bảo mật cho ứng dụng.

II. Vấn Đề Và Thách Thức Trong Thiết Kế Hệ Thống Backend

Thiết kế hệ thống backend không chỉ đơn thuần là lựa chọn công nghệ mà còn phải đối mặt với nhiều thách thức. Các vấn đề như hiệu suất, khả năng mở rộng và tính sẵn sàng là những yếu tố quan trọng cần được xem xét. Hệ thống cần phải xử lý hàng triệu yêu cầu đồng thời mà không gặp sự cố.

2.1. Thách Thức Về Hiệu Suất

Hiệu suất của hệ thống backend phụ thuộc vào khả năng xử lý của server và cách mà các dịch vụ tương tác với nhau. Việc tối ưu hóa mã nguồn và cấu hình server là cần thiết để đảm bảo hệ thống hoạt động mượt mà.

2.2. Khả Năng Mở Rộng Hệ Thống

Khả năng mở rộng là yếu tố quyết định cho sự phát triển bền vững của hệ thống. Hệ thống cần có khả năng mở rộng theo chiều ngang hoặc chiều dọc để đáp ứng nhu cầu ngày càng tăng của người dùng.

III. Phương Pháp Thiết Kế Hệ Thống Backend Hiệu Quả

Để thiết kế một hệ thống backend hiệu quả, cần áp dụng các phương pháp và kiến trúc hiện đại. Việc sử dụng microservices, API và cloud computing là những xu hướng phổ biến hiện nay. Những phương pháp này giúp tăng cường tính linh hoạt và khả năng mở rộng của hệ thống.

3.1. Microservices Trong Thiết Kế Backend

Microservices cho phép chia nhỏ ứng dụng thành các dịch vụ độc lập, giúp dễ dàng quản lý và phát triển. Mỗi dịch vụ có thể được phát triển và triển khai riêng biệt, tăng cường khả năng mở rộng và bảo trì.

3.2. Sử Dụng API Để Tăng Cường Tính Tương Tác

API là cầu nối giữa các dịch vụ trong hệ thống backend. Việc thiết kế API rõ ràng và dễ sử dụng sẽ giúp tăng cường tính tương tác và khả năng tích hợp với các hệ thống khác.

IV. Ứng Dụng Thực Tiễn Của Các Công Nghệ Backend

Các công nghệ backend không chỉ được áp dụng trong lý thuyết mà còn trong thực tiễn. Nhiều ứng dụng lớn như Facebook, Google và Amazon đều sử dụng các công nghệ backend tiên tiến để phục vụ hàng triệu người dùng. Việc áp dụng đúng công nghệ sẽ giúp cải thiện hiệu suất và trải nghiệm người dùng.

4.1. Ví Dụ Về Hệ Thống Backend Của Facebook

Facebook sử dụng một kiến trúc phức tạp với nhiều dịch vụ backend để xử lý hàng triệu yêu cầu mỗi giây. Hệ thống của họ được tối ưu hóa để đảm bảo tính sẵn sàng và hiệu suất cao.

4.2. Amazon Web Services Và Cloud Computing

Amazon Web Services (AWS) cung cấp các giải pháp cloud computing mạnh mẽ cho các doanh nghiệp. Việc sử dụng AWS giúp các công ty dễ dàng mở rộng và quản lý hạ tầng backend của họ.

V. Kết Luận Về Tương Lai Của Các Công Nghệ Backend

Tương lai của các công nghệ backend hứa hẹn sẽ tiếp tục phát triển với sự xuất hiện của các công nghệ mới như AI và machine learning. Những công nghệ này sẽ giúp tối ưu hóa quy trình phát triển và nâng cao trải nghiệm người dùng. Việc nắm bắt xu hướng công nghệ sẽ giúp các doanh nghiệp duy trì lợi thế cạnh tranh.

5.1. Xu Hướng AI Trong Backend

AI sẽ đóng vai trò quan trọng trong việc tối ưu hóa quy trình xử lý dữ liệu và cải thiện khả năng dự đoán. Việc tích hợp AI vào backend sẽ giúp nâng cao hiệu suất và tính chính xác của hệ thống.

5.2. Tương Lai Của Microservices

Microservices sẽ tiếp tục phát triển và trở thành xu hướng chủ đạo trong thiết kế hệ thống backend. Việc áp dụng microservices sẽ giúp tăng cường tính linh hoạt và khả năng mở rộng cho các ứng dụng.

10/07/2025
Đồ án 2 tìm hiểu về các công nghệ backend

Trích đoạn nội dung tài liệu

Chương 1: Tổng quan về thiết kế hệ thống Thiết kế hệ thống là quá trình định rõ các thành phần, cách chúng tương tác, các giao diện lập trình ứng dụng (APIs), và mô hình dữ liệu để xây dựng các hệ thống với quy mô lớn, đáp ứng đầy đủ yêu cầu chức năng và phi chức năng. Trong quá trình thiết kế hệ thống, chúng tôi tận dụng các khái niệm từ lĩnh vực mạng máy tính, tính toán song song, và hệ thống phân tán để xây dựng những hệ thống có khả năng mở rộng và hiệu suất cao. thêm tính năng mới mà không làm ảnh hưởng đến tính ổn định và hiệu suất. Mục tiêu chính của thiết kế hệ thống là tạo ra những hệ thống hiệu quả, đáng tin cậy và dễ bảo trì.

Hệ thống hiệu quả là những hệ thống linh hoạt, có khả năng đáp ứng đầy đủ nhu cầu của người dùng và doanh nghiệp. Hệ thống đáng tin cậy được xây dựng với khả năng xử lý lỗi, sự cố và sai sót. Hệ thống dễ bảo trì là những hệ thống linh hoạt, dễ mở rộng hoặc thu nhỏ, và có khả năng 1. Thiết kế trong các hệ thống nhỏ và trong các hệ thống lớn 1.

Thiết kế trong hệ thống nhỏ Với những hệ thống nhỏ và tương đối đơn giản, quá trình thiết kế và kiến trúc không gặp nhiều phức tạp. Những hệ thống này thường dễ tổ chức, vận hành, và bảo trì, đồng thời không có quá nhiều thành phần phức tạp. Đối với những hệ thống này, có nhiều mô hình phát triển phần mềm phù hợp với yêu cầu cụ thể của chúng. Các kiến trúc như client-server, layer, monolithic đều là những lựa chọn linh hoạt, phản ánh sự đa dạng trong cách triển khai mô hình phần mềm.

Việc sử dụng các mô hình như client-server giúp tách biệt giữa phần giao diện người dùng và phần xử lý logic, giảm sự phức tạp và tăng tính linh hoạt. Kiến trúc layer thường được ưa chuộng với những hệ thống có nhiều tầng chức năng, giúp quản lý và phát triển một cách hiệu quả. Trong khi đó, kiến trúc monolithic, mặc dù đơn giản, nhưng lại thích hợp cho những ứng dụng nhỏ với quy mô và yêu cầu thấp. Tổng cộng, sự linh hoạt trong lựa chọn kiến trúc giúp phát triển những hệ thống nhỏ một cách hiệu quả, tùy thuộc vào yêu cầu cụ thể và quy mô của dự án.

Hình 1: Kiến trúc Layer Hình 2: Kiến trúc monolithic Hình 3: Kiến trúc Client-Server Một điểm chung của các loại kiến trúc này là chúng đều sử dụng mô hình tập trung, điều này mang lại một số thách thức cụ thể: Về Hiệu Suất: Các hạn chế về vật lý của phần cứng như việc nâng cấp CPU, RAM, hay ổ cứng đặt ra giới hạn đối với một máy chủ cụ thể. Đối với các hệ thống lớn, có mô hình nghiệp vụ phức tạp và số lượng người sử dụng lớn, các mô hình kiến trúc trên có thể gặp khó khăn trong việc cung cấp dịch vụ một cách kịp thời, chính xác, và ổn định. Nâng cấp hiệu suất của một máy chủ đơn lẻ trở nên đắt đỏ sau một ngưỡng nhất định. Về Mở Rộng: Quản lý và xử lý dữ liệu đóng góp vào giá trị của hệ thống phần mềm.

Khi lượng khách hàng tăng, hệ thống phải xử lý thêm lưu lượng và lưu trữ lượng dữ liệu lớn hơn. Tuy nhiên, hệ thống chỉ dựa vào một máy chủ duy nhất sẽ đạt đến giới hạn mở rộng. Về Sẵn Sàng: Dịch vụ trực tuyến ngày nay yêu cầu hoạt động liên tục (24/7), điều này là một thách thức đối với các hệ thống. Đối với các dịch vụ đặt ra yêu cầu về "sẵn sàng" 5-9, tức là hoạt động 99.999% thời gian, hệ thống tập trung trên một máy chủ sẽ gặp khó khăn khi phải đối mặt với hàng nghìn, hàng chục nghìn, thậm chí triệu yêu cầu cùng lúc.2 Thiết kế trong hệ thống lớn Để giải quyết các vấn đề của những hệ thống nhỏ, việc thiết kế hệ thống lớn cần phải áp dụng những kiến trúc phức tạp, đặc biệt hơn để đáp ứng nhu cầu chịu tải lớn, đảm bảo độ ổn định, độ chính xác và có khả năng chịu lỗi.

Một hệ thống có các nhu cầu trên thông thường sẽ sử dụng nhiều server, mỗi server song song chạy chương trình và nhiều cơ sở dữ liệu để đáp ứng nhu cầu lưu trữ. Thiết kế hệ thống hiện đại với Khối Xây Dựng (Building Blocks) Trong thiết kế hệ hiện đại, những thành phần thiết kế cơ bản như cân bằng tải (Load balancer) sẽ được tách ra thành các khối xây dựng cơ bản (Building block). Điều này phục vụ cho 2 mục đích: Thứ nhất, có thể thảo luận về tất cả khối xây và các vấn đề thiết kế của chúng. Thứ hai, khi giải quyết một vấn đề thiết kế, có thể tập trung vào các khía cạnh cụ thể của vấn đề, đề cập đến các khối xây dựng nhất định và cách sử dụng chúng.

Điều này giúp loại bỏ các cuộc thảo luận trùng lặp về các yếu tố thiết kế thường xuyên xảy ra. Chi tiết 16 khối xây dựng: 1. Hệ thống tên miền (Domain Name System: DNS): Khối này tập trung vào cách thiết kế các hệ thống đặt tên phân cấp và phân tán cho các máy tính được kết nối với Internet thông qua các giao thức Internet khác nhau. Bộ cân bằng tải (Load Balancers): Khối này được sử dụng để phân phối cân bằng các yêu cầu đến từ khách hàng đến một nhóm máy chủ có sẵn.

Nó cũng giảm tải và có thể bỏ qua các máy chủ khi gặp sự cố. Cơ sở dữ liệu (Databases): Khối này cho phép lưu trữ, truy xuất, sửa đổi và xóa dữ liệu liên quan đến các thủ tục xử lý dữ liệu khác nhau như là các loại cơ sở dữ liệu, sao chép, phân vùng và phân tích của cơ sở dữ liệu phân tán. Bộ lưu trữ Khóa-Giá trị (Key-Value store): Khối này là cơ sở dữ liệu phi quan hệ, cho phép lưu trữ dữ liệu dưới dạng cặp khóa-giá trị. Mạng phân phối nội dung (Content Delivery Network: CDN): Khối này được sử dụng để lưu trữ nội dung lan truyền như video, hình ảnh, âm thanh và trang web.

Nó hiệu quả trong việc phân phối nội dung cho người dùng cuối mà vẫn giảm thiểu độ trễ và gánh nặng cho các dữ liệu trung tâm. Bộ tạo số thứ tự (Sequencer): Khối này được dùng để tạo số ID duy nhất. Bảng giám sát dịch vụ (Service Monitoring): Khối này quan trọng trong các hệ thống phân tán chúng giúp phân tích hệ thống và cảnh báo cho các bên liên quan nếu xảy ra vấn đề. Bộ đệm phân tán (Distributed Caching): Khối này là một hệ thống đệm phân tán trong đó nhiều máy chủ đệm phối hợp để lưu trữ dữ liệu được truy cập thường xuyên.

Hàng đợi tin nhắn phân tán (Distributed Messaging Queue): Khối này là một hệ thống hàng đợi tin nhắn phân tán bao gồm nhiều máy chủ, được sử dụng giữa các thực thể tương tác được gọi là nhà sản xuất và người tiêu dùng. Nó giúp tách biệt nhà sản xuất và người tiêu dùng, đảm bảo tính mở rộng độc lập và cải thiện độ tin cậy. Hệ thống xuất bản-đăng ký (Publish-Subscribe System): Khối này là một phương pháp giao tiếp không đồng bộ giữa các dịch vụ. Hệ thống này được phổ biến trong kiến trúc serverless, microservices và hệ thống xử lý dữ liệu.

Bộ giới hạn tốc độ (Rate Limiter): Khối này là hệ thống giới hạn số lượng yêu cầu đến cho một dịch vụ dựa trên giới hạn được xác định trước. Hệ thống này thường được sử dụng như một lớp phòng thủ cho các dịch vụ để tránh việc sử dụng quá mức - có ý định hoặc không có ý định. Bộ lưu trữ đối tượng (Blob Store): Khối này được dùng để lưu trữ các dữ liệu phi cấu trúc, ví dụ như các tệp đa phương tiện và các tệp nhị phân. Bộ tìm kiếm phân tán (Distributed Search): Khối này là một hệ thống tìm kiếm lấy truy vấn của người dùng và trả về một nội dung liên quan trong một vài giây hoặc ít hơn.

Khối này tập trung vào 3 thành phần quan trọng: thu thập (crawl), chỉ mục hóa (index) và tìm kiếm (search). Bộ ghi log phân tán (Distributed Logging): Khối này là hệ thống cho phép các dịch vụ trong một hệ thống phân tán ghi lại sự kiện của họ một cách hiệu quả. Hệ thống sẽ được thiết kế để có khả năng mở rộng và đáng tin cậy. Bộ lập lịch công việc phân tán (Distributed Task Scheduling): Khối này là hệ thống trung gian giữa công việc và tài nguyên.

Hệ thống sẽ phân bổ tài nguyên một cách hiệu quả cho các nhiệm vụ để đáp ứng các mục tiêu cấp nhiệm vụ và cấp hệ thống, thường được sử dụng để giảm bớt xử lý nền để hoàn thành bất đồng bộ. Bộ đếm phân tán (Sharded Counters): Khối này được sử dụng để xử lý hàng triệu yêu cầu đọc/viết đồng thời, như số lượt thích trên một bài viết của người nổi tiếng trên mạng xã hội. Ví dụ về một hệ thống lớn “Youtube” Đầu tiên, xác định các yêu cầu của Youtube ● Yêu cầu về chức năng: ● Stream videos ● Upload videos ● Search videos according to titles ● Like and dislike videos ● Add comments to videos ● View thumbnails Yêu cầu về phi chức năng: ● Tính sẵn sàng cao (High availability): Đây là tính chất quan trọng của hệ thống, đòi hỏi hệ thống luôn sẵn sàng hoạt động. Hệ thống phải đảm bảo một tỷ lệ thời gian hoạt động (uptime) cao.

Thông thường, một tỷ lệ uptime từ 99% trở lên được coi là tốt. ● Khả năng mở rộng (Scalability): Để đáp ứng sự tăng trưởng về số lượng người dùng, hệ thống cần đảm bảo rằng các vấn đề như lưu trữ dữ liệu, băng thông yêu cầu cho việc xem dữ liệu đồng thời, và số lượng yêu cầu từ người dùng đồng thời không gây ra sự kẹt trệ (bottleneck) trong ứng dụng hoặc máy chủ web của chúng ta. ● Hiệu suất tốt (Good performance): Việc cung cấp trải nghiệm xem video mượt mà đóng vai trò quan trọng trong việc cải thiện tổng thể hiệu suất của hệ thống. ● Độ tin cậy (Reliability): Dữ liệu được tải lên hệ thống phải được bảo vệ và không được mất mát hoặc bị hỏng.

Điều này đảm bảo rằng thông tin quý báu của người dùng không bị ảnh hưởng bởi sự cố hoặc lỗi hệ thống. Bây giờ là các khối xây dựng (Building block) được xác định trong hệ thống Youtube Databases (Cơ sở dữ liệu): Cơ sở dữ liệu cần được sử dụng để lưu trữ thông tin về video, hình thu nhỏ, bình luận và thông tin liên quan đến người dùng.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ