我正在开发一个侧面项目,并且我重新设计了我的Skelton项目作为微服务,到目前为止,我没有找到任何遵循此模式的开源项目。经过大量的阅读和搜索,我总结了这个设计,但我仍然有一些问题和想法。NodeJS中的微服务体系结构
这里是我的问题和想法:
- 如何使API网关足够聪明来加载balnce请求,如果我有相同的微服务2节点?
- 如果其中一项微服务停滞不前,该发现应该如何知道?
- 有没有类似的实现?我的设计是对的吗?
- 我应该使用Eureka还是类似的东西?
我正在开发一个侧面项目,并且我重新设计了我的Skelton项目作为微服务,到目前为止,我没有找到任何遵循此模式的开源项目。经过大量的阅读和搜索,我总结了这个设计,但我仍然有一些问题和想法。NodeJS中的微服务体系结构
这里是我的问题和想法:
您的设计是确定的。
如果您的API网关需要执行(和多数民众可能的情况下),CAS /某种验证(通过服务之一 - 即某种类型的用户服务),还应该跟踪所有请求,并修改头部以承载请求者元数据(用于内部ACL /范围使用) - 您的API网关应该在Node中完成,但应该在Haproxy下,这将关心负载平衡/ HTTPS
发现位置正确 - if你寻找一个适合你的设计看起来无处可去,但Consul。
您可以使用consul-template或对服务和API-Gateway使用自己的微发现框架,以便它们在启动时共享端点数据。
ACL /授权应该实现每个服务,并且来自API网关的第一个请求应该服从所有授权中间件。
通过API Gateway为每个请求提供请求ID来跟踪请求是明智的,因此它的生命周期可以在“内部”系统中进行跟踪。
我会为消息/工作者/队列/快速内存中的东西(如缓存/缓存失效)(您无法处理所有MS架构而无需处理)添加Redis - 或者如果有更多分布式事务,则需要使用RabbitMQ;很多消息传递
将所有这些都放在容器(Docker)上,以便维护和组装。
至于BI为什么你需要一个服务呢?你可以有外部ELK Elastisearch,Logstash,Kibana),并且一次有仪表板,日志聚合和巨大的大数据仓库。
您的设计似乎没问题。我们还在使用API网关方法构建我们的微服务项目。包括网关服务(GW)在内的所有服务均为容器化(我们使用docker) Java应用程序(弹簧启动或dropwizard)。类似的架构也可以使用nodejs来构建。有些话题说与你的问题相关:
API网关通常具有负载平衡功能,内置。有些甚至实现了粘滞会话等功能。三种最流行的API网关都是负载平衡器(它们最初并不是作为API网关设计的):haproxy,Nginx和Apache。使用Web服务器和负载均衡器作为API网关的问题是,如果您想添加或删除节点,则需要重新启动网关。我编写了一个API网关,专门用于允许在不重新启动的情况下动态添加和删除节点:https://github.com/slebetman/typhos。它还没有准备好进行生产,但你可以分叉它 – slebetman
另外,由于API网关通常是负载平衡器,它们通常具有检测返回400和500错误的节点的功能。所以通常发现服务只是将url返回给服务,并且该url几乎总是指向API网关。一些架构不使用API网关(亚马逊),所以它们所依赖的发现服务来检测击落节点 – slebetman
@slebetman呀我知道,但我从头开始构建它,因为我没有发现任何好的网关做的NodeJS你推荐任何 ? –