通过HTTP进行微服务通信以实现内部流量和相当的费用

时间:2019-01-30 21:03:10

标签: iis microservices url-rewrite-module arr

我有两个微服务和一个网站,它们都托管在IIS的同一框中,如下所示:

默认网站

  1. 微服务1-GET / api / values-需要JWT令牌
  2. 微服务2-GET / api / values / 1 / objects-需要JWT令牌
  3. 网站

要求:

  1. 微服务到微服务的通信应通过HTTP进行。
  2. 网站到微服务的通信应通过HTTPS完成。
  3. 公开API的
  4. 客户端(非网站)应受到速率限制。但是,不应限制从网站到微服务的流量。

我该怎么做?我知道IIS速率限制,ARR和URL重写,但是如何将所有这些放在一起?在同一盒子上托管的微服务中是否存在这种行为的典型模式?

1 个答案:

答案 0 :(得分:1)

模式

有一个称为API Gateway的著名模式,我建议您将其作为首选。它基本上是一个用于处理所有请求的入口点,但是它不能像反向代理一样工作,它还可能包括限制,速率限制,身份验证等资源。

费率限制

客户端始终从外部网络访问应用程序的公共域,在外部网络中是监视费率的位置。虽然您的服务应该通过本地网络在它们之间进行通信,例如IP地址或服务名称(容器名称),但是这里没有控制权。当然,本地通信要比外部通信快得多。

SSL

由于您有一个处理请求的中心点,因此可以在此实例中设置SSL,它将监听HTTPS调用,将它们代理到内部服务。如果它们都在同一服务器上,则使用docker network进行配置并使它们一起工作非常容易。

网关API

作为API网关,我强烈建议您查看Kong。它易于使用,效果很好,即使在复杂的情况下,也可以解决大多数问题。

复杂场景

仅为了大致概述复杂的场景和可伸缩性,您将需要一些service discovery,它将通过服务集中请求的可用性和分发。例如:访问abc.example.com时,它可以将请求重定向到三个不同的服务实例(10.0.0.1、10.0.0.2、10.0.0.3)。 Consul是处理此问题的好工具。