我正在整理一个概念证明,以帮助使用Spring Boot/Netflix OSS和Kubernetes一起识别陷阱.这也是为了证明Prometheus和Graphana等相关技术.
我有一个Eureka服务设置,在我的Kubernetes clouster中没有任何问题.这被命名为discovery,并在使用K8添加到K8时被命名为"discovery-1551420162-iyz2c"
kubectl run discovery --image=xyz/discovery-microservice --replicas=1 --port=8761
对于我的配置服务器,我正在尝试使用基于逻辑URL的Eureka,所以在我的bootstrap.yml中
server:
port: 8889
eureka:
instance:
hostname: configserver
client:
registerWithEureka: true
fetchRegistry: true
serviceUrl:
defaultZone: http://discovery:8761/eureka/
spring:
cloud:
config:
server:
git:
uri: https://github.com/xyz/microservice-config
Run Code Online (Sandbox Code Playgroud)
我正在开始使用它
kubectl run configserver --image=xyz/config-microservice --replicas=1 --port=8889
Run Code Online (Sandbox Code Playgroud)
该服务最终运行命名为configserver-3481062421-tmv4d.然后我在配置服务器日志中看到异常,因为它试图找到eureka实例而不能.
我有相同的设置使用docker-compose本地链接,它启动各种容器没有任何问题.
discovery:
image: xyz/discovery-microservice
ports:
- "8761:8761"
configserver:
image: xyz/config-microservice
ports:
- "8888:8888"
links:
- discovery
Run Code Online (Sandbox Code Playgroud)
我怎么能设置像eureka.client.serviceUri这样的东西,这样我的微服务可以在不知道K8集群内的固定IP地址的情况下定位他们的同行?
spring-boot kubernetes microservices netflix-eureka spring-cloud-netflix
如何在.NET世界中构建面向微服务的应用程序?是否有任何平台可以在.NET世界中编写面向微服务的应用程序?如何设想包含微服务,事件存储和一些NoSQL数据库的架构?谢谢.
我对网络应用程序分散到微服务这一点感到困惑 - 它是在url级别还是在模型级别?举个例子,假设我有一个3页的单片应用程序.假设每个页面都有一个单独的用例,我想用他们自己的微服务来支持它们.现在,哪些是实现基于微服务的架构的正确方法:

背景:
我正在构建一个应用程序,所提出的架构是微服务架构上的事件/消息驱动.
做事的单一方式是我有一个User/HTTP request和那个动作一些直接的命令synchronous response.因此,响应相同的用户/ HTTP请求是"无忧无虑".
问题:
用户发送HTTP request到UI服务(有多个UI服务),该触发某些事件到队列(卡夫卡/ RabbitMQ的/有).N个服务选择事件/消息在此过程中做了一些魔术,然后在某些时候,相同的UI服务应该选择响应并将其返回给发起HTTP请求的用户.请求处理ASYNC,但User/HTTP REQUEST->RESPONSE是SYNC按照典型的HTTP交互.
问题: 如何在此不可知/事件驱动的世界中向发起操作的同一UI服务(通过HTTP与用户交互的服务)发送响应?
到目前为止,我的研究 一直在环顾四周,似乎有些人正在使用WebSockets解决这个问题.
但是复杂性层需要有一些映射表,(RequestId->Websocket(Client-Server))用于"发现"网关中的哪个节点具有用于某些特定响应的websocket连接.但即使我理解了问题和复杂性,我也陷入困境,我找不到任何可以提供有关如何在实现层解决此问题的信息的文章.和这还不是因为第三方集成如预期支付服务提供商(WorldPay的)的一个可行的选择REQUEST->RESPONSE-特别是关于3DS验证.
所以我不知道如何认为WebSockets是一个选项.但即使WebSockets适用于Webfacing应用程序,连接到外部系统的API也不是一个很好的架构.
******更新:******
即使长轮询是带有202 Accepteda Location header和a 的WebService API的可能解决方案,retry-after header它也不具备高并发性和高性能网站的性能.想象一下,有很多人试图在他们提出的每个请求上更新事务状态,你必须使CDN缓存无效(现在去玩这个问题!哈).
但最重要且与我的情况相关的是我的第三方API,例如支付系统,其中3DS系统具有由支付提供商系统处理的自动重定向,并且他们期望是典型的REQUEST/RESPONSE flow,因此这种模型对我和套接字都不起作用模型会起作用.
由于这个用例,HTTP REQUEST/RESPONSE应该以典型的方式处理,我有一个愚蠢的客户端,期望在后端处理进动的复杂性.
所以我正在寻找一个解决方案,在外部我有一个典型的Request->Response(SYNC)和状态的复杂性(系统的ASYNCrony)在内部处理
长轮询的一个示例,但此模型不适用于第三方API,例如支付提供商,3DS Redirects这不在我的控制之内.
POST /user
Payload {userdata}
RETURNs:
HTTP/1.1 202 Accepted
Content-Type: application/json; charset=utf-8 …Run Code Online (Sandbox Code Playgroud) 考虑以下针对在线商店项目的微服务:
用户服务保存有关商店用户的帐户数据(包括名字,姓氏,电子邮件地址等)
采购服务会跟踪用户购买的详细信息.
每项服务都提供用于查看和管理其相关实体的UI.购买服务索引页面列出了购买.每个购买项目应包含以下字段:
id,购买用户的全名,购买的商品标题和价格.
此外,作为索引页面的一部分,我想有一个搜索框让商店经理通过购买用户名来搜索购买.
我不清楚如何获取采购服务不具备的数据 - 例如:用户的全名.当尝试通过购买用户名来执行更复杂的搜索购买时,问题会变得更糟.
我想通过在用户创建时广播某种事件(并且只保存购买服务端的相关用户属性),我可以通过在两个服务之间同步用户来解决这个问题.从我的角度来看,这远非理想.当你有数百万用户时,你如何处理这个问题?你会在每个消费用户数据的服务中创建数百万条记录吗?
另一个明显的选择是在用户服务端公开API,它根据给定的ID返回用户详细信息.这意味着购买服务中的每个页面加载,我都必须调用用户服务才能获得正确的用户名.不理想,但我可以忍受它.
如何根据用户名实施购买搜索?我总是可以在Users Service端公开另一个API端点,它接收查询项,在Users Service中对用户名执行文本搜索,然后返回符合条件的所有用户详细信息.在采购服务中,将相关的ID映射回正确的名称并在页面中显示它们.这种方法也不理想.
我错过了什么吗?有没有其他方法来实现上述?也许我面临这个问题的事实是一种代码味道?我很乐意听到其他解决方案.
我有一个基于服务的应用程序,它使用具有多个队列和多个消费者的Amazon SQS.我这样做是为了实现基于事件的体系结构并解耦所有服务,其中不同的服务对其他系统的状态变化做出反应.例如:
我有很多问题:
我想我的问题是:我应该使用哪些模式来确保我可以在SQS中为单个队列拥有多个使用者,同时确保消息也可以被可靠地传递和删除.谢谢您的帮助.
event-based-programming amazon-sqs amazon-web-services microservices
虽然每个微服务通常都有自己的数据 - 但某些实体需要在多个服务之间保持一致.
对于高度分布式环境(如微服务架构)中的此类数据一致性要求,设计有哪些选择?当然,我不想要共享数据库体系结构,其中单个数据库管理所有服务的状态.这违反了孤立和无共享的原则.
我明白,微服务可以在创建,更新或删除实体时发布事件.对此事件感兴趣的所有其他微服务可以相应地更新其各自数据库中的链接实体.
这是可行的,但它会导致整个服务中的许多仔细和协调的编程工作.
Akka或任何其他框架可以解决这个用例吗?怎么样?
编辑1:
为清楚起见,添加下图.
基本上,我试图理解,如果今天有可用的框架可以解决这个数据一致性问题.
对于队列,我可以使用任何AMQP软件,如RabbitMQ或Qpid等.对于数据一致性框架,我不确定目前Akka或任何其他软件是否可以提供帮助.或者这种情况是如此罕见,以及这种反模式,不需要任何框架?

