Tổng quan đồ án
Hiện nay, đối với các doanh nghiệp vừa và nhỏ hiện nay thường đối mặt với nhiều thách thức lớn trong việc quản lý dự án hoặc là phân công công việc giữa các team với nhau cũng như theo dõi và quản lý tiến độ công việc của từng phòng ban nếu đơn thuần chỉ là thông qua email, bảng tính hoặc các công cụ quản lý dự án không hiệu quả. Điều này có thể dẫn tới mất mát thông tin, hoặc có thể gây ra chậm tiến độ của dự án. Để giải quyết các vấn đề này thì việc sử dụng một công cụ mạnh mẽ và linh hoạt để quản lý dự án là điều cần thiết. Ứng dụng web jira là một lựa chọn lý tưởng cho các doanh nghiệp với đầy đủ các tính năng mạnh mẽ có thể đáp ứng được các nhu cầu trên.
Một số doanh nghiệp cũng đang gặp phải một thách thức lớn khi xây dựng website theo kiến trúc monolithic đó là khó khăn trong việc mở rộng, bảo trì hay là nâng cấp. Ngoài ra khi có lỗi xảy ra thì nó sẽ khiến toàn bộ hệ thống không thể hoạt động được và phải dừng lại để sửa chữa khiến cho hệ thống mất khả năng tin cậy, đôi khi các team cùng phải làm chung một mã nguồn cũng như sử dụng chung cơ sở dữ liệu để lưu trữ dữ liệu dẫn đến việc không đảm bảo về vấn đề bảo mật hay lộ mã nguồn. Vì vậy giải pháp sử dụng kiến trúc microservice để thay thế là một giải pháp tốt hơn, vì kiến trúc này chia ứng dụng thành các dịch vụ độc lập, dịch vụ này hoạt động độc lập với các dịch vụ khác và mỗi dịch vụ sẽ có một cơ sở dữ liệu riêng biệt để lưu trữ mà không sử dụng cơ sở dữ liệu với các dịch vụ khác. Ngoài ra kiến trúc này có khả năng mở rộng dễ dàng, các team có thể làm việc riêng lẽ mà không sử dụng chung một mã nguồn điều này giúp cho việc bảo mật vì team này không thể biết được team khác làm gì mà chỉ có thể code trong serivce của mình. Ngoài ra kiến trúc này có thể cho phép chúng ta code đa ngôn ngữ, mỗi service có thể code một ngôn ngữ khác nhau mà không bị phụ thuộc so với kiến trúc monolithic.
Ngoài ra triển khai tự động đã trở thành một yêu cầu không thể thiếu đối với các doanh nghiệp. Triển khai tự động mang lại nhiều lợi ích vượt trội so với triển khai thủ công truyền thống. Trước hết, nó giúp tiết kiệm thời gian và chi phí đáng kể, bởi quá trình triển khai được thực hiện một cách nhanh chóng và chính xác, không cần sự can thiệp thủ công. Hơn nữa, triển khai tự động giúp giảm thiểu sai sót, đảm bảo
tính nhất quán và ổn định cho toàn bộ hệ thống. Trong bối cảnh hệ thống ngày càng phức tạp, triển khai tự động trở nên cần thiết hơn bao giờ hết để đáp ứng các yêu cầu về tốc độ, quy mô và độ tin cậy. Vì vậy, ứng dụng triển khai tự động là một giải pháp không thể thiếu đối với các doanh nghiệp muốn nâng cao năng lực cạnh tranh và thích ứng với sự thay đổi trong thời đại số hóa.
Doanh nghiệp thường gặp nhiều khó khăn trong việc quản lý dự án do việc phân công công việc giữa các team, theo dõi tiến độ công việc và đảm bảo chất lượng dự án chưa được tốt. Dựa vào nhu cầu đó một công cụ giúp các công ty giải quyết triệt để vấn đề đó là “Jira- Phân chia công việc” được ra đời.
Nhưng đối kiến trúc monolithic mang lại nhiều hạn chế cho hệ thống quản lí dự án, cũng như như triển khai hạ tầng bằng cấu hình thủ công gây ra các vấn đề rất phức tạp khi có lỗi hay bảo trì. Do đó, việc lựa chọn kiến trúc microservices và tự động hóa quy trình toàn bộ được xem là giải pháp thay thế tối ưu để khắc phục các hạn chế của monolithic và giảm thiểu khả năng lỗi trong quá trình triển khai hạ tầng một cách thủ công.
Mục tiêu đồ án
- Vận dụng các kiến thức đã được học vào đề tài mà nhóm thực hiện.
- Tạo ra một ứng dụng đơn giản có thể phục vụ cho nhu cầu của cộng đồng thông qua giao diện đơn giản và dễ sử dụng.
- Giúp tối ưu hóa quy trình triển khai để đạt được tốc độ nhanh chóng và có hiệu suất cao, bên cạnh đó cũng có khả năng mở rộng một cách linh hoạt.
- Xây dựng quy trình triển khai tự động để giúp giảm thiểu các lỗi trong quá trình sửa chữa hay bảo trì hệ thống.
Cơ sở lý thuyết
1. Kiến trúc microservice

