Chương 1: GIỚI THIỆU ĐỀ TÀI 1. Động lực nghiên cứu Trong bối cảnh Internet ngày càng được nhiều người dùng trên toàn thế giới sử dụng, vì vậy các ứng dụng trên toàn thế giới phải phát triển và xây dựng thành nhiều mô hình hệ thống mới và có khả năng đáp ứng số lượng nhu cầu người dùng lớn. Spring Boot là sự lựa chọn phù hợp để xây dựng các mô hình hệ thống vì độ phổ biến rộng rãi trong cộng đồng phát triển phần mềm. Nền tảng mạnh mẽ và linh hoạt của Spring Boot giúp tối ưu hiệu suất, dễ dàng triển khai ứng dụng và cung cấp công cụ hỗ trợ đáng tin cậy.
Khả năng học hỏi liên tục từ cộng đồng và tiềm năng việc làm cao làm cho việc nghiên cứu và áp dụng Spring Boot mang lại lợi ích lớn, đặc biệt là khi cung cấp kiến thức và kỹ năng cần thiết cho ngành công nghiệp công nghệ thông tin ngày càng đòi hỏi. Mục tiêu và phạm vi nghiên cứu Mục tiêu: - Nắm rõ cấu trúc, kiến thức về các thành phần trong Spring Boot. - Xây dựng ứng dụng đơn giản áp dụng kiến trúc Microservice với Spring Boot. Phạm vi: - Tìm hiểu các thành phần trong Spring Boot.
- Tìm hiểu và phân tích các thành phần của kiến trúc Microservice. Tóm tắt đồ án Thiết kế hệ thống với các định nghĩa các thành phần và cách tích hợp chúng, các giao diện lập trình ứng dụng (APIs), và mô hình dữ liệu (data model) để xây dựng kiến trúc Microservice đáp ứng các yêu cầu về chức năng và phi chức năng. Xây dựng ứng dụng áp dụng kiến trúc Microservice có độ tin cậy (reliable), hiệu quả, và dễ bảo trì cùng với những đặc điểm khác. Bố cục báo cáo Phần còn lại của báo cáo được trình bày theo bố cục sau: Chương 2 – Thiết kế hệ thống Chương 3 – Bộ cân bằng tải Chương 4 – Cơ sở dữ liệu Chương 5 – Giao dịch phân tán 1 Chương 6 – Bộ nhớ đệm Chương 7 – Service Discovery & API Gateway Chương 8 – Consensus Chương 9 – Deployment Chương 10 – Thiết kế và xây dựng hệ thống với Spring Boot Chương 11 – Demo và tổng kết 2 Chương 2: THIẾT KẾ HỆ THỐNG 2.
Tổng quan về thiết kế hệ thống Thiết kế hệ thống sử dụng các khái niệm trong lĩnh vực mạng máy tính (Computer Networking), tính toán song song (Parallerl Computing) và hệ thống phân tán (Distributed systems) để xây dựng những hệ thống có khả năng mở rộng và hiệu suất cao.1: Thiết kế hệ thống Thiết kế hệ thống có mục đích xây dựng những hệ thống có độ tin cậy (reliable), hiệu quả, và dễ bảo trì cùng với những đặc điểm khác. - Hệ thống hiệu quả là hệ thống đáp ứng tất cả các nhu cầu của người dùng và yêu cầu kinh doanh. - Hệ thống đáng tin cậy là hệ thống có khả năng xử lý lỗi, sự cố và sai sót. - Hệ thống dễ bảo trì là hệ thống linh hoạt và dễ dàng mở rộng hoặc thu nhỏ.
Khả năng thêm tính năng mới cũng nằm trong phạm vi của tính dễ bảo trì. Các nguyên lý thiết kế hệ thống 2. Tính mở rộng – Scalability 3 Scalability là khả năng mở rộng của hệ thống quy trình hay mạng lưới với nhu cầu gia tăng về số lượng công việc tăng theo thời gian của mô hình kinh doanh. Mô hình kinh doanh có thể mở rộng quy mô vì nhiều lý do như: - Gia tăng khối lượng dữ liệu lưu trữ.
- Gia tăng về số lượng yêu cầu và khối lượng công việc. Ví dụ: số lượng truy cập hay đặt hàng của một hệ thống thương mại điện tử. Và yêu cầu của sự mở rộng phải đạt được nhu cầu này mà không làm giảm hiệu suất, nói chung Scalability là đáp ứng được sử mở rộng hay giảm theo kích thước của hệ thống theo thời gian. Có hai dạng scaling là mở rộng theo chiều ngang (vertical scaling) và mở rộng theo chiều dọc (horizontal scaling).
- Tính mở rộng theo chiều dọc (Vertical scaling/ Scaling Up): là cách mở rộng server hiện tại bằng cách nâng cấp độ mạnh (power) bằng cách nâng cấp CPU, Ram, Storage, v.v… Vertical-scaling cho phép chúng ta mở rộng năng xuất của phần cứng và phần mềm, nhưng thường bị giới hạn bởi giới hạn về cấu hình vật lý hiện đại hay độ trễ khi “chẳng may” Server bị downtime để nâng cấp hay triển khai hệ thống. Chi phí cho việc vertical scaling thường đắt đỏ. - Tính mở rộng theo chiều ngang (Horizontal Scalability/ Scaling Out): Horizontal scalability là một phương pháp mở rộng hệ thống bằng cách tăng số lượng máy chủ hoặc nodes trong mạng. Nó còn được gọi là "scaling out." Phương pháp này đối phó với việc gia tăng tải lên hệ thống bằng cách thêm nhiều máy chủ hoặc nodes khác nhau vào mạng.
Horizontal scalability tập trung vào việc mở rộng hệ thống mà không cần tăng cường cấu trúc của máy chủ hiện tại.2: Minh họa mở rộng theo chiều dọc và ngang Song, horizontal scaling cũng phức tạp hóa mô hình kiến trúc của hệ thống do phải điều phối hoạt động của nhiều server riêng biệt và vận hành như một bộ máy duy nhất. Kiến trúc này được biết đến với tên gọi Hệ thống phân tán (Distributed system) và là cơ sở cho ra đời một họ các mô hình kiến trúc sau này như Distributed monolith, Microservices,. cùng với đó là rất nhiều vấn đề cực kỳ phức tạp và khó giải quyết khác. Khi nhắc đến scalability, hầu hết ta luôn muốn nói đến khả năng horizontal scaling của hệ thống.
Tính khả dụng – Availability Tính khả dụng là một chỉ số đo lường phần trăm thời gian mà một dịch vụ hoặc một hệ thống nào đó có thể truy cập được bởi khách hàng và hoạt động trong điều kiện bình thường. Nó đo lường mức độ hoạt động và xử lý của hệ thống ở trạng thái bình thường trong suốt một khoảng thời gian nhất định. Chẳng hạn, nếu một dịch vụ có khả dụng 100%, điều đó có nghĩa rằng dịch vụ đó luôn sẵn sàng hoạt động, xử lý và phản hồi các yêu cầu. Cách tính toán tính khả dụng Trong toán học, tính khả dụng A được biểu thức dưới dạng tỉ lệ.
Tỉ lệ A càng cao càng tốt. Chúng ta cũng có thể biểu thức điều này bằng một công thức: 5 Chúng ta đo lường mức độ khả dụng (availability) bằng cách sử dụng số lượng "9" Cụ thể, số lượng "9" thể hiện mức độ chính xác của khả dụng và cho biết bao nhiêu thời gian ngừng hoạt động được phép trong khoảng thời gian nhất định. Dưới đây là một bảng thể hiện mức độ khả dụng tương ứng với số lượng "9" và thời gian ngừng hoạt động được phép: Hình 2.3: Bảng mức độ khả dụng 2. Tính tin cậy – Reliability Độ tin cậy đề cập đến khả năng của dịch vụ hoặc hệ thống thực hiện các chức năng của nó trong một khoảng thời gian cụ thể mà không gặp sự cố hoặc gián đoạn.
Điều này có nghĩa rằng độ tin cậy đo lường xem dịch vụ hoạt động đáng tin cậy như thế nào dưới các điều kiện hoạt động khác nhau. Chúng ta thường sử dụng MTBF và MTTR như một thông số để đo lường độ tin cậy.4: Công thức tính các thông số đo lường Một hệ thống có độ tin cậy cao khi có giá trị MTBF cao và MTTR thấp Độ tin cậy và tính sẵn sàng là hai chỉ số quan trọng để đo lường sự tuân thủ của dịch vụ dựa trên Service Level Objectives - SLO. Đo lường tính khả dụng (availability) dựa vào thời gian mất mát, trong khi tần suất và tác động của các sự cố dùng để đo lường tính đáng tin cậy (reliability). Cả tính sẵn sàng và tính đáng tin cậy đều quan trọng vì chúng cho phép các bên liên quan đánh giá tình trạng và khả năng hoạt động của dịch vụ.
Độ tin cậy (Reliability - R) và tính khả dụng (Availability - A) là hai khái niệm riêng biệt, nhưng chúng có mối quan hệ. Trong toán học, tính sẵn sàng (A) là một hàm số của độ tin cậy (R). Điều này có nghĩa rằng giá trị của R có thể thay đổi độc lập và giá trị của A phụ thuộc vào R. Do đó, có thể xảy ra tình huống mà: - A thấp, R thấp - A thấp, R cao - A cao, R thấp - A cao, R cao (mong muốn) 7 Hình 2.5: Biểu đồ phụ thuộc giữa tính khả dụng và tính tin tưởng 2.
Tính bảo trì – Maintainability Tính bảo trì (Maintainability), ký hiệu là M, là xác suất mà dịch vụ sẽ khôi phục lại các chức năng của nó trong một khoảng thời gian cụ thể sau khi xảy ra lỗi. M đo đo lường khả năng của dịch vụ làm cho mình trở lại tình trạng hoạt động bình thường một cách thuận tiện và nhanh chóng. Khả năng bảo trì mang lại cho chúng ta cái nhìn về khả năng của hệ thống để trải qua quá trình sửa chữa và chỉnh sửa trong khi nó đang hoạt động. Ví dụ, giả sử một thành phần có giá trị bảo trì được xác định là 95% trong vòng nửa giờ.
Trong trường hợp này, xác suất khôi phục thành phần về trạng thái hoạt động hoàn toàn trong nửa giờ là 0,95. Chúng ta sử dụng mean time to repair (MTTR) như là chỉ số để đo lường M.6: Công thức tính toán thời gian trung bình để sữa chửa Trong đó: - Mean Time To Repair: Thời gian trung bình để sửa chữa - Total Maintenance Time: Tổng thời gian bảo trì - Total Number of Repairs: Tổng số lượng sửa chữa Nói cách khác, MTTR là thời gian trung bình cần thiết để sửa chữa và khôi phục một thành phần bị lỗi. Mục tiêu của chúng ta là có giá trị MTTR thấp nhất có thể. Tính nhất quán – Consistency Tính nhất quán (Consistency) là một thuộc tính quan trọng trong hệ thống phân tán, đảm bảo rằng tất cả các máy chủ (server) trong cụm (cluster) luôn duy trì cùng một trạng thái và dữ liệu vào một thời điểm cố định, bất kể client nào đã thực hiện cập nhật dữ liệu.
Tính nhất quán cao có nghĩa là hệ thống phân tán sẽ đồng thuận đến một trạng thái duy nhất và cho phép client luôn đọc được dữ liệu mới nhất. Tính nhất quán của hệ thống phụ thuộc vào việc nó tuân theo định lý CAP – định lý nêu rằng một hệ thống phân tán (distributed system) không thể thỏa mãn cả ba yếu tố CAP: - Consistency: Tính nhất quán, các máy chủ trong một hệ thống phải có dữ liệu đồng nhất. - Availability: Khả năng sẵn sàng, hệ thống vẫn hoạt động được khi một số máy chủ bị chết hoặc không sẵn sàng.