【问题标题】:Request should get response in 1sec in Microservice Architecture微服务架构中的请求应该在 1 秒内得到响应
【发布时间】:2021-06-17 18:58:56
【问题描述】:

最近,我遇到了一个 java 面试问题。它是这样的:“有 3 个微服务(流程从第 1 到第 2 到第 3),至少需要 0.5 秒的迂回来提供响应。但是 Web 请求本身应该在 1 秒内得到响应。如何实现这一点?”

任何架构设计或模式或任何设置,需要做什么?

【问题讨论】:

  • 你可以先画三条垂直线,分别命名为1st、2nd和3rd,从每条线(1st到2nd、2nd到3rd)画一个箭头,并用用的时间。这样做时,问问自己(或面试官),这是什么类型的请求,你画的每个箭头预期的响应是什么。

标签: java microservices


【解决方案1】:

这是一个非常模糊的问题,没有简单直接的答案,更多的是确定您将朝哪个方向发展,您会建议哪些分析选项。它的可靠性工程 (SRE) 包括许多技巧和方法。

  1. 我将首先分析和澄清此请求序列实现了哪些业务流程,考虑不必要的(碰巧并非总是开发人员编写正确的代码,因此对服务、数据库等进行了一些不必要的调用)
  2. 监控网络延迟并确定重点区域。如果网络需要花费大量时间,则需要改进网络硬件或软件,查找问题、客户端重新发送数据时的坏包、“包风暴”问题等。如果网络正常,则专注于服务。
  3. 然后考虑缓存来自下游服务的数据(进行中缓存或分布式取决于架构和数据类型)。此步骤应在充分了解数据性质的情况下谨慎完成,例如是否可以缓存、在哪个时期、以何种方式刷新/驱逐数据?
  4. 注意执行的代码优化的可能性。碰巧的是,开发人员在实施过程中没有考虑性能,因此可以创建具有不需要操作的功能(例如一些排序、过滤、同步(带锁)等)。
  5. 第 3 部分的一部分,并行化代码执行中可能发生的所有事情(不保证会有所帮助),摆脱锁。例如,在调用下游服务之前/之后可能存在对 DB 或其他源的一些依赖,这可能会导致意外阻塞,在这种情况下,在并行线程中执行任务而不相互阻塞是有意义的。
  6. 如果没有低级技巧有帮助,它可以敲响警钟重新审视服务架构,例如如果 SLO 1 非常重要,那么将 1+2 或 2+3 微服务加入更大的服务中可能是有意义的减少服务之间的数据转换和传输(需要预先计算)。

还有很多事情要考虑,取决于你想走多远。

【讨论】:

  • 似乎,所提问题的答案更多是理论方法而非实际方法。感谢您的信息。
猜你喜欢
  • 1970-01-01
  • 2017-07-14
  • 2018-12-27
  • 2018-02-02
  • 2020-08-11
  • 2018-04-07
  • 2018-02-08
  • 2016-12-26
  • 1970-01-01
相关资源
最近更新 更多