Kiến trúc microservice là một mô hình phát triển phần mềm mà trong đó ứng dụng được tách ra thành các dịch vụ nhỏ, hoạt động độc lập với nhau. Mỗi dịch vụ sẽ đảm nhận một phần chức năng nhỏ của toàn bộ ứng dụng và có thể được phát triển, triển khai và mở rộng một cách độc lập cũng như khả năng tái sử dụng.
Trong kiến trúc microservice thì các dịch vụ sẽ giao tiếp với nhau thông qua các giao thức như HTTP, giao thức truyền dữ liệu hoặc tin nhắn. Mỗi dịch vụ có thể được viết theo một ngôn ngữ hoặc sử dụng các công nghệ khác nhau tùy thuộc vào nhóm được phân công phát triển dịch vụ đó.
2. Kubernetes K8S
Kubernetes là một mã nguồn mở được sử dụng để tự động triển khai hệ thống, scaling, quản lý các container.
Nhóm các container cấu thành nên một ứng dụng thành các đơn vị logic để dễ dàng quản lý và vận hành.

3. Docker
Là một nền tảng phần mềm cho phép chúng ta đóng gói một ứng dụng cùng với tất cả các thư viện, môi trường thực thi thành một đơn vị tiêu chuẩn (gọi là container) hỗ trợ cho việc đóng gói và triển khai phần mềm.
Việc đóng gói môi trường thực thi cùng với ứng dụng giúp cho quá trình triển khai hệ thống trở nên nhanh chóng.

