Chương 1: Tìm hiểu một số công nghệ liên quan 1. Công nghệ sử dụng cho lập trình Backend 1.Kiến trúc hệ thống Microservices 1. Tông quan le) ° Clients I e 7 sees _ API Gateway FT NỈ <<. 1 1 k | 1 8 : © 1 h 1 i oo— oo— oo— eo— oo— oo- oo- so- s.= oe Mircroservice Mircroservice Mircroservice Mircroservice Mircroservice ° v: v: v: v: Ỷ.
«av> middleware middleware.io Hình 1: Kiên trúc Microservices Microservices là một kiến trúc hệ thông bao gồm một tập hợp những dịch vu đã được chia nhỏ và tồn tại độc lập với các dịch vụ khác trong hệ thống. Mỗi dịch vụ đảm nhiệm một chức năng duy nhất dé thực hiện một nghiệp vụ cụ thể của hệ thống. Microservice được chia rất nhỏ, độc lập và ít phụ thuộc với nhau nên có thể đơn giản được viết và vận hành bởi những nhóm lập trình nhỏ. Chính vì lý do đó, một nhóm phát triển có thé cập nhật dich vụ của nhóm mình mà không ảnh hưởng hay phải triển khai lại toàn bộ các dịch vụ khác đã tồn tại của hệ thống.
Trong kiến trúc Microservices, mỗi dịch vụ có thé được triển khai bằng các ngôn ngữ, cơ sở dir liệu khác nhau. Trong đó, các dich vụ chỊu trách nhiệm quan NGUYEN THANH SÁNG - DI17CNPM0I Đồ án tốt nghiệp ly va bảo toàn dữ liệu của từng dich vụ đó, tránh sự phụ thuộc dữ liệu ở tầng dữ liệu nhưng theo đó sẽ có những khó khăn đi kèm trong việc thiệt kê. Kiên trúc Microservice bao gôm 3 nguyên tac thiệt kê sau: Single purpose: Mỗi dich vụ nên tập trung vào một mục đích cụ thể và thực hiện nó thật tốt. Nếu trong thiết kế không đáp ứng được nguyên tắc này, một dịch vụ làm quá nhiều tác vụ cũng lúc, điều đó biến hệ thống được phát triên theo cách tạo ra rat nhiều dich vụ “monolithic” và như vậy ứng dụng vân sẽ ton tại tat cả các nhược điểm của kiến trúc truyền thống.
Loose coupling: Các dịch vụ biết rất ít về nhau, một thay đôi ở một dịch vu không yêu câu thay đôi ở các dịch vụ khác. Sự giao tiêp giữa các dịch vụ nên thông qua các phương thức trao đôi API. Việc thiết kế không đáp ứng tinh Loose coupling có thé khiến sự thay đổi của một dịch vụ sẻ ảnh hưởng tới các dịch vụ khác, ứng dụng sẽ không thê cập nhật các thay đối nhanh chóng và an toàn khi có các bản vá lỗi hoặc tích hợp một chức năng mới. High cohension: Mỗi dich vụ sé đóng gói tat cả những nghiệp vụ và dữ liệu lại với nhau thành một khối và không có ràng buộc với dịch vụ khác.
Khi ứng dụng cần xây dựng một tính năng mới, tat cả thay đổi nên được đặt chi trong dich vụ mới đó. Khi mới tiêp cận với kiên trúc này, việc quan trọng khác cân đê ý là những suy nghĩ nhâm lân vê kiên trúc microservices: - Một microservice không phải là một dịch vụ có mã nguồn nhỏ. Quan niệm sai lầm này đến từ tên “microservice”. Mục tiêu của kiến tric microservice không phải là chia ứng dụng thành càng nhiều dịch vụ nhỏ càng tốt.
Các dịch vụ có thê phức tạp miễn là chúng đáp ứng được ba nguyên tắc được nói ở phan 1. - Một microservice không phải là dich vụ luôn được xây dựng với công nghệ mới, ngay cả khi kiến trúc này cho phép nhóm phát triển sử dụng thử công nghệ mới một cách dễ dàng nhưng day không phải là một mục tiêu được ưu tiên của kiến trúc. Nhóm phát triển có thé xây dựng các dịch vụ mới với công nghệ đã được xây dụng ở dịch vụ cũ, mien là nhóm phát triển cảm thấy phù hợp với nguồn lực. - Một microservice không phải là một dịch vụ phải được xây dựng từ đầu.
Khi đã có một ứng dụng sử dụng kiến trúc monolithic từ trước và được thiết kế tốt, hoàn toàn có cơ hội dé chuyên đôi sang kiến trúc microservices nhưng quan trọng vẫn cần đảm bảo ba nguyên tắc cốt lõi. NGUYEN THANH SÁNG - DI17CNPM0I Đồ án tốt nghiệp 1. Lợi ích và khó khăn Kiên trúc Microservices mang lại những lợi ích sau: Một microservice nên đủ nhỏ dé một nhóm phát triển nhỏ có thé xây dựng, kiểm thử và trién khai. Chính quy mô nhỏ thúc đây sự liên kết và hợp tác giữa các thành viên tốt hơn, điều đó khắc phục được sự làm việc thiếu năng suất của các nhóm với quy mô lớn vì thiêu giao tiép trong nhom, ngoai ra dé duy tri một nhóm lớn đòi hỏi một chi phi rất lớn.
Microservices được triển khai độc lập nên việc quản lý các bản sửa lỗi và phát hành tính năng sẽ dé dàng hơn. Ứng dụng có thé cập nhật một dich vụ mà không cần triển khai lại cả ứng dụng và hoàn toàn khôi phục bản cập nhật trước đó nếu có sự cố mà không ảnh hưởng tới toàn bộ hệ thống. Trong một kiến trúc Monolithic, Việc thêm một tính năng mới sẽ yêu cầu chỉnh sửa tới rất nhiều các mã nguồn ở nhiều nơi khác nhau trong thư mục và điều đó tác động đến các tính năng khác. Bằng việc không dùng chung mã nguồn và nơi chứa dit liệu.
Một kiến trúc microservice tối ưu hóa được sự phụ thuộc và chính điều đó làm microservices trở nên dễ dàng thêm một tính năng mới. Nhóm phát triển có thể lựa chọn công nghệ phù hợp với tính năng mới và phù hợp với nguồn nhân lực của đội nhóm. Nếu một microservice không khả dụng và dừng hoạt động, dịch vụ đó sẽ không làm gián đoạn cả ứng dụng như kiến trúc truyền thông. Các dịch vụ có thê được mở rộng tài nguyên phần cứng một cách độc lập khi có số lượng yêu cau xử lý tăng lên và không cần mở rộng toàn bộ ứng dụng.
Chi phí phần cứng sẽ được giảm dan. Một số công nghệ hỗ trợ tốt là Docker Swarm, Kubernetes. Trong một ứng dụng được xây dựng bang kiến trúc monolithic, việc cập nhật cơ sở dit liệu của một dịch vụ có thé trở nên khó khăn bởi các dịch vụ khác của ứng dụng có thê dùng chung dữ liệu nên việc thực hiện bất kỳ một thay đổi nào đềuấn chứa rat nhiều rủi ro. Kiên trúc Microservice đem đên những khó khăn sau: Tính phức tạp: Một ứng dung được xây dựng bằng kiến trúc microservices sẽ chia thành các dịch vụ nhỏ nên mỗi dịch vụ sẽ đơn giản hơn một ứng dụng monolithic nhưng cả hệ thống sẽ phức tạp hơn.
Cách tiếp cận phi tập trung có những ưu điểm nhưng cũng dẫn tới những vấn đề. Ứng dụng có thê sử dụng rất nhiều các ngôn ngữ và thư viện khác nhau, điều đó khiến ứng dụng trở lên khó để bảo trì. Tính chất trên chỉ có thé đem đến hữu ích nếu nhóm phat triển có thể đưa ra một số tiêu chuẩn cho toàn dự án nhưng những tiêu chuẩn đó cần không hạn chế tính linh hoạt của các đội nhóm. NGUYEN THANH SÁNG - DI17CNPM0I Đồ án tốt nghiệp Việc sử dụng rất nhiều các dịch vụ nhỏ có thể đem đến kết quả là sự tương tác nhiều hơn giữa các dịch vụ.
Ngoài ra nếu dé đạt được một nghiệp vụ cần gọi tới một chuỗi các dịch vụ phụ thuộc khác (ví dụ: dịch vụ A gọi tới dịch vụ B, B gọi tới C. ), khi đó vân đề độ trễ sẽ trở thành một vấn đề lớn. Nhóm phát triển cần thiết kế API rất cần thận, trách việc gọi lẫn nhau mà không đạt được mục đích. Với môi microservice tự chịu trách nhiệm cho việc quản lý dữ liệu nên tính nhất quán của đữ liệu là một thử thách cần giải quyết giữa các nhóm phát triển.
Microservice là một hệ thống phân tán dữ liệu ở mức cao. Năng lực của nhóm phát triển cũng là một van đề mà cần cân nhắc. Đội nhóm sẽ tính toán can thận dé ước tính có đủ kỹ năng và kinh nghiệm dé thành công với cách tiếp cận mới.Thư viện Spring Boot hỗ trợ lập trình Java 1. Thư viện Spring Boot là gì? € ` spring by Pivotal.
Thư viện Spring là một nền tang hỗ trợ các bộ công cụ toàn diện để phát triển ứng dụng Java. Spring sẽ xử lý toàn bộ phan ha tang nên công việc của các lập trình viên là tập trung vào phát triển sản phẩm. Một số đặc điểm nỗi bật thư viện Spring là: Thư viện Spring là một nền tảng mã nguồn mở được viết bởi Rod Johnson và được phát hành lần đầu tiên vào tháng 6 năm 2003 sau đó trở thành thư viện phát triển ứng dụng Java phố biến nhất hiện nay. Vì lý do trên nên Spring có cộng đồng hỗ trợ rộng rãi và tài liệu được viết đầy đủ đáp ứng được việc nghiên cứu của lập trình viên.
Thư viện Spring được xây dựng bao gồm các tính năng được tổ chức thành khoảng 20 mô-đun. Thư viện Spring có kích thước rất nhẹ. Phiên bản cơ bản của Spring có kích thước khoảng 2MB. NGUYEN THANH SÁNG - DI17CNPM0I Đồ án tốt nghiệp ) Spring Framework Runtime Data Access/Integration Web JDBC ORM WebSocket OXM JMS Transactions Core Container Core Context Hinh 2: Cac Modules cua Spring Thư viện Spring Boot là một thu viện mã nguồn mở được hỗ trợ phát triển bởi công ty có tên là Pivotal.
Spring Boot cung câp cho các lập trình Java một nền tảng dé bắt đầu xây dựngứng dụng Spring một cách đơn giản thông qua việc rút ngăn thời gian câu hình mà lập trình viên thường gặp phải khi sử dụng thư viện Spring. Spring Boot được xây dựng trên nên của thư viện Spring và bổ sung thêm một số đặc điểm: e Nhung máy chu web Tomcat vào thư viện giúp ứng dụng được khởi chạy đơn giản mà không cần đóng gói thành tệp tin WAR. e Tự động câu hinh Springvà các thư viện bên thứ ba khác. e Spring Boot không yêu cầu mã nguồn cần cấu hình XML như thư viện Spring thông thường.
e Spring Boot được thiết kế để tương thích với các ứng dụng được xây dựng trên kiến trúc Microservices. Thư viện Spring Boot được xây dựng trên các lớp dưới đây: NGUYEN THANH SÁNG - DI7CNPM0I Đồ án tốt nghiệp * Authentication * Business Logic s Storage Logic * JSONTranslation * Validation * Authorisation Hình 3: Cac lớp hoạt động trong thư viên Spring Boot Presentation Layer: Lớp xử lý và hién thi giao điện người dùng. Business Layer: Lớp xử lý tất cả các nghiệp vụ của ứng dụng ví dụ như xác thực tính đúng đăn của dữ liệu, xử lý dữ liệu theo nghiệp vụ của ứng dụng. Persistence Layer: Là lớp cầu hình và tạo câu nôi giữa ứng dụng tới hệ quản trị cơ sở đữ liệu.
Database Layer: Thực hiện trực tiêp các câu lệnh thêm, sửa, xóa, đọc tới cơ sở dit liệu.