在我的 Web 应用程序中,其中一个组件比其他组件慢,如何处理?

苏亨杜·马哈塔

假设我有一个基于微服务的架构。一些微服务比其他微服务负载更重。我如何决定对每个组件进行多少扩展?我的理解是我做负载测试&找出每个服务可以承受多少负载&基于我扩展的一些服务说3倍,一些5倍等等。现在假设我有一个服务 - 支付服务- 这取决于第 3 方支付网关,它速度慢且不在我的控制范围内 - 如何处理?我可以自由地将应用程序和用户 docker/kubernetes 容器化。

马特·蒂默曼斯

缓慢的第 3 方支付处理器可能需要几秒钟来处理请求。这将以各种方式影响您的架构。

首先,您的支付服务不应公开可能需要几秒钟才能响应的入口点。

服务消耗的内存和一些其他类型的资源与同时请求的数量成正比,而后者与响应时间成正比。如果你的慢服务可以将所有上游服务的响应时间乘以10 或 100 倍,那么它可以将这些资源的消耗乘以相同的系数,这是不可接受的。让每个人等待几秒钟而没有状态反馈也是不可接受的。

因此,您需要的不是“processPayment”入口点,而是:

  • 一个“startPayment”入口点,可以快速开始支付并返回交易ID;
  • 一个“checkStatus”入口点,可以检查给定ID的交易状态;
  • 也许是一种订阅交易状态更新的方法。

所有这些入口点都应该很快。

此外,支付处理在几秒钟内跨多个请求的传播意味着您不能真正依赖所有内容一直保持不变。因此,正在进行的事务及其状态更新必须保存在持久存储中——某种数据库。您可能无论如何都想这样做,因为“开始付款”和“检查状态”请求不应该以同一个服务实例结束,而数据库是将状态从一个实例传达到另一个实例的原因。

与第 3 方处理器的通信通常应该由“工作”进程/线程处理,因为请求处理线程不是为这些类型的响应时间提供的。如果通过对第 3 方处理器的单个请求来处理付款,那么使用异步客户端调用该服务就很重要,这样您就不必同时保持数千个线程处于活动状态。客户端计算机上的网络堆栈也可能需要仔细配置以支持该数量的同时连接。

最后,由于正在处理资金,因此确保交易不会被遗忘,确保您始终可以检查其状态,并防止因重试而导致多次付款,一直到用户界面,这一点至关重要。支付处理器将提供足够的 API 以允许您无论如何都执行此操作,但这可能需要您仔细设计。

为了支持所需的用户界面,您还需要一个入口点,该入口点可以检查交易是否已经在进行中以用于任何特定目的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我们如何处理共享域中的其他 Web 应用程序不正确地将 cookie 范围限定到父域?

来自分类Dev

关于Polymer,我如何使一个Web组件与另一个Web组件“对话”?

来自分类Dev

关于Polymer,我如何使一个Web组件与另一个Web组件“对话”?

来自分类Dev

构建一个光滑的Web应用程序-如今我该如何使用前端动画?

来自分类Dev

如何检查我的Web应用程序的用户是否尝试使用其他凭据登录?

来自分类Dev

如何检查我的Web应用程序的用户是否尝试使用其他凭据登录?

来自分类Dev

我如何使scrapysharp在MVC Web应用程序中工作?

来自分类Dev

如何在同一个域上托管我的API和Web应用程序?

来自分类Dev

如何处理 Web 应用程序中的用户审核日志(或其他频繁的客户端操作)?

来自分类Dev

在Gnome Shell中,当我只聚焦其中一个窗口时,如何防止应用程序的所有窗口都聚焦?

来自分类Dev

为我已经存在的300个Web应用程序中的每一个创建一个反馈/错误页面-需要一些建议

来自分类Dev

如何重定向我的mvc asp.net Web应用程序中除一个角色之外的所有页面?

来自分类Dev

我可以从Windows 10(UWP)应用程序中的Web Worker调用自定义运行时组件吗

来自分类Dev

我如何找出其中一个讨厌的程序使我的机器从睡眠中唤醒?

来自分类Dev

使用 Google Web 应用程序 - 我可以将变量从一个 HTML 页面传递到同一 Web 应用程序中的另一个页面吗