4. Amazon Web Service (AWS)
Amazon Web Services (AWS) là nền tảng đám mây toàn diện và được sử dụng phổ biến nhất thế giới bao gồm các dịch vụ cơ sở hạ tầng dưới dạng dịch vụ (IaaS) và nền tảng dưới dạng dịch vụ (PaaS). Các dịch vụ của AWS cung cấp các giải pháp có quy mô linh hoạt cho điện toán, lưu trữ, cơ sở dữ liệu, phân tích,…
5. Terraform (Infrastructure As Code – IaC)
Terraform là một công cụ mã nguồn mở cho phép định nghĩa Infrastructure as Code với đa dạng Cloud Provider. Terraform giúp chúng ta quản lý hệ thống bằng code và tự động hóa việc triển khai hạ tầng. Chúng ta có thể sử dụng Terraform để quản lý tài nguyên máy chủ, mạng, cơ sở dữ liệu và các tài nguyên khác của các nhà cung cấp khác nhau
6. Github Actions
Github Actions là một nền tảng miễn phí do Github cung cấp để giúp chúng ta tự động hóa quá trình CI/CD, cho phép người dùng định nghĩa ra ra các workflow để tự động hóa các hoạt động trong quá trình phát triển phần mềm.
7. React JS
ReactJS là một thư viện mã nguồn mở giúp xây dựng giao diện người dùng linh hoạt và dễ quản lý. Nó cho phép phát triển các thành phần (components) độc lập và có thể tái sử dụng trong các ứng dụng web mà không cần phải lặp lại mã nguồn HTML. Thay vì tạo ra các trang HTML tĩnh, ReactJS tạo ra các thành phần động và tương tác mà có thể tự động cập nhật khi trạng thái của ứng dụng thay đổi.
8. Node JS
Node.js là một môi trường chạy mã JavaScript phía máy chủ (server-side) được xây dựng trên JavaScript Engine V8 của Google Chrome. Nó cho phép chạy JavaScript bên ngoài trình duyệt web và sử dụng để phát triển các ứng dụng web phía máy chủ, ứng dụng dòng lệnh và các ứng dụng mạng khác.
9. Jest
JEST là viết tắt của Jest Expectation Syntax Testing. Jest là một framework kiểm thử (testing framework) phổ biến trong cộng đồng phát triển phần mềm JavaScript. Nó được sử dụng chủ yếu để thực hiện kiểm thử đơn vị (unit testing), tức là kiểm tra từng phần riêng lẻ của mã nguồn JavaScript để đảm bảo tính đúng đắn và chức năng của từng phần đó. Một số nhước điểm của JEST là: vẫn còn là một thư viện mới, vẫn chưa được biết đến rộng rãi cũng như sử dụng nhiều bởi các developer. Nó có ít tool và thư viện hỗ trợ so với các công cụ test khác.
10. Checkov
Checkov là một công cụ mã nguồn mở (open-source tool) được sử dụng để kiểm tra và phân tích cấu hình hạ tầng đám mây (cloud infrastructure configuration). Nó được phát triển bởi Bridgecrew và hỗ trợ nhiều nền tảng đám mây phổ biến như AWS, Azure, Google Cloud Platform (GCP), và Kubernetes
Thiết kế hệ thống



Kết luận
Thông qua quá trình nghiên cứu và tìm hiểu được nhiều công nghệ mới, nhóm chúng em đã hoàn thiện được sản phẩm thiết kế hệ thống tự động sử dụng kiến trúc Microserivce và áp dụng kiến trúc này vào phát triển ứng dụng Jira. Do thời gian có hạn nên ứng dụng còn khá nhiều thiếu sót và tính năng còn hạn hẹp, bên cạnh đó cũng chưa có nhiều tính năng nổi trội mà chỉ mới đi sâu vào cơ chế hoạt động. Tất nhiên, qua các kết quả chạy thử thì hệ thống hoạt động khá tốt và có thể mở rộng thêm nhiều tính năng trong lương lai. Đặc biệt, website này còn có thể ứng dụng công nghệ AI để có thể phát triển lên thành khóa luận.
Về vấn đề kỹ thuật thì nhóm chúng em đã thực hiện được:
- Rèn luyện được kỹ năng phân tích và thiết kế hệ thống cho hạ tầng cloud và microservice cũng như thiết kế database riêng lẽ cho từng service
- Về hạ tầng Cloud thì tích hợp được các dịch vụ bên ngoài vào EKS Cluster như HPA để tự động tính toán và tạo ra bản sao khi lưu lượng quá cao, AutoScaler để tự động tăng worker node khi không còn dung lượng để triển khai pod các worker node hiện tại,…
- Thực hiện được cách mà các service chia sẽ dữ liệu với nhau mà không tương tác trực tiếp giữa các service
- Tạo ra các quy trình CI/CD để tự động hóa quy trình làm việc thay vì triển khai thủ công
- Viết được các bài test cho service backend để đánh giá xem các API có hoạt động đúng mong muốn hay không
- Ngoài ra biết được thêm các công nghệ để đánh giá mã nguồn như checkov và sonarcloud
- Triển khai một số công cụ giúp giám sát hệ thống được hiệu quả hơn thay vì phải tương tác thông qua giao diện dòng lệnh như Grafana và ArgoCD và sử dụng Prometheus để thu thập lưu lượng hoặc thông tin cũng như gửi cảnh báo về email, …
- Nâng cao được khả năng tìm tòi và áp dụng được các công nghệ vào đồ án.
- Ngoài ra còn biết cách tìm hiểu và áp dụng một công nghệ mới.


