Technology
Case study · Flexin

Xây dựng và vận hành nền tảng việc làm part-time Flexin trên AWS

Flexin do chính đội ngũ Flexin Technology thiết kế, phát triển và vận hành, từ ứng dụng di động, backend đến hạ tầng cloud. Kinh nghiệm từ dự án này là nền tảng cho cách chúng tôi triển khai dự án cho khách hàng.

Lĩnh vực
Việc làm part-time
Nền tảng
Android, iOS, web quản trị
Hạ tầng
100% AWS
Phạm vi
Thiết kế, phát triển, vận hành
Sản phẩm

Một ứng dụng, hai nhóm người dùng

Người tìm việc tìm ca làm phù hợp gần nơi ở; nhà tuyển dụng đăng tin, chọn ứng viên và quản lý ca làm. Đội vận hành theo dõi toàn bộ hoạt động trên trang quản trị web.

Xin chào, MinhViệc gần bạn
Phục vụ quán cà phêCa 18:00–22:00 · 1,2 km30.000đ/giờ
Nhân viên khoCa 08:00–12:00 · 3,5 km28.000đ/giờ
PG sự kiệnThứ 7 · 2,1 km400.000đ/ca
Tìm việc theo caGợi ý việc theo vị trí và khung giờ
Đăng tin tuyển
Vị tríPhục vụ
Ca làm
SángTốiCuối tuần
Số người cần4
Mức lương30.000đ/giờ
Đăng tin
Đăng tin trong vài phútChọn ca làm, số lượng và mức lương
Ca làm hôm nayQuán cà phê · 18:00–22:00Check-inBạn đang ở đúng địa điểm
Giờ vào dự kiến18:00
Check-in tại nơi làmXác thực vị trí, ghi nhận giờ làm
admin.flexin.vn
Flexin AdminTổng quanTin tuyển dụngNgười dùngCa làmBáo cáo
Tin đang mở
53
Ca hôm nay
128
Tỉ lệ check-in đúng giờ
96%
Trang quản trị web cho đội vận hànhHình minh họa giao diện trang quản trị

Yêu cầu đặt ra

Hai nhóm người dùng, một ứng dụng

Người tìm việc và nhà tuyển dụng dùng chung một ứng dụng nhưng có quy trình khác nhau: đăng tin, ứng tuyển, phỏng vấn, làm việc và đánh giá.

Thông báo gần như tức thời

Lời mời làm việc, thay đổi ca và nhắc check-in phải đến người dùng ngay, kể cả khi lượng truy cập tăng đột biến.

Phát hành thường xuyên trên ba nền tảng

Android, iOS và backend có chu kỳ phát hành khác nhau nhưng phải luôn tương thích với các phiên bản app cũ.

Tuân thủ quy định tại Việt Nam

Đáp ứng yêu cầu lưu trữ dữ liệu trong nước mà không phải di dời hạ tầng chính khỏi AWS.

Hành trình

Các giai đoạn phát triển

  1. Quý 1/2025

    Khám phá & thiết kế

    Khảo sát nhà tuyển dụng và người tìm việc, xác định quy trình cốt lõi, thiết kế giao diện.

  2. Quý 2/2025

    MVP

    Đăng tin, ứng tuyển, nhắn tin; ra mắt đồng thời trên Android và iOS.

  3. Quý 3/2025

    Mở rộng tính năng

    Quản lý ca làm, check-in, đánh giá hai chiều và trang quản trị cho đội vận hành.

  4. Từ quý 4/2025

    Ổn định & vận hành

    Chuyển hạ tầng sang Amazon EKS, tự động hóa phát hành, thiết lập giám sát và cảnh báo.

Kiến trúc

Kiến trúc hoàn toàn trên AWS

Ứng dụng Flutter và trang quản trị kết nối tới backend Spring Boot chạy trên Amazon EKS. Toàn bộ hạ tầng được quản lý bằng Terraform, đặt trong một VPC riêng, tách biệt lớp public, ứng dụng và dữ liệu.

Sơ đồ hạ tầng
Người dùngApp Android, iOS · Web quản trị
DNSRoute 53
VPC riêng
Public subnet
Application Load Balancer
Private subnet · Amazon EKS
Backend APISpring Boot, API có phiên bản, ký request, Socket.IO cho thông báo trong app
WorkerNhận tác vụ từ hàng đợi, gửi thông báo và email, xử lý tác vụ nền; tự mở rộng theo tải
Web quản trịDành cho đội vận hành: tin tuyển dụng, người dùng, ca làm, báo cáo
Data subnet
Amazon RDS
Tích hợpAmazon SQS · Amazon SES
Artifact & imageAmazon ECR · AWS CodeArtifact
Giám sátCloudWatch · log tập trung, cảnh báo
Hạ tầng dưới dạng codeTerraform

Ba luồng chính

Luồng request
  1. App
  2. Route 53
  3. ALB
  4. Backend API trên EKS
  5. RDS
Luồng xử lý nền
  1. Backend API
  2. SQS
  3. Worker trên EKS
  4. Thông báo · Email qua SES
Luồng phát hành
  1. Commit (GitFlow)
  2. Jenkins build & test
  3. Thư viện lên CodeArtifact
  4. Image lên ECR
  5. Deploy lên EKS
Các dịch vụ AWS và vai trò
NhómDịch vụ AWSVai trò
MạngVPC, Route 53, ALBTách lớp public, ứng dụng, dữ liệu; tên miền; cân bằng tải và HTTPS
Chạy ứng dụngEKS, ECRKubernetes cho API, worker, web quản trị; kho container image
Dữ liệuRDSCơ sở dữ liệu quan hệ, sao lưu tự động
Tích hợpSQS, SESHàng đợi tác vụ nền; gửi email giao dịch
Phát hànhCodeArtifact, ECRKho thư viện nội bộ dùng chung giữa các service; image cho từng bản phát hành
Giám sátCloudWatchLog tập trung, chỉ số, cảnh báo
Quyết định kỹ thuật