我正在开发我对分布式系统的洞察力,以及如何在这些系统中保持数据一致性,其中业务事务涵盖多个服务,有限的上下文和网络边界.
以下是我知道用于实现分布式事务的两种方法:
2PC是应用程序通过平台的支持透明地利用全局ACID事务的协议.作为平台的嵌入,据我所知,它对业务逻辑和应用程序代码是透明的.
另一方面,Sagas是一系列本地事务,其中每个本地事务变异并持久化实体以及指示全局事务的阶段并提交更改的一些标志.换句话说,事务的状态是域模型的一部分.回滚是进行一系列"倒置"交易的问题.在两种情况下,服务发出的事件都会触发这些本地事务.
现在,何时以及为什么人们会使用传真而不是2PC,反之亦然?两者的用例和优点/缺点是什么?特别是,传奇的脆弱让我感到紧张,因为倒置的分布式交易也可能失败.
我想开发一个微服务结构的项目。我必须使用 php/laravel 和 nodejs/nestjs 我的微服务之间的最佳连接方法是什么。我读到了 RabbitMQ 和 NATS 消息传递以及 GRPC 哪个选项更适合微服务?为什么?提前致谢
背景
我想实现本文中介绍的设计.
到目前为止我有什么
我完成了大部分工作:
我还编写了一个Zuul PRE过滤器,用于检查访问令牌,联系IDP并创建JWT.然后将JWT添加到转发到下游服务的请求的标头中.
问题
现在我的问题非常具体针对Zuul及其过滤器.如果由于任何原因在API网关中验证失败,我怎样才能停止路由并直接用401响应而不继续过滤链并转发呼叫?
如果验证失败,过滤器将不会将JWT添加到标头,401将来自下游服务.我希望我的网关可以阻止这种不必要的通话.
我试着看看我怎么com.netflix.zuul.context.RequestContext用来做这个,但文档很差,我找不到办法.
microservices ×10
spring-boot ×2
.net ×1
akka ×1
amazon-sqs ×1
apache-kafka ×1
architecture ×1
cloud ×1
gateway ×1
grpc ×1
kubernetes ×1
nats.io ×1
netflix-zuul ×1
node.js ×1
rabbitmq ×1
rest ×1
saga ×1
soa ×1
spring-cloud ×1
transactions ×1
web-services ×1
websocket ×1