问题标签 [microservices]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
79528 浏览

http - 编排微服务

编排微服务的标准模式是什么?

如果一个微服务只知道自己的领域,但是有一个数据流需要多个服务以某种方式交互,那该怎么做呢?

假设我们有这样的事情:

  • 发票
  • 运输

为了便于讨论,假设一旦订单发货,就应该创建发票。

在某个地方,有人按下了一个按钮GUI,“我完成了,让我们开始吧!” 在经典的单体服务架构中,我会说要么有一个ESB处理这个,要么发货服务知道发票服务并调用它。

但是在这个勇敢的微服务新世界中,人们如何处理这个问题?

我确实知道这可以被认为是高度基于意见的。但它有一个具体的方面,因为微服务不应该做上述事情。所以必须有一个“根据定义它应该做什么”,这不是基于意见的。

射击。

0 投票
1 回答
327 浏览

python - uWSGI:使用皇帝模式,为vassal注册内部路由规则

我正在使用 uWSGI 来部署 python wsgi 微服务。

我的架构看起来像:

  • Emperor => 处理以 /api 开头的所有请求的路由
  • Vassal "users" => 处理 /api/users 上的请求
  • 附庸“付款” => 处理 /api/payments 上的请求
  • 等等

路由由皇帝使用内部路由规则处理。

我的问题是路由规则是在皇帝配置文件中静态定义的。

1/有没有办法让附庸“动态”(=在启动时)向皇帝内部路由表添加规则?

2/如果没有,皇帝有没有办法在启动时从附庸“获取”路由规则?

0 投票
1 回答
1008 浏览

spring-security - Spring Security OAuth2 授权服务器

我正在玩spring-security-oauth2。我尝试使用身份验证后端构建一些微服务。

我建立了一个简单的spring boot项目,具有以下依赖项

和一个配置类

我的 Client- 和 UserDetailsS​​ervice 的实现非常简单,并且总是返回一个对象

但是,当我尝试通过

我收到错误“访问此资源需要完全身份验证”,当我尝试时

我收到错误“凭据错误”。从我的角度来看,两者都应该工作,但似乎我的配置丢失了。

OAuth 还有其他一些我不清楚的地方:我尝试使用 spring-security 和自定义登录表单构建一个 spring-mvc 应用程序。是否可以通过 Spring Security 处理令牌请求和刷新周期而无需重定向到身份验证应用程序?

如果是事件驱动的应用程序,是否可以确保令牌有效?如果失败,用户单击按钮并写入事件,但处理将在数小时后完成。如何使用用户凭据处理事件?

0 投票
2 回答
3941 浏览

rest - HATEOAS 和微服务

我在看到 HATEOAS 和微服务如何共存时遇到了一些严重的问题。

举个例子:

假设我们有一个购物车资源。并且我们需要将产品的快照放入其中,例如产品ID,产品价格;将商品添加到购物车时的当前价格快照,可能还有其他一些值。实际用例无关紧要,只是为了对手头的问题有所了解。

当我之前一直在做 HATEOAS 时,我会在购物车资源中放置一个链接到产品的链接或链接到特定产品的模板 url。

这样,客户端仍然可以不知道资源 URL。

但是在微服务世界中,一个服务不应该知道其他服务。AFAIK。

那么他们两个怎么可能一起工作呢?

我对微服务的解释是它们永远不能链接到除了它们自己之外的任何东西,这几乎就是一个Self链接。

我在其他地方发现了同样的问题,例如 https://groups.google.com/forum/#!topic/api-craft/YRkLFVY_zFc

使用诸如“宏服务”之类的解决方案将所有这些结合在一起。这似乎不是解决问题的干净方法。

[编辑]

我发现了一些关于这个主题的更好的信息: https ://github.com/Netflix/eureka https://github.com/RestExpress/HyperExpress

有一些工具通过链接来增强资源似乎很好,但这让我想,决定资源应该属于哪些链接的逻辑在哪里?在暴露资源的服务中?在中央服务注册表中?

0 投票
0 回答
534 浏览

oauth - 微服务和 oauth 架构

我正在学习微服务架构,我有一些问题。

让我们想象一下这样的架构:我们有简单的 html 页面(example.com):主页、开发人员信息、登录、注册等。登录页面(example.com/login)包含很多 oauth 按钮(例如 facebook、谷歌+、推特等)。它们都有client_id、state(生成每个请求并保存在会话中)和redirect_url。因此,redirect_url 指向另一个微服务(auth.example.com/oauth?code=...&state=...)。然后,我将代码更改为令牌,发送 get_user_info 之类的请求并将其保存在数据库中(即注册或更新用户)。之后,我生成了一个 JWT 令牌来调用我的 API 并将令牌返回给用户,并将其还原为 dashboard.example.com。在此页面上,用户将使用我的 API (api.example.com) 和 JWT 令牌。

因此,我们有 3 个微服务:主站点(包含信息和登录名)-example.com、身份验证服务器(授权和身份验证)-auth.example.com 和 API 服务-api.example.com

和问题: 1. 当 oauth 提供者将其从 example.com(我们将状态存储在会话中)重定向到 auth.example.com 时,我如何检查状态?我认为使用 rebbitMQ 可以吗?2. 我可以将 JWT 令牌放入正文并使用 HTTP 302 重定向发送响应(重定向到 dash.boardexample.com)吗?

我很高兴听到您的意见和建议!

谢谢,迪玛。