Các quyết định kỹ thuật quan trọng

Mỗi quyết định xuất phát từ một vấn đề cụ thể trong quá trình vận hành, kèm cân nhắc về đánh đổi.

01

Quản lý phiên bản API

Vấn đề: nhiều người dùng không cập nhật app, trong khi backend phát hành thường xuyên hơn app trên App Store và Google Play.

Giải pháp: API có phiên bản, backend phục vụ song song nhiều phiên bản; app hiển thị yêu cầu cập nhật khi phiên bản quá cũ. Phiên bản cũ chỉ được ngừng khi lượng sử dụng đủ thấp.

Đánh đổi: tốn công duy trì nhiều phiên bản, đổi lại không làm gián đoạn người dùng.

02

Ký request bằng HMAC

Vấn đề: API công khai dễ bị gọi trực tiếp từ công cụ bên ngoài app, gây spam ứng tuyển hoặc giả mạo dữ liệu.

Giải pháp: mỗi request từ app được ký kèm dấu thời gian; backend kiểm tra chữ ký và từ chối request sai chữ ký hoặc quá hạn, nhờ đó chặn được cả request bị gửi lại (replay).

Đánh đổi: cần quy trình xoay vòng khóa khi phát hành app mới.

03

Xử lý bất đồng bộ qua SQS

Vấn đề: gửi thông báo và email ngay trong request làm API chậm, nhất là khi một tin tuyển dụng gửi lời mời tới nhiều người cùng lúc.

Giải pháp: API chỉ ghi nhận và đẩy tác vụ vào SQS; worker trên EKS là nơi duy nhất thực thi, có cơ chế thử lại khi lỗi và tự mở rộng theo độ dài hàng đợi. Email giao dịch gửi qua SES.

Đánh đổi: thông báo có độ trễ vài giây, đổi lại API ổn định khi tải tăng.

04

Thông báo trong app theo thời gian thực

Vấn đề: người dùng cần thấy ngay lời mời, tin nhắn và thay đổi ca khi đang mở app.

Giải pháp: kết nối Socket.IO đặt trong Backend API; worker xử lý xong sẽ phát sự kiện tới đúng người dùng. Chỉ tách thành service riêng khi lượng kết nối đồng thời đủ lớn.

Đánh đổi: giữ kiến trúc đơn giản ở giai đoạn hiện tại, có sẵn hướng mở rộng.

05

Lưu trữ dữ liệu trong nước

Vấn đề: quy định yêu cầu một số loại dữ liệu người dùng lưu tại Việt Nam, trong khi hạ tầng chính đặt tại AWS Singapore.

Giải pháp: phân loại dữ liệu, chỉ đưa nhóm dữ liệu thuộc diện quy định về lưu trữ trong nước; phần còn lại giữ nguyên trên AWS.

Đánh đổi: thêm một điểm đồng bộ dữ liệu, đổi lại không phải di dời toàn bộ hệ thống.

06

Kubernetes trên EKS thay vì máy chủ riêng lẻ

Vấn đề: API, worker và web quản trị có nhu cầu tài nguyên khác nhau và tải biến động theo giờ trong ngày.

Giải pháp: mỗi thành phần là một deployment riêng trên EKS, tự mở rộng theo tải, cập nhật cuốn chiếu không gián đoạn; image lưu trên ECR.

Đánh đổi: đòi hỏi đội có kinh nghiệm vận hành Kubernetes.

07

Hạ tầng quản lý bằng Terraform

Vấn đề: cấu hình tay trên console khó kiểm soát, khó tái tạo môi trường và dễ sai lệch giữa staging với production.

Giải pháp: toàn bộ VPC, EKS, RDS, SQS, Route 53… được mô tả bằng Terraform, thay đổi qua review như code ứng dụng.

Đánh đổi: mất thời gian thiết lập ban đầu, đổi lại dựng môi trường mới trong thời gian ngắn.

08

Phát hành tự động với GitFlow và Jenkins

Vấn đề: deploy thủ công chậm, phụ thuộc vào một vài người và dễ sai sót.

Giải pháp: nhánh theo GitFlow; Jenkins tự build, chạy test, đẩy thư viện dùng chung lên CodeArtifact, đẩy image lên ECR và deploy lên EKS theo từng môi trường.

Đánh đổi: cần duy trì pipeline, đổi lại phát hành nhiều lần mỗi tuần một cách an toàn.

Kết quả

Kết quả vận hành

  • 25.000+người dùng
  • 1.200+nhà tuyển dụng
  • 99,9%uptime 12 tháng gần nhất
  • 12lần phát hành mỗi tháng

Kinh nghiệm áp dụng cho dự án khách hàng

Ra mắt sớm với phạm vi gọn. Phiên bản đầu tập trung vào một quy trình cốt lõi, đo lường rồi mới mở rộng.
Tự động hóa phát hành ngay từ đầu. Chi phí làm thủ công tăng dần theo quy mô hệ thống.
Thiết kế để dễ vận hành. Log, cảnh báo và công cụ quản trị quan trọng không kém tính năng cho người dùng.

Muốn tìm hiểu sâu hơn về kiến trúc Flexin?

Chúng tôi sẵn sàng chia sẻ chi tiết trong một buổi trao đổi 30 phút.

Đặt lịch trao đổi