Tổng quan đồ án
Trong thời đại số hóa hiện nay, internet đã trở thành công cụ không thể thiếu trong mọi lĩnh vực của cuộc sống, từ học tập, giải trí đến công việc. Đặc biệt, trong lĩnh vực tuyển dụng, việc sử dụng các ứng dụng web để tìm kiếm việc làm và tuyển dụng nhân sự đã trở thành xu hướng phổ biến. Người lao động có thể dễ dàng tìm kiếm các công việc phù hợp, nộp hồ sơ và theo dõi quá trình ứng tuyển một cách nhanh chóng và tiện lợi. Ngược lại, các nhà tuyển dụng cũng có thể tiếp cận nguồn nhân lực đa dạng và phong phú thông qua các nền tảng trực tuyến này.
Tuy nhiên, nhiều ứng dụng tìm việc hiện tại vẫn còn tồn tại một số hạn chế như khả năng mở rộng kém, khó khăn trong việc bảo trì và nâng cấp hệ thống, hay vấn đề về hiệu năng và bảo mật. Để khắc phục những hạn chế này, kiến trúc Microservices đã được áp dụng rộng rãi trong phát triển các ứng dụng web hiện đại. Microservices không chỉ giúp phân chia ứng dụng thành các dịch vụ nhỏ gọn, độc lập, dễ dàng quản lý mà còn tăng tính linh hoạt, khả năng mở rộng và bảo trì hệ thống.
Đồ án “Xây dựng và triển khai tự động ứng dụng web ‘Tìm việc làm’ dựa trên Microservices” nhằm mục đích xây dựng một nền tảng tìm kiếm việc làm hiện đại, đáp ứng được các yêu cầu của thị trường lao động hiện nay. Ứng dụng sẽ cung cấp các chức năng cần thiết để người dùng có thể tìm kiếm và ứng tuyển vào các công việc phù hợp, đồng thời giúp nhà tuyển dụng dễ dàng quản lý và tuyển dụng nhân sự.
Bằng cách áp dụng kiến trúc Microservices, ứng dụng không chỉ đảm bảo tính ổn định, linh hoạt mà còn dễ dàng mở rộng và bảo trì. Ngoài ra, việc triển khai tự động (CI/CD) giúp tối ưu hóa quá trình phát triển, kiểm thử và triển khai, đảm bảo ứng dụng luôn được cập nhật và hoạt động hiệu quả.
Việc thực hiện đề tài này không chỉ giúp giải quyết các vấn đề hiện tại của các ứng dụng tìm việc, mà còn mang lại cơ hội cho sinh viên tiếp cận và nắm vững các công nghệ mới, rèn luyện kỹ năng thực hành và chuẩn bị hành trang cho sự nghiệp tương lai.
Mục tiêu đề tài
- Xây dựng một ứng dụng web “Tìm việc làm” hoàn chỉnh với các chức năng cơ bản như đăng ký, đăng nhập, tìm kiếm việc làm, và quản lý hồ sơ cá nhân.
- Xây dựng ứng dụng web dựa trên kiến trúc Microservices, giúp tăng tính linh hoạt, dễ dàng mở rộng và bảo trì hệ thống.
- Xây dựng hệ thống triển khai tự động (CI/CD) để đảm bảo quá trình phát triển và triển khai ứng dụng diễn ra một cách liên tục và hiệu quả.
- Đảm bảo ứng dụng hoạt động ổn định, có hiệu năng cao và đảm bảo các tiêu chuẩn bảo mật thông tin cho người dùng.
- Cung cấp trải nghiệm người dùng tốt, dễ sử dụng, đáp ứng tốt trên các thiết bị khác nhau.
Cơ sở lý thuyết
DevOps
DevOps là sự kết hợp giữa các nguyên tắc, thực hành, quy trình và công cụ giúp tự động hóa quá trình phát triển và vận hành phần mềm. Nó đề cao sự hợp tác giữa các nhóm phát triển và vận hành, giúp họ làm việc hiệu quả hơn và đưa sản phẩm ra thị trường nhanh chóng hơn.

