微服务网关吞吐量问题(微服务网关zuul)

网友投稿 279 2023-01-01


本篇文章给大家谈谈微服务网关吞吐量问题,以及微服务网关zuul对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享微服务网关吞吐量问题的知识,其中也会对微服务网关zuul进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

微服务之网关聚合模式

使用网关可以将多个单独的请求聚合到一个请求中。当客户端必须对多个不同的后端系统进行多次调用操作时,此模式很有用。

有时候执行单个任务时,客户端可能必须对不同的各个后端服务进行多次调用。因为他们依赖于多个服务,那么客户端必须调用不同的服务接口以完成这次请求,这样就会导致请求过多而浪费很多的资源。当任何新功能或服务添加到应用程序时,从而会进一步增加资源需求和网络调用。客户端和后端之间的这种混乱调用可能会对应用程序的性能和规模产生负面影响。微服务架构使这个问题变得更加普遍,因为围绕许多小型服务构建的应用程序自然会有更多的跨服务调用。

在下图中,客户端向每个服务发送请求(1,2,3)。每个服务处理请求并将响应发送回应用程序(4,5,6)。通常具有高延迟的蜂窝网络上,以这种方式使用单独的请求是低效的并且可能导致连接中断或请求不完整。虽然每个请求可以并行完成,但应用程序必须为每个请求发送,等待和处理数据,所有这些都在不同的连接上,从而增加了失败的可能性。

使用网关来减少客户端和服务之间的干扰。网关接收客户端请求,将请求分派给各种后端系统,然后聚合结果并将它们发送回请求客户端。
这种模式可以有效减少应用程序对后端服务的调用请求数,而且在高延迟网络上的应用程序的性能有大的提升。

在下图中,应用程序向网关发送请求(1)。该请求包含一组附加请求。网关分解这些请求并通过将每个请求发送到相关服务来处理每个请求(2)。每个服务都返回对网关的响应(3)。网关聚合每个服务的响应并将响应发送到应用程序(4)。应用程序发出单个请求,并且只从网关接收一个响应。

1.网关不应该在后端服务中引入服务耦合
2.网关应该和后端服务位置很近,以尽可能减少延迟。
3.网关服务可能须要做ha。确保网关设计合理,以满足您的应用程序的可用性要求。
4.网关可能是性能瓶颈。确保网关具有足够的性能来处理负载,并且可以扩展以满足您的预期增长。
5.对网关执行负载测试,以确保不会导致服务的级联故障。
6.使用隔板,断路,重试和超时等技术实现弹性设计。
7.如果一个或多个服务调用花费的时间太长,则可以接受超时并返回部分数据集。考虑您的应用程序将如何处理此方案。
8.使用异步I / O来提升程序的吞吐量。
9.通过分布式跟踪对全链路进行监控。
10.监控请求指标和响应大小。
11.考虑将缓存数据作为故障转移策略来处理故障。
12.不要将聚合构建到网关中,而是考虑在网关后面放置聚合服务。请求聚合可能具有与网关中的其他服务不同的资源要求,并且可能影响网关的路由和卸载功能。

1.客户端需要与多个后端服务通信才能完成操作
2.客户端可以使用具有明显延迟的网络,例如蜂窝网络。

1.您希望客户端对单个服务的请求次数(比如获取10个学生的信息,你只有一个单个查询学生信息的接口)。在这种情况下,最好向服务添加批处理操作。
2.客户端或应用程序位于后端服务附近,延迟不是一个重要因素。

以下示例是教你如何使用Lua创建简单的网关聚合NGINX服务。

用 Nginx 做了负载均衡之后吞吐量还不如单机 Tomcat高?

过Nginx来处理静态页面要比通过Tomcat处理在性能方面好很多。
二、下载安装微服务网关吞吐量问题
下载nginx
x.org/en/download.html
下载解压后放到C:\nginx-1.0.4(官网这样要求的微服务网关吞吐量问题,不知道放其它盘有没有问题)
启动nginx.exe,然后在浏览器输入127.0.0.1即可

为什么在微服务架构下,服务网关和数据库不能部署在虚拟机上

最近开发微服务网关吞吐量问题了一基于springcloud的微服务架构的门户项目微服务网关吞吐量问题,因为客户对系统性能有要求,所以楼主对系统的一些api接口进行了大量压力测试。在压测过程中,发现接口的性能瓶颈之一是服务网关和数据库部署在虚机上,所以本文将分享内容分为两部分

性能压测思路是从软硬件负载 f5,nginx,到容器化平台k8s、docker、zuul网关,再到数据存储es、mysql、mongodb、redis,进行全面测试。

性能压测汇总

部分接口压测结果

其中值得关注的是,用一台zuul网关节点和一个业务节点压测空接口,发现一个有意思现象微服务网关吞吐量问题

空接口压测不走zuul,一个业务节点tps能达到 32000, 走zuul网关,一个业务节点空接口tps只有11000,性能损耗64%。

