背景: 我正在构建一个应用程序,而拟议的体系结构是在微服务架构上驱动的事件/消息. 做事的单片方式是我User/HTTP request和某些具有直接synchronous response的命令.因此,响应相同的用户/http请求是"免费的". 问题: 用户将HTTP request发送到 UI服务(有多个UI服务),向队列(Kafka/Rabbitmq/Any)发射某些事件. n n服务可以在此过程中进行一些魔术,然后在某个时候,同一UI服务应将响应收回并将其还给发起HTTP请求的用户.请求处理为ASYNC,但根据您的典型HTTP交互,User/HTTP REQUEST->RESPONSE是SYNC. 问题: 我如何在此不可知论/事件驱动的世界中发送对启动操作(通过HTTP与用户交互的服务)的响应? 到目前为止我的研究 我一直在环顾四周,似乎有些人正在使用Websocket解决这个问题. 但是,复杂性层是需要有一些表映射(RequestId-
以下是关于 microservices 的编程技术问答
我正在使用http方法(如(发布,删除,get,put) )的端点URL映射 发布新交易 - @PostMapping("/trade") 删除以删除具有特定ID的交易 - @DeleteMapping("/trade/{id}") 获取特定交易的详细信息 - @GetMapping("/trade/{id}") 用于更新交易详细信息 - @PutMapping(“/trade/{id}”) 获取收集的所有贸易清单 - @GetMapping("/trades") Spring当前支持五种类型的内置注释,用于处理获取,发布,放置,删除和补丁的不同类型的传入HTTP请求方法.这些注释是: @GetMapping @PostMapping @PutMapping @DeleteMapping @PatchMapping 在"命名约定"中,我们可以看到每个注释旨在处理相应的传入方法类型,即@getMapping用于处
考虑在线商店项目的以下微服务: 用户服务保留有关商店用户的帐户数据(包括名称,姓氏,电子邮件地址等) 购买服务跟踪有关用户购买的详细信息. 每个服务提供了一个用于查看和管理其相关实体的UI. 购买服务指数页面列出了购买.每个购买项目应具有以下字段: ID,购买用户的全名,购买的商品标题和价格. 此外,作为索引页面的一部分,我想拥有一个搜索框,让商店经理通过购买用户名来购买. 我尚不清楚如何获取购买服务所没有的数据 - 例如:用户的全名. 当尝试通过购买用户名来做更复杂的事情(例如搜索购买)时,问题会变得更糟. 我认为我可以通过在用户创建中广播某种事件(并仅保存相关的用户属性在购买服务端)来解决这两个服务之间的解决方案.从我的角度来看,这远非理想.当您拥有数百万用户时,如何处理?您会在每个服务中都会创建数百万个记录,以消耗用户数据? 另一个明显的选项是在用户服务端公开API,该API根据给定的ID带回用户详细信息.这意味着购买服务中的每个页面加载,我都必
i实际上阅读有关微服务架构的文章的音调,但是,似乎他们正在以最简单的方式处理这些内容,而无需更深入地解释. 要解释我的问题,我将向您展示我的实际小体系结构: 所以,这是我要使用的.在技术上做任何事情之前,我需要更多的理论信息. 我域的描述 我有一些基于移动设备和浏览器的客户,能够在应用程序上建立联系,获取用户信息,并能够就他们购买的商品咨询信息. 在整体应用中,我将使用此架构: - 移动/角度的演示层 - 带有nginx的REST API的业务层 - 带有标准MySQL数据库的DAL - 可伸缩性仅应用于X轴 在这种情况下,我想使用微服务体系结构,因为它是"域可扩展",并且真的很灵活(当然要了解更多). 在架构上,在每种服务中,有关API暴露的唯一HTTP URL. 问题 a/在(1)通量中,"移动"在 http上发送http请求://mydomain.or/auth . 在我看来,Apigateway能够询问标准服务注册表
我正在使用HttpURLConnection向本地部署并使用Java Spark创建的本地服务提出邮政请求. 我想在使用HttpURLConnection进行发布时在请求正文中发送一些数据P> Java Spark邮政服务处理程序 post("/", (req, res) -> { System.out.println("Request Body: " + req.body()); return "Hello!!!!"; }); httpClass进行帖子调用 public class HTTPClassExample{ public static void main(String[] args) { try{ URL url = new URL("http://localhost:4567/"); HttpURLConnection httpCon = (HttpURLConnec
我有一个任务. 具有带有单SPA框架的微观前端. 门户/主应用程序(url加载所有其他JS代码) Micro Frontend 1(基于React) Micro Frontend 2(基于反应) 所以我的问题只是一个:我不想复制供应商库,例如React,React-Dom(其他任何).我想在其他微观前端(与WebPack捆绑在一起)中共享它们 我知道拥有一些全球内容的不良习惯(这违反了与WebPack捆绑的整个想法).但是如何解决供应商库重复的问题? 我发现了一种解决方案,只是使用SystemJS(例如HTML中的分离标签)加载决议,但我只是想知道也许还有另一种溶液. 谢谢. Systemjs通过需求加载依赖项的方法,但是从CDN中,我只想执行相同的操作,但是从"共享" WebPack捆绑包中加载所有依赖项. window.SystemJS = window.System function insertNewImportMap(new
我对微服务和存储库有疑问.我们是一个小团队(5人),我们在微服务中创建了新项目.我们项目中的预期微服务应用在10-15之间. 我们正在考虑这样的结构中所有微服务的一个存储库: -/ --/app1 --/app2 --/app3 -./script.sh -./script.bat 您如何看待这种设计?您能推荐更好的东西吗?我们认为,如果每个应用程序都有存储库,那么一个团队中的小项目将是过分的.作为我们的应用程序,您可以想象Angular中的Spring Boot或Spa应用程序.谢谢您的建议. 解决方案 通常,您可以在一个存储库中拥有所有的微服务 这是您在决定将所有微服务放入一个存储库之前可能需要考虑的事情: 开发人员纪律: 请小心代码耦合.由于所有微服务的代码都在一个存储库中,因此您之间没有真正的物理边界,因此开发人员可以使用其他微服务中的某些代码,例如添加参考或类似的代码.在一个存储库中拥有所有微服务将需要一些纪律和规则,以使开发人员不要跨越边界并滥
我们有以下设置. STM(Stingrey流量管理器)确实负载平衡 +会话粘性 weblogic'cluster' auth由第三方工具处理 因此,对于水平缩放/运行应用程序的多个实例,我不必担心会话. STM/WebLogic群集确保后续请求到同一托管服务器. 我们目前拥有的是一个整体应用,我们正在尝试转移到微服务.同样,我们也不要从当前的基础架构(即STM/WebLogic cluster/auth Tool)移出.我们计划的是: 一场网关战争将请求路由到其他微服务 n x微服务(战争),用于每个功能子域 只有API网关接收用户请求,而其他微服务则无法从外部访问 所以我的问题是 当其他微链接无状态时,API网关是否应该是状态实现? 如果是这样,如何在API网关和微服务之间共享用户会话数据? 请建议任何更好的替代方案和资源/链接.谢谢. 解决方案 让我分享我的意见. 首先,如果您可以将申请保持无状态,请务必这样做:) 就
我的理解是,在SOA和微服务模块中都应独立和重复使用.但是,真正区分了两者? 解决方案 既依靠服务作为主要组成部分,但是那里有很多差异.很少有 soa: 遵循"与众不同"的架构方法 支持多个消息协议 多线程带有更多的开销,可以处理I/O 最大化应用程序服务可重用性 不完全专注于DevOps/连续交付 微服务: 遵循"分享 - 可能是可能的"架构方法 使用轻巧的协议,例如HTTP/REST&AMQP 通常使用事件循环功能用于非锁定I/O处理 更专注于解耦 强烈专注于DevOps/连续交付 其他解决方案 微服务体系结构不是发明.企业,例如亚马逊,Netflix和eBay,使用了Divide和Conlecter策略,将其单片应用程序的单片应用程序分配到较小的单位中,并解决了许多问题.在这些公司的成功之后,许多其他公司开始采用这种方式作为重构其应用程序的常见模式.最终,该模式被称为微服务体系结构.在MSA中,没有什么根本上引
HI溢出社区, 我是.NET开发的新手,并且在蝙蝠中遇到了一些麻烦.我将列出我为清楚出现问题所做的步骤. 我似乎无法让解决方案资源管理器显示我在解决方案文件夹中创建的ASP.NET Core Web API项目的文件夹结构.我检查了文件系统,所有项目工件都在那里创建,它们只是在解决方案资源管理器中没有显示. 步骤 创建空白解决方案 创建一个称为微服务的解决方案文件夹 接下来,我遵循屏幕截图中显示的步骤,在MicroServices解决方案文件夹中创建ASP.NET Core Web API项目. 期望与现实的解决方案结构如何在此之后 期望: 现实: 我已经尝试了所有可能的建议,以确保解决方案资源管理器有效,并显示我需要继续开发API的结构,但我无法超越第一步.如果有人能阐明为什么会发生这种情况,这将不胜感激. 解决方案 因此,似乎您安装了两个版本32位和64位,因此32位是添加到系统路径中的第一个. 单击Windows
我正在处理.NET核心微服务.我安装了包含Docker CLI和KiteMatics的Docker工具箱.之后,我在Visual Studio 2017中创建了一个简单的(.NET Core)Web API项目,还启用Docker支持. 但是,当我击中F5运行程序时,它显示以下错误并且不运行. Visual Studio容器工具需要Docker在构建,调试或运行容器的项目之前运行. 请查看所附图像. 正在运行项目时的Visual Studio错误 如果我使用Docker CLI构建和运行该项目,则可以正常工作.问题是Visual Studio2017. 解决方案 问题之所以发生,是因为Visual Studio容器无法连接到Docker以获取Windows,解决方案是使用以下命令从Docker CLI打开Visual Studio 2017. /c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2
我遇到了一个错误,试图使用我的.NET Core 2.0项目使用Docker功能.我一直在收到一条错误消息 Visual Studio容器工具需要Docker在 建筑物,调试或运行集装箱项目.有关更多信息, 请参阅: http://aka.mms/dockertoolstroulstroubleshooting 我遵循链接,并意识到我有Windows 10 Home X64,并且必须安装Docker Toolbox,而不是Windows的Docker.现在它安装了此可执行文件 Docker QuickStart终端 这是应该启动该Docker服务的方式吗?我尝试运行此可执行文件,并且似乎在起作用.我的容器正在运行,但是Visual Studio容器工具的错误仍然存在. 我想念什么?为了在Visual Studio 2017中使用Docker容器支撑吗? 更新: 我试图遵循Quetzcoatl的建议,并且在Visual Studio中仍然遇到有关这
我们有不同的微服务,可以重复调用内部和外部服务.我们需要在服务之间缓存这些调用以改善延迟.我们正在考虑引入一个API网关,其主要目标是缓存服务之间的数据. 其他一些目标是 - i)将调用不同的微服务来汇总其响应. ii)还将避免通过微服务对外部服务的多次呼叫. iii)将照顾缓存Miss&hit for External API呼叫. iv)高吞吐量,性能和低潜伏期. 我们有基于Vert.x的技术堆栈. 实施此类系统的最佳方法是什么.我有以下问题 - 1)将其实现为库或服务? 2)要使用哪个数据存储(我们正在考虑Redis/Hazelcast)? 3)库中的图书馆可以在此处使用varnish/squid/nginx吗? 4)如何处理缓存无效? 解决方案 我认为您有很多选择: redis Redis Sentinel(支持聚类) etcd(来自CoreOS):支持聚类 Apache Geode Aerospike:
我正在评估Vert.x框架,以查看我是否可以使用Spring Boot开发的微服务之间的基于Kafka的通信. 问题是: 我可以替换 带Vert.x事件总线和 的kafka 基于Vert.x的春季启动微服务 解决方案 要快速回答,我会说这取决于您的需求. 是的,EventBus可以是使用异步和非阻滞范式在微服务螺旋中处理本地交流的好方法. ,但在某些情况下您可能需要: 处理一些常见的企业模式,例如重播机制,消息的持久性,交易式阅读 能够按时间顺序处理某种信息 处理倍数之间的通信类型的微服务,这些微服务并非全部使用相同的框架/工具包甚至编程语言 处理可靠性,弹性和 当您的所有消费者/微服务/垂直丧生时,故障恢复 处理动态的水平可扩展性和监视您的消费者/微服务/叶击 能够与部署在多名和多区域中的单个集群一起工作 在这种情况下,我宁愿选择Apache Kafka而不是本机eventbus或旧的符合JMS的旧系统. 不得根据您的实际需
我在vert.x微服务中没有做太多事情,但是我遇到了疑问,即知道使用一些中间件或Web客户端,知道彼此交流的最佳方法,我不知道或任何其他vert.x允许我的方式. 解决方案 有可能允许Vert.x微服务在它们之间进行通信的可能性,每个人都具有优势和缺点,并且根据上下文的相关性或多或少. 这是3种常见方法: 1)使用本机Vert.x EventBus( 异步逻辑): #EVENT_BUS (并且您可以在需要处理不同JVM PID之间的通信时使用Hazelcast cluster Manager使用: https://vertx.io/docs/vertx-hazelcast/java/). 2)使用Apache Kafka之类的消息代理系统( 有时您需要带有重播机制的持久消息队列,我认为这比Vert.x的事件总线更强大,有时您需要与多种语言进行交流,而Vert.x事件总线与此相关)或旧时尚JMS符合ActiveMQ,RabbitMQ和CIE的系统. 3)有时
在凯文·戈德史密斯(Kevin Goldsmith)的2015年谈论中),他提到,当他们创建新版本的API时,他们只是创建新服务器,只要仍然有客户端调用旧版本(在这种情况下,带有带有旧版本的旧版本)(在这种情况下是带有智能灯Spotify嵌入其中). 我对他们将如何维护和提供旧版本的可能年感到困惑 我可以看到一些可能的解决方案,但是它们似乎都不是很合理的: 在所有版本中使用相同的数据库,只添加新表格和新的可确定字段.切勿删除字段,重命名字段,也不会将字段设置为不可删除,也不将表格删除表,也不将其重命名表. 每个版本使用不同的数据库,将每个版本的数据分开. 使用每个版本使用不同的数据库,将每个版本的数据分开,但要编写一种迁移和将请求从一个版本传递到另一个版本的方法,以便每个版本都带有该版本的有效参数. 解决方案1听起来像是会引起太多的代码气味,到处都有传统代码(我认为凯文似乎暗示他们当然不会做). 解决方案2听起来像是一场噩梦,可以从其他服务或报告中抽出数据.
在运行时支持多个版本的同一服务的部署以及消费者如何使用不同版本的情况下,在基于微服务的架构中进行版本控制的最佳实践是什么? 1)如果我们使用基于路由的版本控制作为提到的方法之一,在这里 那我想我们会有以下缺点 内部服务必须经过反向代理以进行消费. 消费者总是必须意识到所需的版本. 向消费者展示版本信息是最好的做法吗? 无论如何,我认为,以下内容始终适用: 对于主要版本更改,必须更改消费者. 对于次要版本更改(向后兼容),只有需要更改功能的消费者. 对于补丁版本更改,它是可选的,并且对于任何消费者来说都是无缝的. 哪种微服务版本策略可以帮助我们启用上述? 注意 - 请随时让我知道是否需要在多个问题中分开. 解决方案 我认为可以肯定地说,到目前为止,这还不是解决问题.在微服务体系结构中,每个服务都应松散耦合.如果您更改生产商时,您也必须寻找消费者以更改它们,则表明您有一个设计缺陷. 链接中介绍的基于路由的版本控制似乎远不止是"几个缺点".
http动词清除率是否掌握? 如果我发送相同的清除请求两次,我将第二次收到200次? 我有一个微服务,在将消息发布到兔子队列中之前会使清漆缓存无效.在清除失败的情况下,我们的需要就是登录并继续执行. 队列消费者必须从清漆缓存中获得资源的最新状态. 如果第一个微服务的第一个清除成功,将从第二个微服务返回成功中获得新的清除请求(在实际索取Varnish的资源之前)? 解决方案 清除不是标准的HTTP方法.它只是在varnish vcl中配置的东西 - 通常以这种方式或类似的方式: if (req.method == "PURGE") { if (!client.ip ~ purge) { return(synth(405,"Not allowed.")); } return (purge); } (请参阅: .org/docs/trunk/users-Guide/purging.ht
这对我来说是第一次,所以请耐心等待我的第一个问题. 我认为我有某种配置问题,但是经过一天的实验,我就卡住了.我们的应用程序基于Spring-Cloud [Brixton Release].我们具有这样的配置:Portal(Web应用程序提供基于Angular的Web-UI),该配置具有Zuul代理,并带有单一路由为我们的网关服务配置,例如: zuul: ignoredServices: '*' prefix: /api routes: api-proxy: path: /** serviceId: api-gateway 已配置了另一种Zuul并继电器请求到内部的商业逻辑服务: zuul: ignoredServices: '*' routes: service1: path: /service1/** serviceId: service1