来自分类Dev

我正在使用axios在React中制作一个CRUD Web应用程序。我收到以下错误:“ TypeError:Object(...)不是函数”

来自分类Dev

我的模态组件位于其他文件中,我正在尝试从另一个组件中打开它

来自分类Dev

我的解决方案中有两个Web项目,其中一个要部署

来自分类Dev

我的解决方案中有两个Web项目,其中一个要部署

来自分类Dev

如何在我的Google Web Engine Web应用程序中包含php.ini文件?

来自分类Dev

我有一个 python 程序,但是如何将数据显示到基于 NodeJS 的 Web 应用程序上?

来自分类Dev

如何获取我的Web应用程序的实时数据?

来自分类Dev

如何缩小我的Web应用程序?

来自分类Dev

我的Java Web应用程序中的ClassNotFoundException / NoClassDefFoundError

来自分类Dev

Eclipse中的Tomcat无法启动我的Web应用程序

来自分类Dev

在我的Web应用程序中实现simplesamlphp库的问题

来自分类Dev

Ajaxtoolkit控件无法在我的Web应用程序中访问

来自分类Dev

我的Java Web应用程序中的ClassNotFoundException / NoClassDefFoundError

来自分类Dev

如果我的Web应用程序需要20秒才能完成请求,这是一个不好的设计吗?

Related 相关文章

  1. 1

    我们如何处理共享域中的其他 Web 应用程序不正确地将 cookie 范围限定到父域?

  2. 2

    关于Polymer,我如何使一个Web组件与另一个Web组件“对话”?

  3. 3

    关于Polymer,我如何使一个Web组件与另一个Web组件“对话”?

  4. 4

    构建一个光滑的Web应用程序-如今我该如何使用前端动画?

  5. 5

    如何检查我的Web应用程序的用户是否尝试使用其他凭据登录?

  6. 6

    如何检查我的Web应用程序的用户是否尝试使用其他凭据登录?

  7. 7

    我如何使scrapysharp在MVC Web应用程序中工作?

  8. 8

    如何在同一个域上托管我的API和Web应用程序?

  9. 9

    如何处理 Web 应用程序中的用户审核日志(或其他频繁的客户端操作)?

  10. 10

    在Gnome Shell中,当我只聚焦其中一个窗口时,如何防止应用程序的所有窗口都聚焦?

  11. 11

    为我已经存在的300个Web应用程序中的每一个创建一个反馈/错误页面-需要一些建议

  12. 12

    如何重定向我的mvc asp.net Web应用程序中除一个角色之外的所有页面?

  13. 13

    我可以从Windows 10(UWP)应用程序中的Web Worker调用自定义运行时组件吗

  14. 14

    我如何找出其中一个讨厌的程序使我的机器从睡眠中唤醒?

  15. 15

    使用 Google Web 应用程序 - 我可以将变量从一个 HTML 页面传递到同一 Web 应用程序中的另一个页面吗

  16. 16

    我正在使用axios在React中制作一个CRUD Web应用程序。我收到以下错误:“ TypeError:Object(...)不是函数”

  17. 17

    我的模态组件位于其他文件中,我正在尝试从另一个组件中打开它

  18. 18

    我的解决方案中有两个Web项目,其中一个要部署

  19. 19

    我的解决方案中有两个Web项目,其中一个要部署

  20. 20

    如何在我的Google Web Engine Web应用程序中包含php.ini文件?

  21. 21

    我有一个 python 程序,但是如何将数据显示到基于 NodeJS 的 Web 应用程序上?

  22. 22

    如何获取我的Web应用程序的实时数据?

  23. 23

    如何缩小我的Web应用程序?

  24. 24

    我的Java Web应用程序中的ClassNotFoundException / NoClassDefFoundError

  25. 25

    Eclipse中的Tomcat无法启动我的Web应用程序

  26. 26

    在我的Web应用程序中实现simplesamlphp库的问题

  27. 27

    Ajaxtoolkit控件无法在我的Web应用程序中访问

  28. 28

    我的Java Web应用程序中的ClassNotFoundException / NoClassDefFoundError

  29. 29

    如果我的Web应用程序需要20秒才能完成请求,这是一个不好的设计吗?

热门标签

归档