Hiện đại hóa ứng dụng đơn giản sử dụng đám mây điện toán AWS

1. Mục tiêu bài toán

Công nghệ đám mây và mô hình lập trình hiện đại như cloud-native đã xuất hiện được vài năm tuy nhiên hầu hết các ứng dụng vẫn hoạt động trên các máy chủ truyền thống. Mặc dù có nhiều lợi ích mà công nghệ đám mây có thể mang lại, nhưng việc chuyển đổi một ứng dụng truyền thống như vậy sang môi trường đám mây không phải là một nhiệm vụ đơn giản. Để có hiểu biết cơ bản về quy trình hiện đại hóa ứng dụng, bài viết sau đây sẽ giới thiệu một tình huống đơn giản trong đó một công ty muốn cấu trúc lại ứng dụng Book Store của mình và di chuyển ứng dụng từ môi trường cũ (máy chủ tại chỗ) sang AWS (Amazon Web Service Cloud Platform).

2. Giới thiệu bài toán

Công ty A sử dụng ứng dụng BookStore để quản lý sách của mình. Nhân viên có thể lấy, cập nhật, tạo và xóa sách trong cửa hàng. Ứng dụng hiện đang chạy trên phiên bản Java cũ, thiếu các tính năng hiện đại và nâng cao bảo mật như phiên bản mới nhất. Công ty nhận thấy cần phải nâng cấp ứng dụng lên phiên bản Java mới nhất để đảm bảo tính bảo mật, tính ổn định và khả năng tương thích với các hệ thống hiện đại. Ngoài ra, ứng dụng hoạt động trên máy chủ tại chỗ có một số hạn chế, chẳng hạn như chi phí bảo trì phần cứng và vấn đề tắc nghẽn giao thông mỗi khi giới thiệu sách nóng hoặc trong chiến dịch giảm giá.

Công ty quyết định nâng cấp ứng dụng lên bản Java mới nhất và di chuyển ứng dụng sang AWS Cloud:

  • Tối ưu chi phí phần cứng
  • Giảm chi phí hoạt động
  • Cải thiện hiệu suất và tính khả dụng của ứng dụng

3. Hiện trạng của ứng dụng

Kỹ sư của công ty nghiên cứu ứng dụng BookStore và báo cáo trạng thái hiện tại của nó như sau:

Tổng quan về ứng dụng

Tính năng chính: quản lý sách trong cửa hàng sách

Chức năng:

  • Lấy danh sách sách
  • Cập nhật thông tin sách
  • Tạo một cuốn sách mới khi đến cửa hàng
  • Xóa sách khỏi danh sách

Quy trình của ứng dụng:

Hình bên trên thể hiện quy trình làm việc của ứng dụng BookStore. Người dùng chỉ có quyền xem sách trong khi chủ sở hữu và nhà phát triển có thể xem, tạo, cập nhật và xóa sách. Sau đó, yêu cầu sẽ xử lý theo ứng dụng trên máy chủ cục bộ và xác minh tính khả dụng dựa trên BookId. Nếu có sách được yêu cầu trong danh sách thì ứng dụng sẽ xử lý yêu cầu, nếu không, ứng dụng sẽ trả về lỗi cho người yêu cầu. Ứng dụng được yêu cầu phải hoạt động ổn định với tính khả dụng 24/7 và nhu cầu gần với thời gian thực. Nó cũng phải có khả năng xử lý lượng truy cập tăng đột biến, đặc biệt là trong trường hợp sách mới được phát hành hoặc các chiến dịch giảm giá. Tuy nhiên, rất khó để mở rộng quy mô tài nguyên của máy chủ cục bộ để đáp ứng nhu cầu trong khi chủ sở hữu cần phải mua và cài đặt thêm máy chủ.

Kiến trúc hiện tại:

Ứng dụng BookStore hiện được tổ chức theo kiến trúc 3 tầng: tầng giao diện người dùng; tầng ứng dụng, nơi dữ liệu được xử lý; và tầng dữ liệu trong bộ nhớ, nơi lưu trữ và quản lý dữ liệu liên quan đến ứng dụng. Các lớp này có mối liên hệ chặt chẽ với nhau nên rất khó mở rộng quy mô dựa trên lưu lượng truy cập cao hoặc nếu một tầng thay đổi logic thì có thể xảy ra lỗi ở các tầng khác. Ngoài ra, nó hoạt động trên phiên bản Java cũ, thiếu các tính năng hiện đại và cải tiến bảo mật như phiên bản mới nhất.

4. Hiện đại hóa ứng dụng

Trên cơ sở nghiên cứu hiện trạng của ứng dụng, kỹ sư muốn nâng cấp ứng dụng như sau:

MụcHiện trạngNâng cấp
Ngôn ngữ phát triểnJavaJava
FrameworkJavaEESpring boot
APIGet, Put, Post, DeleteGet, Put, Post, Delete
DBH2 in-memory DBAmazon RDS MySQL

