2015-10-16 19 views
7

Đối với dự án mới của tôi, tôi phải sử dụng Dịch vụ vi mô với Cổng Api. Vì vậy, tôi đã thu thập thông tin chi tiết về Dịch vụ Micro nhưng phần Api Gateway không rõ ràng.Dịch vụ Micro với Cổng API

Câu hỏi của tôi là,

  1. Có ai biết về cách yêu cầu định tuyến phần được thực hiện trong Api Gateway?
  2. Có phải như vậy có thể được thực hiện bằng cách đơn giản nếu tình trạng [code giả: if (từ khóa == "sản phẩm") sau đó tuyến đường ("Sản phẩm dịch vụ")]?
  3. Hoặc đó có phải là cách tốt nhất để làm điều đó không?

Tôi đang sử dụng C# .Net để phát triển Api.
Tôi có một số thông tin về Api Cổng từ https://www.nginx.com/blog/building-microservices-using-an-api-gateway/

Api Gateway

+1

Hoạt động của cổng API như đăng nhập proxy + bảo mật. Bạn có thể chuyển url tới dịch vụ 'product' mà bạn muốn truy cập và cổng sẽ ủy quyền nó. – sed

Trả lời

9

Bạn khá nhiều hỏi ba câu hỏi và họ đang tất cả phần nào liên quan vì vậy tôi sẽ cố gắng hết sức để giải quyết cả ba cùng nhau.

Đối với một, yêu cầu định tuyến trong cổng API không chỉ là proxy và việc triển khai sẽ không liên quan đến điều kiện để kiểm tra yêu cầu trước khi vận chuyển đến dịch vụ hạ lưu. Cổng API có thể sẽ là điểm vào duy nhất cho các dịch vụ của bạn, trong đó xác thực cũng sẽ được quản lý trên lớp để đảm bảo rằng yêu cầu có quyền truy cập vào dịch vụ hạ lưu. Xác thực có khả năng là một dịch vụ khác. Việc triển khai cấp cao của cổng API có khả năng củng cố nhiều nhất nếu không phải tất cả các điểm cuối trên tất cả các dịch vụ hạ lưu.

Cho phép lấy một ví dụ nhỏ như ứng dụng thương mại điện tử bao gồm dịch vụ cho danh sách sản phẩm, tìm kiếm sản phẩm và giỏ hàng. Cổng API sau đó cũng sẽ có cùng các điểm cuối này và sẽ ủy quyền yêu cầu thêm cho một dịch vụ chịu trách nhiệm cho yêu cầu. API trong ví dụ này có thể có /products để liệt kê tất cả các sản phẩm, /products?query=... để tìm kiếm sản phẩm và cuối cùng là /carts/:id/products để liệt kê các sản phẩm trong giỏ hàng. Hy vọng điều này trả lời câu hỏi của bạn. Bên cạnh đó, tôi biết rằng bạn đã đề cập rằng nó cho một dự án mới và chỉ muốn cung cấp cho bạn 2 xu rằng đây có thể không phải là kiến ​​trúc tốt nhất để sử dụng cho dự án mới của bạn nếu nhóm của bạn thực sự nhỏ vì có một chi phí hoạt động lớn. Overhead yêu cầu chuẩn hóa, tự động hóa các triển khai, tích hợp, vv Có lẽ tốt nhất là bắt đầu với một kiến ​​trúc MVC truyền thống và từ từ phát triển nó thành các dịch vụ nhỏ khi dự án đã cất cánh.

+0

Nó đưa ra một số ý tưởng. Cảm ơn! –

1

Tùy thuộc vào kiến ​​trúc của bạn, bạn có thể sử dụng một số phần mềm thực sự thú vị như Weave với CoreOS (https://github.com/weaveworks/weave). Chúng tôi đang sử dụng Docker để phân phối các ứng dụng của chúng tôi lên các nút CoreOS, và sau đó DNS nội bộ được xử lý bởi Weave.

Điều này thực sự tuyệt vời vì chúng tôi chỉ có thể chuyển tiếp yêu cầu đến tên ứng dụng bằng cổng, sau đó chúng tôi tắt và đi.

Ví dụ: người dùng yêu cầu application.com/api/apiName/request/path

Cổng của chúng tôi được triển khai bằng Nút.js, và phải mất apiName sau/api để định tuyến nó tới api đó, và sau đó đường dẫn sau của URL để nối thêm vào chính cuộc gọi đó.

Vì vậy, yêu cầu từ cổng sẽ được proxy nội bộ dưới dạng apiName: 8080/request/path. Về vấn đề đó, API không yêu cầu thay đổi khi các dịch vụ mới xuất hiện, vì đường dẫn được tạo động từ yêu cầu của bạn.

Điều này thật tuyệt vì chúng tôi không phải lo lắng về việc theo dõi đường dẫn từ các API khác nhau và lưu trữ chúng ở đâu đó.

Nếu không, bạn sẽ phải duy trì một số danh sách các điểm cuối (có thể là bên ngoài) để giúp bạn dễ dàng hơn. Điều này có thể được thực hiện theo chương trình từ chính API.

Tôi không chắc chắn yêu cầu của bạn là gì, tuy nhiên, và như Will đã trả lời, nó có chi phí cơ sở hạ tầng khá lớn. Tuy nhiên, bản phát hành của chúng tôi nhanh và không đau vì chúng tôi không phải lo lắng về việc thực hiện thay đổi mã trong nhiều lớp và API mới nhận proxy, đăng nhập và xác thực cổng của chúng tôi miễn phí.

Các vấn đề liên quan