Trang chủ › Blog › Giải pháp phát triển
Workflow Trong Microservices Là Gì? 7 Thách Thức Trong Kiểm Thử API?

Thông thường, thượng nguồn và hạ nguồn dùng để chỉ các quy trình sản xuất bao gồm thu mua (và khai thác). Tuy nhiên, trong lĩnh vực công nghệ, thượng nguồn và hạ nguồn trong microservices là thuật ngữ mô tả luồng công việc (workflow) của microservices. Bài viết này nhằm đưa ra câu trả lời rõ ràng cho câu hỏi thượng nguồn và hạ nguồn trong microservices nghĩa là gì, và cụ thể workflow của microservices là như thế nào.
1. Thượng nguồn và hạ nguồn trong microservices là gì?
Trong kiến trúc microservices, mỗi service đảm nhiệm một tác vụ hoặc chức năng cụ thể và liên kết với nhau thông qua API (Application Programming Interface). Khi hai hoặc nhiều microservice cần phối hợp, chúng sẽ chia sẻ dữ liệu qua API.
Thượng nguồn và hạ nguồn trong microservices là gì
Trong kiến trúc microservices dựa trên API, thuật ngữ "thượng nguồn" và "hạ nguồn" chỉ hướng đi của luồng dữ liệu. Service cung cấp dữ liệu hoặc chức năng được gọi là service "thượng nguồn", còn service nhận dữ liệu hoặc chức năng đó được gọi là service "hạ nguồn".
1.1. Thượng nguồn là gì
1.1.1. Thượng nguồn là gì
"Giai đoạn thượng nguồn" là giai đoạn quan trọng được thực hiện ở bước đầu của phát triển và thiết kế hệ thống, chủ yếu bao gồm các quy trình như "định nghĩa yêu cầu", "định nghĩa chức năng", "quản lý cấu hình" và "lập kế hoạch".
1.1.2. Các quy trình thuộc thượng nguồn
Có 4 quy trình chính sau đây:
- Quy trình "định nghĩa yêu cầu": thu thập mong muốn của khách hàng và tổng hợp thành các yêu cầu hệ thống.
- Quy trình "định nghĩa thành phần": cụ thể hóa các yêu cầu thành các chức năng.
- Quy trình "thiết kế cơ bản": thiết kế cấu trúc và cấu hình cơ bản của hệ thống để cung cấp các chức năng đó.
- Quy trình "thiết kế chi tiết": thiết kế trải nghiệm người dùng (UX) cho toàn bộ hệ thống.
Nhìn chung, mọi công đoạn sau khi bắt đầu lập trình được coi là giai đoạn hạ nguồn. Hiệu quả và tốc độ hoàn thành phát triển phụ thuộc rất nhiều vào giai đoạn thượng nguồn, vốn đóng vai trò quan trọng trong việc xác lập chất lượng và định hướng thiết kế.
1.1.3. Ví dụ về thượng nguồn
Microservice thượng nguồn cung cấp dữ liệu, chức năng hoặc dịch vụ cho microservice hạ nguồn. Ví dụ, service khách hàng có thể cung cấp dữ liệu khách hàng cho service đơn hàng.
1.2. Hạ nguồn là gì
1.2.1. Hạ nguồn là gì
"Giai đoạn hạ nguồn" là giai đoạn phát triển hệ thống và sản xuất thực tế, sử dụng các đặc tả, chức năng và ngôn ngữ lập trình đã được quyết định ở giai đoạn thượng nguồn. Thuật ngữ này bắt nguồn từ mô hình phát triển phần mềm "mô hình thác nước" (waterfall model), và đúng như tên gọi, nó thể hiện quy trình phát triển hệ thống trôi chảy từ thượng nguồn xuống hạ nguồn như một thác nước.
Mô hình thác nước
1.2.2. Các quy trình thuộc hạ nguồn
Hiểu về giai đoạn hạ nguồn giúp làm rõ hơn tầm quan trọng của giai đoạn thượng nguồn. Giai đoạn hạ nguồn bao gồm các yêu cầu chính như "triển khai (lập trình)", "kiểm thử" và "đưa vào vận hành".
- Quy trình "triển khai" (lập trình): phát triển dựa trên các chức năng và ngôn ngữ lập trình đã quy định.
- Quy trình "kiểm thử": xác nhận các chức năng đã hoàn thành có hoạt động bình thường và phản hồi phù hợp hay không.
- Quy trình "đưa vào vận hành và bảo trì": bước phát hành cuối cùng lên môi trường production, xác nhận hệ thống có thực sự hoạt động trong môi trường của khách hàng hay không.
Ở giai đoạn hạ nguồn, những gì đã được định nghĩa ở thượng nguồn sẽ được cụ thể hóa và kiểm thử xem có hoạt động hay không. Do đó, càng tiến sâu vào giai đoạn hạ nguồn thì việc thay đổi chức năng càng trở nên khó khăn. Nếu thay đổi chức năng hoặc cấu hình ở giai đoạn hạ nguồn có thể phát sinh vấn đề về tính nhất quán hoặc không đáp ứng đủ chức năng mà khách hàng cần — đây chính là lý do cho thấy tầm quan trọng của giai đoạn thượng nguồn.
1.2.3. Ví dụ về hạ nguồn
Microservice hạ nguồn nhận dữ liệu, chức năng hoặc dịch vụ từ microservice thượng nguồn. Ví dụ, service giỏ hàng có thể nhận dữ liệu sản phẩm từ service sản phẩm.
1.3. Ví dụ về thượng nguồn và hạ nguồn trong microservices
Hãy xét một ví dụ đơn giản: một ứng dụng thương mại điện tử (trang web e-commerce).
Giả sử ứng dụng thương mại điện tử này có 4 microservice chính: "danh mục sản phẩm", "quản lý tồn kho", "xử lý đơn hàng" và "xử lý thanh toán".
Các microservice của trang web e-commerce
Trong trường hợp này, microservice danh mục sản phẩm là microservice thượng nguồn và cung cấp dữ liệu cho microservice quản lý tồn kho ở hạ nguồn. Tương tự, microservice quản lý tồn kho là thượng nguồn và cung cấp dữ liệu cho microservice xử lý đơn hàng ở hạ nguồn. Ngược lại, microservice xử lý thanh toán nhận dữ liệu từ microservice xử lý đơn hàng để thực hiện thanh toán, nên nó nằm ở hạ nguồn của microservice xử lý đơn hàng.
2. Luồng dữ liệu trong microservices
Luồng dữ liệu là yếu tố trung tâm của giao tiếp bất đồng bộ trong một kiến trúc microservices điển hình. Service hạ nguồn gửi request API khi cần, service thượng nguồn xử lý và phản hồi lại; sau đó service hạ nguồn sử dụng phản hồi này để thực hiện xử lý riêng của mình. Luồng dữ liệu chỉ đi theo một chiều — microservice thượng nguồn cung cấp dữ liệu và chức năng cho microservice hạ nguồn — nhưng một microservice hạ nguồn cũng có thể đồng thời đóng vai trò là service thượng nguồn.
Việc hiểu luồng dữ liệu giữa các microservice là điều thiết yếu cho thiết kế kiến trúc, kiểm thử và xử lý sự cố. Điều này giúp đội ngũ phát triển và QA xác định dữ liệu, chức năng mà mỗi service cần để thực hiện tác vụ hiệu quả, đồng thời xác định và giải quyết các vấn đề liên quan đến thay đổi ở service thượng nguồn hoặc thay đổi định dạng, cấu trúc dữ liệu của phản hồi API.
Với nền tảng hiểu biết về luồng dữ liệu này, chúng ta nên suy nghĩ như thế nào về các thách thức có thể gặp phải khi kiểm thử API thượng nguồn hoặc hạ nguồn?
3. 7 thách thức trong kiểm thử API
Thách thức trong kiểm thử API xuất phát từ nhiều yếu tố khác nhau. Sự phụ thuộc bên ngoài, yêu cầu xác thực, thay đổi API thượng nguồn, độ phức tạp, yêu cầu về môi trường kiểm thử, bảo mật và hiệu năng đều có thể ảnh hưởng đến quá trình kiểm thử. Hãy cùng xem xét các thách thức này một cách cụ thể hơn.
- Phụ thuộc vào hệ thống bên ngoài: API hạ nguồn thường xuyên phụ thuộc vào các hệ thống bên ngoài (ví dụ: database, server, các API thượng nguồn khác), và kiểm thử các hệ thống này đòi hỏi phải phối hợp với các đội ngũ bên ngoài. Vì vậy, có nguy cơ chậm trễ trong quá trình kiểm thử.
- Xác thực/phân quyền: Hầu hết API hạ nguồn cần xác thực để lấy dữ liệu, và nếu cấu hình xác thực không chính xác sẽ khiến hạ nguồn không thể lấy được dữ liệu.
- Thay đổi ở API thượng nguồn: API thượng nguồn thường xuyên thay đổi, điều này có thể gây ra vấn đề tương thích hoặc lỗi ở API hạ nguồn. Do đó, cần theo dõi và cập nhật API hạ nguồn tương ứng.
- Độ phức tạp: API hạ nguồn có thể liên quan đến nhiều nguồn dữ liệu và các phép biến đổi dữ liệu phức tạp, khiến việc kiểm thử trở nên khó khăn và tốn thời gian hơn.
- Môi trường kiểm thử: API hạ nguồn cần môi trường kiểm thử riêng, và việc thiết lập, duy trì các môi trường đó có thể khó khăn và tốn thời gian.
- Bảo mật: API hạ nguồn có thể dễ bị tấn công bởi các mối đe dọa bảo mật, do đó cần đảm bảo an toàn cho API và bảo vệ dữ liệu.
- Hiệu năng: API hạ nguồn cần xử lý khối lượng request lớn, khiến hiệu năng trở thành yếu tố quan trọng. Kiểm thử khả năng mở rộng và hiệu năng đòi hỏi công cụ và chuyên môn đặc thù.
4. FAQ
Câu 1. Thượng nguồn là gì?
Giai đoạn thượng nguồn là giai đoạn quan trọng được thực hiện ở bước đầu của phát triển và thiết kế hệ thống, chủ yếu bao gồm các quy trình như "định nghĩa yêu cầu", "định nghĩa chức năng", "quản lý cấu hình" và "lập kế hoạch".
Câu 2. Hạ nguồn là gì?
Giai đoạn hạ nguồn là giai đoạn phát triển hệ thống và sản xuất thực tế, sử dụng các đặc tả, chức năng và ngôn ngữ lập trình đã được quyết định ở giai đoạn thượng nguồn. Thuật ngữ này bắt nguồn từ mô hình phát triển phần mềm "mô hình thác nước" (waterfall model), và đúng như tên gọi, nó thể hiện quy trình phát triển hệ thống trôi chảy từ thượng nguồn xuống hạ nguồn như một thác nước.
Câu 3. Ví dụ về thượng nguồn và hạ nguồn trong microservices là gì?
Hãy xét một ví dụ đơn giản: một ứng dụng thương mại điện tử (trang web e-commerce).Trong trường hợp này, microservice danh mục sản phẩm là microservice thượng nguồn và cung cấp dữ liệu cho microservice quản lý tồn kho ở hạ nguồn. Tương tự, microservice quản lý tồn kho là thượng nguồn và cung cấp dữ liệu cho microservice xử lý đơn hàng ở hạ nguồn. Ngược lại, microservice xử lý thanh toán nhận dữ liệu từ microservice xử lý đơn hàng để thực hiện thanh toán, nên nó nằm ở hạ nguồn của microservice xử lý đơn hàng.
5. Tổng kết
Trong bài viết này, chúng tôi đã giải thích khái niệm thượng nguồn và hạ nguồn trong microservices, các quy trình chính liên quan, và các ví dụ cụ thể. Tóm lại, thượng nguồn và hạ nguồn là các thuật ngữ chỉ hướng đi của luồng dữ liệu trong kiến trúc microservices: service thượng nguồn cung cấp dữ liệu hoặc chức năng, còn service hạ nguồn tiếp nhận chúng. Việc hiểu luồng dữ liệu này là điều thiết yếu trong thiết kế, kiểm thử và xử lý sự cố. Chúng tôi cũng đã trình bày 7 thách thức thường gặp trong kiểm thử API.
Việc hiểu rõ những kiến thức này là yếu tố không thể thiếu để triển khai và duy trì thành công một kiến trúc microservices.
Chúng tôi tự tin vào năng lực dẫn dắt các dự án CNTT và tự hào có thể đóng góp vào thành công trong kinh doanh của quý khách hàng. Miichisoft là công ty công nghệ Việt Nam sở hữu nhiều câu chuyện thành công trong phát triển ứng dụng đa nền tảng cho thị trường Nhật Bản. Với hơn 150 dự án thành công, chúng tôi đã tích lũy được một bề dày kinh nghiệm vững chắc. Nếu quý vị quan tâm đến phát triển hệ thống, hãy liên hệ với chúng tôi để cùng nhau khám phá cơ hội hợp tác kinh doanh.