JavaEE (Java Enterprise Edition) được sử dụng cho phiên bản ứng dụng hiện tại có khá nhiều vấn đề như: sử dụng nhiều tệp XML, sự phụ thuộc giữa các phần của ứng dụng dẫn đến các khó khăn cho việc phát triển.

Ngược lại, SpringBoot, được phát hành vào năm 2004, là một framework để tạo chương trình dựa trên Java OOP (Lập trình hướng đối tượng) và có một số ưu điểm so với JavaEE như cấu hình tự động và sự độc lập giữa các thành phần. Các kỹ sư có thể phát triển độc lập các thành phần và kết nối với nhau mà không ảnh hưởng đến hoạt động của các thành phần khác trong ứng dụng.

Đối với các vấn đề của máy chủ, kỹ sư đề xuất di chuyển ứng dụng lên nền tảng đám mây AWS với rất nhiều lợi ích như:

  • Giảm chi phí trả trước cho phần cứng, chủ sở hữu chỉ trả tiền cho hệ thống tính toán, bộ nhớ và các tài nguyên khác mà ứng dụng sử dụng, không có hợp đồng dài hạn hoặc cam kết trả trước.
  • Dễ dàng triển khai và vận hành ứng dụng một cách linh hoạt
  • Nhanh chóng mở rộng quy mô để đối phó với sự gia tăng lưu lượng truy cập trong các sự kiện đột biến
  • Cải thiện tính khả dụng của ứng dụng bằng cách sử dụng thiết lập tính sẵn sàng cao đa vùng trong cơ sở hạ tầng đám mây

Đối với kiến trúc hiện tại, kỹ sư quyết định tái kiến trúc ứng dụng từ kiến trúc nguyên khối (monolith) sang kiến trúc vi dịch vụ (microservices) như sau:

Hình bên trái hiển thị ứng dụng hiện tại chạy máy chủ và hình bên phải hiển thị ứng dụng được di chuyển trên nền tảng đám mây AWS. Ứng dụng BookStore được phát triển bởi Spring boot framework và hoạt động trên EKS (Elastics Kubernetes Cluster) sẽ tự động mở rộng quy mô dựa trên lưu lượng truy cập. H2 – Cơ sở dữ liệu được di chuyển sang Amazon RDS MySQL để có tính khả dụng cao và kết hợp linh hoạt với ứng dụng. Với kiến trúc microservice này, ứng dụng sẽ đảm bảo tính sẵn sàng cao, linh hoạt và hiệu suất cao. Chi phí phần cứng cũng giảm khi nó hoạt động trên nền tảng đám mây công cộng.

Với mục đích giải thích, kỹ sư thiết kế một giải pháp quy trình làm việc chi tiết cho ứng dụng như sau:

Như hình trên, kiến trúc phân loại thành 2 phân hệ: Phân hệ phát triển và Phân hệ vận hành

Trong phân hệ phát triển:

  1. Phát triển mã ứng dụng và lưu trữ lên Github
  2. GitHub kích hoạt Jenkins bắt đầu quá trình xây dựng ứng dụng để tạo thành 1 docker image
  3. Jenkins sẽ đẩy docker image đã tạo vào Docker Hub

Trong phân hệ hoạt động:

  1. Kỹ sư sử dụng terraform để cung cấp VPC, Amazon RDS MySQL, EKS Cluster trên nền tảng đám mây AWS
  2. Thiết lập ArgoCD trong Elastic Kubernetes Cluster (EKS node)
  3. Kéo ứng dụng dưới dạng Docker Image từ Docker Hub
  4. Triển khai ứng dụng dưới dạng các Pod của Kubernetes
  5. Người dùng có thể truy cập ứng dụng thông qua ELB endpoint

Dưới dây là mã nguồn để thiết lập ứng dụng:

https://github.com/hinhvudinh/Simple-Application-Modernization

Kiến trúc này đảm bảo rằng ứng dụng sẽ đáp ứng nhu cầu của công ty:

  • Phân hệ phát triển áp dụng phương pháp tích hợp liên tục (Continuous Integration) để đảm bảo tích hợp liền mạch các thay đổi mã nguồn, thúc đẩy cộng tác và duy trì chất lượng phần mềm ở mức cao.
  • Phân hệ vận hành sử dụng các công cụ Terraform để cung cấp hạ tầng cho ứng dụng trên đám mây AWS. Cụm Kubernetes đàn hồi (EKS) sẽ tự động mở rộng quy mô để đáp ứng lưu lượng truy cập cao và đảm bảo không có thời gian hệ thống ngừng hoạt động.

5. Tài liệu tham khảo

[1] https://www.ibm.com/topics/java-spring-boot#:~:text=Spring%20Boot%20helps%20developers%20create,app%20during%20the%20initialization%20process.

[2] https://spring.io/guides/gs/spring-boot/

[3] https://aws.amazon.com/blogs/enterprise-strategy/6-strategies-for-migrating-applications-to-the-cloud/

[4] https://www.vmware.com/topics/glossary/content/application-modernization.html

You may also like...

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest
0 Góp ý
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
0
Rất thích suy nghĩ của bạn, hãy bình luận.x