0 投票
1 回答
3256 浏览

spring-boot - RESTful 微服务故障转移和负载均衡

目前我们有一些单一的 Web 应用程序,并尝试将项目转移到微服务基础设施。

对于单体应用来说,HAProxy 和会话复制具有故障转移和负载平衡。

现在我们使用 Spring Boot 构建了一些 RESTful 微服务,但我不清楚构建生产环境的最佳方式是什么。当然,我们可以将所有应用程序作为 unix 服务运行,并且仍然有一个用于负载平衡和故障转移的反向代理。这个解决方案对我来说似乎很重,并且有很多配置和维护。资源管理和扩大或缩小服务器将始终是一个手动过程。

使用 2-3 台服务器和简单的资源管理设置生产环境的最佳可能性是什么?是否有一些解决方案也支持持续部署?

0 投票
1 回答
1296 浏览

jakarta-ee - 在微服务设计中生成 JPA 实体

我正在考虑设计,对在微服务架构中生成实体有点困惑(虽然我是微服务设计的新手,但我对多个精益战争很着迷)。我有数据库和多重战争的想法。我应该从 DB 生成实体并将它们放在一个 jar 中,并将 jar 包含在我创建的每场战争中,还是有另一种选择。其次,我放置persistence.xml。如果我打算稍后使用缓存来缓存实体实例,上述方法会带来任何问题。谢谢

0 投票
4 回答
9705 浏览

web-services - 微服务架构:跨服务数据共享

考虑在线商店项目的以下微服务:
用户服务保存有关商店用户的帐户数据(包括名字、姓氏、电子邮件地址等)

购买服务跟踪有关用户购买的详细信息。

每个服务都提供了一个用于查看和管理其相关实体的 UI。购买服务索引页面列出了购买。每个采购项目应包含以下字段:
id、采购用户全名、采购项目名称和价格。
此外,作为索引页面的一部分,我想要一个搜索框,让商店经理通过购买用户名搜索购买。

我不清楚如何取回购买服务不保存的数据 - 例如:用户的全名。当尝试通过购买用户名进行搜索购买等更复杂的事情时,问题会变得更糟。

我想我显然可以通过在用户创建时广播某种事件来在两个服务之间同步用户来解决这个问题(并且只在购买服务端保存相关的用户属性)。在我看来,这远非理想。当您拥有数百万用户时,您如何处理这个问题?您会在每个使用用户数据的服务中创建数百万条记录吗?

另一个明显的选择是在用户服务端公开一个 API,它会根据给定的 id 返回用户详细信息。这意味着在购买服务中加载每个页面时,我都必须调用用户服务以获取正确的用户名。不理想,但我可以忍受。

那么如何实现基于用户名的购买搜索呢?好吧,我总是可以在接收查询词的用户服务端公开另一个 API 端点,对用户服务中的用户名执行文本搜索,然后返回所有符合条件的用户详细信息。在购买服务中,将相关 ID 映射回正确的名称并在页面中显示它们。这种方法也不理想。

我错过了什么吗?是否有另一种实现上述方法的方法?也许我面临这个问题的事实有点代码味道?很想听听其他解决方案。

0 投票
1 回答
468 浏览

nginx - 在单个服务器中管理和使用多个 Docker 容器(微服务)

我有一个 GCE(谷歌计算引擎)服务器,运行在端口 80 的 Nginx/Apache 网络服务器列表,它将为网站提供服务。同时,我有多个微服务与 Docker 容器在同一台服务器上运行。每个容器都将在其适当的本地 IP 地址处为网站提供服务,并且我已将其绑定到 localhost:PORT。我不想将端口绑定到公共 IP 地址,因为它会将微服务公开暴露给外界。

现在的问题是,我必须将容器提供的网站页面嵌入到在 Web 服务器的端口 80 上运行的网站中。由于嵌入代码是由浏览器执行的,因此我不能在 python/HTML 代码中使用本地 IP (172.17.0.x) 或 localhost:PORT。

现在如何将容器内本地运行的微服务页面嵌入到为用户服务的网站中?

例如:

我的服务器的公共 IP:104.145.178.114 该网站的服务来自:104.145.178.114 :80 在同一台服务器中,我们有多个微服务在本地 IP 中运行,例如172.17.0.1172.17.0.2等等。每个容器都将在其内部运行一个服务器,该服务器将在172.17.0.1:8080/test.html处为页面提供服务,其他容器也类似。现在我需要将此页面 test.html 嵌入到另一个网页,该网页由 Nginx/Apache 网络服务器在104.145.178.114 提供服务,而不向公众公开内部/本地 IP 端口。

我想听听这个问题的建议和替代解决方案

0 投票
7 回答
5304 浏览

java - 微服务架构,这种情况下什么是服务

我正在阅读一些关于微服务架构的文档( 例如通过这个链接),我想知道在这种情况下究竟什么是服务。

在 IT 中,一切都可以称为服务: - 通过 java 命令启动的 SPRING REST 应用程序,例如:

java -jar build/libs/gs-rest-service-0.1.0.jar

  • 也可以是对应于 DDD 中业务层的类
  • 它可能只是与所研究领域相关的东西,比如向某人提供一些东西
  • 和许多其他...(android后台运行服务等...)

但在微服务中,这意味着什么?例如,在 Java EE 堆栈中使用什么样的技术/工具来创建“自己运行的服务”?它只与网络服务有关吗?