当时就感觉zuul网关在我心中高大的形象碎了一地,但是没办法,性能不达标必须要优化。所以楼主查了很多资料,也问过一些docker和k8s的容器化平台大牛,总结出两点经验:

所以楼主向公司申请物理机,继续性能压测,当然这不是重点,重点是接下来要讲的:为什么服务网关和数据库不能部署到虚拟机上 。

虚拟机的特点

io开销

我们知道,不管虚机上部署了多少个应用,一旦涉及到数据的存储,如果采用虚机部署数据库,会带来不必要的网络io开销。因为虚拟机在调度大量物理的cpu和内存、特别是磁盘IO时,必须经过虚拟机和物理机两层网络io读写开销操作,是非常耗系统性能的。

一般情况下,使用虚拟机部署应用,其性能衰减约20%左右,这不是优化代码能解决的。

共享物理机资源

因为虚拟机在cpu资源、网络等方面共享物理机资源,虚拟机之间会存在竞争物理机资源,造成程序不稳定情况。

docker容器部署

更要命的是,如果数据库和zuul网关部署到容器(实质也是虚拟机)里,那么网络io读写变成docker(虚拟机)到虚机,再到物理机三层访问,无形之中又增加了io读写性能开销。尤其是对于请求吞吐量要求很高的服务网关zuul,是不能容忍的。

所以虚机对于IO密集型以及对延迟要求很高的业务场景不合适。

另外,早期的时候,作为一名架构师需要尽早的规划好服务网关和数据库的物理部署方式以及软硬件性能要求。

微服务架构的分布式事务问题如何处理?

分布式系统架构中,分布式事务问题是一个绕不过去的挑战。而微服务架构的流行,让分布式事问题日益突出!

下面我们以电商购物支付流程中,在各大参与者系统中可能会遇到分布式事务问题的场景进行详细的分析!

如上图所示,假设三大参与平台(电商平台、支付平台、银行)的系统都做了分布式系统架构拆分,按上数中的流程步骤进行分析:

1、电商平台中创建订单:预留库存、预扣减积分、锁定优惠券,此时电商平台内各服务间会有分布式事务问题,因为此时已经要跨多个内部服务修改数据;

2、支付平台中创建支付订单(选银行卡支付):查询账户、查询限制规则,符合条件的就创建支付订单并跳转银行,此时不会有分布式事务问题,因为还不会跨服务改数据;

3、银行平台中创建交易订单:查找账户、创建交易记录、判断账户余额并扣款、增加积分、通知支付平台,此时也会有分布式事务问题(如果是服务化架构的话);

4、支付平台收到银行扣款结果:更改订单状态、给账户加款、给积分帐户增加积分、生成会计分录、通知电商平台等,此时也会有分布式事务问题;

5、电商平台收到支付平台的支付结果:更改订单状态、扣减库存、扣减积分、使用优惠券、增加消费积分等,系统内部各服务间调用也会遇到分布式事问题;

如上图,支付平台收到银行扣款结果后的内部处理流程:

1、支付平台的支付网关对银行通知结果进行校验,然后调用支付订单服务执行支付订单处理;

2、支付订单服务根据银行扣款结果更改支付订单状态;

3、调用资金账户服务给电商平台的商户账户加款(实际过程中可能还会有各种的成本计费;如果是余额支付,还可能是同时从用户账户扣款,给商户账户加款);

4、调用积分服务给用户积分账户增加积分;

5、调用会计服务向会计(财务)系统写进交易原始凭证生成会计分录;

6、调用通知服务将支付处理结果通知电商平台;

如上图,把支付系统中的银行扣款成功回调处理流程提取出来,对应的分布式事务问题的代码场景:

/** 支付订单处理 **/

@Transactional(rollbackFor = Exception.class)

public void completeOrder() {

orderDao.update();  // 订单服务本地更新订单状态

accountService.update();  // 调用资金账户服务给资金帐户加款

pointService.update();  // 调用积分服务给积分帐户增加积分

accountingService.insert();  // 调用会计服务向会计系统写入会计原始凭证

merchantNotifyService.notify();  // 调用商户通知服务向商户发送支付结果通知

}


本地事务控制还可行吗?


以上分布式事务问题,需要多种分布式事务解决方案来进行处理。


订单处理:本地事务


资金账户加款、积分账户增加积分:TCC型事务(或两阶段提交型事务),实时性要求比较高,数据必须可靠。


会计记账:异步确保型事务(基于可靠消息的最终一致性,可以异步,但数据绝对不能丢,而且一定要记账成功)

商户通知:最大努力通知型事务(按规律进行通知,不保证数据一定能通知成功,但会提供可查询操作接口进行核对)

关于微服务网关吞吐量问题和微服务网关zuul的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 微服务网关吞吐量问题的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于微服务网关zuul、微服务网关吞吐量问题的信息别忘了在本站进行查找喔。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java 读取PDF中的文本和图片的方法
下一篇:接口测试工具的开发过程(接口测试工具的开发过程是)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~