Microservice
Microservice là một kiến trúc phần mềm trong đó một ứng dụng lớn được chia thành nhiều dịch vụ nhỏ, mỗi dịch vụ đảm nhận một chức năng cụ thể và hoạt động độc lập.
GitHub
GitHub là một nền tảng dịch vụ lưu trữ mã nguồn và cộng tác phát triển phần mềm, dựa trên hệ thống quản lý phiên bản phân tán Git. GitHub cho phép các nhà phát triển lưu trữ mã nguồn, theo dõi lịch sử thay đổi, hợp tác và quản lý các dự án phần mềm một cách hiệu quả.
GitHub Action
GitHub Actions là một tính năng của GitHub cho phép tự động hóa các quy trình phát triển phần mềm trực tiếp từ trong kho mã nguồn (repository). Với GitHub Actions, người dùng có thể tạo ra các workflow tự động thực hiện các tác vụ như kiểm thử, xây dựng, triển khai, và nhiều công việc khác mỗi khi có thay đổi trong kho mã nguồn.
SonarCloud
SonarCloud là một dịch vụ phân tích mã nguồn trên nền tảng đám mây, được phát triển bởi SonarSource. SonarCloud giúp các đội ngũ phát triển phần mềm kiểm tra và cải thiện chất lượng mã nguồn của họ bằng cách phân tích các khía cạnh như lỗi mã, mùi mã (code smells), tính bảo mật, và tính bao phủ của các bài kiểm thử. SonarCloud cung cấp các báo cáo chi tiết và các công cụ để theo dõi và cải thiện chất lượng mã nguồn theo thời gian.
Docker
Docker là một nền tảng mã nguồn mở được thiết kế để tự động hóa việc triển khai, mở rộng, và quản lý các ứng dụng bằng cách sử dụng công nghệ container. Docker cho phép các nhà phát triển đóng gói các ứng dụng và các phụ thuộc của chúng vào một container, đảm bảo rằng ứng dụng sẽ chạy một cách nhất quán trên bất kỳ môi trường nào.
Docker Hub
Docker Hub là một dịch vụ được cung cấp bởi Docker để lưu trữ và chia sẻ các container image. Nó tương tự như một kho lưu trữ mã nguồn (như GitHub) nhưng dành riêng cho các container. Docker Hub cung cấp các image sẵn có từ cộng đồng, các nhà cung cấp và chính Docker để hỗ trợ việc phát triển và triển khai ứng dụng.
Kubernetes
Kubernetes (thường được gọi tắt là K8s) là một nền tảng mã nguồn mở được sử dụng để tự động hóa việc triển khai, quản lý, và mở rộng (scaling) các ứng dụng container. Kubernetes được phát triển bởi Google và hiện nay được duy trì bởi CNCF (Cloud Native Computing Foundation).

MongDB
MongoDB là một cơ sở dữ liệu NoSQL mã nguồn mở, được thiết kế để lưu trữ và quản lý dữ liệu theo dạng tài liệu (document-oriented). Thay vì sử dụng các bảng và hàng như trong các cơ sở dữ liệu quan hệ truyền thống (SQL), MongoDB lưu trữ dữ liệu trong các tài liệu JSON-like (BSON), giúp dễ dàng mở rộng và linh hoạt trong việc lưu trữ dữ liệu không có cấu trúc cố định.
Triển khai mô hình

- Commit code lên GitHub.
- GitHub Actions kiểm tra chất lượng mã nguồn bằng SonarCloud.
- Nếu mã nguồn đạt yêu cầu, mã được merge.
- Xây dựng Docker container:
- Thành công: Đẩy container lên Docker Hub.
- Thất bại: Báo lỗi.
- Triển khai container từ Docker Hub lên Kubernetes.
- Load Balancer Service phân phối lưu lượng truy cập đến các Pod chạy các dịch vụ:
o User
o Job
o Company - Ingress Controller quản lý luồng truy cập.
- Ứng dụng React chạy trong trình duyệt.
Kiểm thử và triển khai mã nguồn

Kết luận
Những việc đã thực hiện được
- Đã triển khai được cơ bản một mô hình tự động hóa đơn giản của một ứng dụng Web Tìm việc làm.
- Đã triển khai được một kiến trúc microservices cho Web Tìm việc làm
- Rèn luyện được kĩ năng cơ bản của DevOps về các dịch vụ và công nghệ như Docker, GitHub Actions, Kubernetes, …
Những hạn chế còn gặp phải
- Chưa triển khai tự động, khi có sự thay đổi mã nguồn thì chưa đưa trực tiếp vào môi trường sản xuất ngay lập tức sau khi vượt qua các bài kiểm thử tự động, quy trình từ lúc kéo container trên Docker Hub và triển khai trên Kubernetes vẫn còn thủ công
- Web vẫn còn tương đối đơn giản, chưa được đầy đủ chức năng như những trang web Tìm việc làm khác
- Chưa triển khai scaling trên Kubernetes
Hướng phát triển trong tương lai
- Khắc phục các hạn chế ở trên, thêm nhiều tính năng mới vào web
- Xây đựng lại quy trình cho phù hợp hơn cho việc mở rộng code
- Triển khai microservice trên các dịch vụ đám mây
- Tích hợp hệ khuyến nghị hỗ trợ cho người dùng.


