我一直致力于移动技术,现在我正在涉足后端系统,更具体地说是系统设计。我不断遇到关于 api 网关和负载均衡器角色的相互矛盾的陈述。谷歌搜索只返回了同样的六个结果,这些结果主要集中在一些著名服务提供的负载均衡器或 API 网关服务的实现上。我将在这里列出我面临的所有困惑,希望有人能够澄清所有这些。
有时,我发现 API 网关是与客户端设备通信的单点。另一方面,有些地方提到“请求发送到负载均衡器,负载均衡器将其均匀地分布在服务器上”。那么什么是正确的呢?API网关接收请求还是负载均衡器?
其他地方,当我用谷歌搜索这个主题时,说两者完全不同。我知道 API Gateway 可以做很多事情,比如 SSL 终止、日志记录、限制、验证等,但它也可以做负载平衡。那么API网关本身就是一个负载均衡器,还具备其他职责吗?
关于这个主题,我想了解负载均衡器是否在同一集群的服务器之间或不同的数据中心或集群之间分配负载?那么 API 网关呢?
api gateway 有什么特殊之处以至于它成为微服务架构的默认选择?API 网关托管在哪里?DNS 将域名解析为负载均衡器或 API 网关?
可能很清楚,我完全困惑了。如果问题正确的话,在哪些系统中负载均衡器比 API Gateway 受益更多。
dns load-balancing distributed-system system-design api-gateway
假设我们有一个通知服务,它从消息队列中读取事件并实时通知所有Web客户端.我知道Web套接字是如何工作的,但是当我们之间有一个API网关然后如何在客户端,API网关和通知服务之间维护Web套接字连接时我很困惑.
请帮忙!谢谢
我听说过“上游服务”和“下游服务”这两个一般术语,但我遇到了一些关于微服务架构的文章,他们使用了这些术语,但是我无法理解上游和下游服务是什么在基于微服务的架构中会是?有人有一个简短的解释吗?
我已经知道上游服务是那些不依赖于任何其他服务而下游服务依赖于上游服务的服务,例如前端将是后端的下游服务,因为它依赖于它。
我正在 .Net Core 中开发微服务。
这是我从API网关自动生成的javascript SDK中获得的错误.
{
"data": "",
"status": 0,
"statusText": "",
"headers": {
},
"config": {
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
"x-amz-date": "20180127T231842Z",
"Authorization": "AWS4-HMAC-SHA256 Credential=.....",
"x-amz-security-token": "....."
},
"timeout": 0,
"transformRequest": [null],
"transformResponse": [null],
"url": "https://somevalues.execute-api.us-west-2.amazonaws.com/env/some/path",
"data": "{\"startDay\":0,\"endDay\":1}"
}
}
Run Code Online (Sandbox Code Playgroud)
我查看了我的cloudwatch日志,并且呼叫成功了.我将API网关绑定到AWS lambda作为无服务器功能设置.
我从未见过这些类型的错误,但今天我得到了其中的5个错误.后续调用全部奏效.
编辑:这可能与CORS设置有关吗?每隔一段时间API网关似乎打嗝并且不会发送回适当的CORS.可能是功能冷的时候?我不确定...
编辑2:我刚刚验证 - 我的所有OPTIONS端点(用于CORS的端点)都不需要auth或api密钥.所以我认为不是这样的.
编辑4:编辑3错了,我正在击中错误的端点.使用curl命中我的API OPTIONS端点可以正常工作.
编辑5:查看云观察中的API网关日志,这就是它们的样子......此时完全丢失了.
[32m/aws/lambda/supercoolsoftware-prod-createInviteCode[0m [36m2018/02/26/[$LATEST]8578bb59ab0538558fabef7bd1f484a2[0m START RequestId: e3g4f130-1b35-11e8-b0cf-e7f75f2e4dc1 Version: $LATEST
[32m/aws/lambda/supercoolsoftware-prod-createInviteCode[0m [36m2018/02/26/[$LATEST]8578bb59ab0538558fabef7bd1f484a2[0m END RequestId: e3g4f130-1b35-11e8-b0cf-e7f75f2e4dc1
[32m/aws/lambda/supercoolsoftware-prod-createInviteCode[0m [36m2018/02/26/[$LATEST]8578bb59ab0538558fabef7bd1f484a2[0m REPORT RequestId: e3g4f130-1b35-11e8-b0cf-e7f75f2e4dc1 Duration: 10007.96 ms Billed Duration: 10000 ms Memory Size: 128 MB …Run Code Online (Sandbox Code Playgroud) 我一直在开发微服务(Spring Cloud)一段时间(〜2年)并且大量使用Netflix Zuul.虽然它提供了许多功能和强大功能,但我的开发人员仍然想知道替代方案,并了解了Tyk和Kong.
从个人文档和博客中读取,我或多或少地了解它们都提供了类似的功能.我想知道两者之间的全面比较,以及您实施的任何实际示例都将是一个很好的帮助理解.
我正在 $connect 路由上设置一个带有自定义授权方的 AWS API Gateway Websockets,如下所述:
我的问题是——我如何获得 connectionID,即我可以用来稍后向该连接的客户端广播的标识符?
我正在研究微服务架构,我想聚合来自两个微服务的数据。
例如,Frontend 调用 API Gateway,API Gateway 调用两个微服务 Customer 和 Order 微服务。客户微服务返回客户详细信息,订单微服务返回客户所有订购的产品。
这是使用 Ocelot 或 Azure API 管理从两个微服务聚合后 API 网关返回的格式。
格式 1
{
"Customers":[
{
"customerId":1001,
"customerName":"Tom"
},
{
"customerId":1002,
"customerName":"Jerry"
}
],
"Orders":[
{
"CustomerId":1001,
"Orders":[
{
"ProductId":"PRO1",
"ProductName":"Books"
},
{
"ProductId":"PRO2",
"ProductName":"Pens"
}
]
},
{
"CustomerId":1002,
"Orders":[
{
"ProductId":"PRO3",
"ProductName":"Pencils"
},
{
"ProductId":"PRO4",
"ProductName":"Toys"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想要的格式是格式 2。
格式 2
{
"OrderDetails":[
{
"customerId":1001,
"customerName":"Tom",
"Orders":[
{
"ProductId":"PRO1",
"ProductName":"Books"
},
{
"ProductId":"PRO2",
"ProductName":"Pens"
}
] …Run Code Online (Sandbox Code Playgroud) azure-api-management microservices aws-api-gateway api-gateway ocelot
我想知道api gateway和Ingress controller之间有什么区别。由于它们提供的相似功能,人们倾向于互换使用这些术语。当我说“入口控制器”时;不要将它与kubernetes 提供的Ingress对象混淆。此外,如果您能解释一个比另一个更有用的场景,那就太好了。
api 网关是云原生世界中用于流量路由器的通用术语,而“入口控制器”是 Kubernetes 世界中 api-gateway 的实现吗?
在将传入的 http 请求转发到下游路径时,我正面临此警告/错误。
Ocelot.DownstreamRouteFinder.Middleware.DownstreamRouteFinderMiddleware:警告:requestId:80000025-0004-fd00-b63f-84710c7967bb,previousRequestId:没有先前的请求ID,消息:DownstreamRouteFinderMiddleware 设置管道错误。IDownstreamRouteFinder 返回错误代码:UnableToFindDownstreamRouteError 消息:无法匹配上游路径的路由配置:/getDepartment,动词:GET。
程序.cs
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((host, config) =>
{
config.AddJsonFile("ocelot.json");
})
.UseStartup<Startup>();
}
Run Code Online (Sandbox Code Playgroud)
启动文件
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public …Run Code Online (Sandbox Code Playgroud) 我尝试通过 cloudformation 模板为 AWS API Gateway 启用 cloudwatch 日志,但它没有启用。我尝试在阶段描述和方法设置中将日志记录级别设置为 INFO。你知道我错过了什么吗?
当我通过 UI 手动启用日志记录时,它可以工作。当我尝试通过 cloudformation 模板启用时不起作用,如下所示 -
注意:我只是使用普通的 cloudformation 模板,并且我已经添加了角色 ARN,该角色 ARN 有权在我的帐户中访问 API Gateway 来记录 cloudwatch
TestDeployment:
Type: AWS::ApiGateway::Deployment
Properties:
Description: API Deployment
RestApiId: testApi
StageName: 'dev'
StageDescription:
Description: Stage - DEV
LoggingLevel: INFO
MethodSettings:
- ResourcePath: "/testresource"
HttpMethod: "POST"
LoggingLevel: INFO
Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-cloudformation aws-api-gateway api-gateway
api-gateway ×10
.net-core ×2
ocelot ×2
websocket ×2
aws-lambda ×1
dns ×1
kong ×1
kubernetes ×1
tyk ×1