【问题标题】:Can microservices be used to display a regular page?微服务可以用来显示常规页面吗?
【发布时间】:2016-10-14 12:28:00
【问题描述】:

我一直在研究微服务,并注意到每个作者都不鼓励使用庞大的单体架构。他们说在企业环境中微服务是非常可取的。我的问题是如何显示正常数据,例如您正在阅读的这个 stackoverflow 问题。该页面将如何在微服务环境中加载?请求需要排队,然后另一个微服务需要获取并返回数据。当请求排队时,请求上下文丢失 - 当数据排队时页面将返回。当请求已经返回浏览器时,系统将如何向页面显示数据?

我可以看到这个工作的唯一方法是浏览器需要轮询 Web api 以获取新数据。

【问题讨论】:

  • 看看 UI 组合框架和 SignalR。

标签: c# asp.net-mvc microservices


【解决方案1】:

只有一个问题和答案的非常广泛的主题,但我会尽力解决这个问题。

微服务的概念是具有独立的整体部分,在任何给定时间,任何微服务都可能出现故障,而其他区域不会受到影响。因此,如果您希望 Stack Overflow (SO) 让这个问题的 HTML 在微服务中运行,一种方法是让 QuestionService 负责接受新问题。该服务可以处理与实际问题相关的任何事情,然后发布一条发布-订阅类型的消息,说明添加了一个新问题。 HtmlService 将接收此消息并执行它所需的所有 HTML 渲染,并且可能需要在完成其工作之前向其他服务询问其他数据。它可能需要向 UserService 询问有关发布用户的其他数据。一旦 HtmlService 获得了它需要的所有信息,它就可以将 HTML 保存到它自己的数据库中以保持持久性。

现在来自 SO 的一些其他用户请求获得新问题。请求被路由到 HtmlService 并提供已经生成的 HTML。

现在仍然可以看到所有问题,如果 QuestionService 或 UserService 出现故障,仍然可以提供所有 HTML。您无法添加新问题或注册新用户,但作为知识库的站点仍然可以使用。

我希望这个粗略的例子能回答你的问题。随时发表评论,我会尽我所能详细说明。

【讨论】:

  • 浏览器加载问题后,后端会将请求排队。然后浏览器会说“我们正在寻找您的问题”。因为请求返回给浏览器。浏览器将如何填充问题数据?在单片应用程序中,在获取所有数据之前,请求不会返回。
  • HtmlService 现在只提供静态 HTML 文件,例如 so.com/questions.html,它可以列出所有问题。或者 so.com/1234.html 用于单个问题。当 HtmlService 收到新问题的通知时,生成 HTML 的所有工作都在幕后完成。这就是为什么您可能会看到有人发布新问题到它在 so.com 上可见的时间稍有延迟。后端微服务正在完成收集所有数据和生成 HTML 文件以静态提供服务的繁重工作。没有返回队列或“查找您的问题”,只有问题 HTML。
  • 如您所见,微服务是一个如此广泛的话题,有许多正确和错误的做法。就像任何其他项目一样,个人需求将决定用例。不会有“正确”的方法来做到这一点,但有最佳实践和许多例子。困难的事情是找到真实世界的例子,因为许多在线的水平很高,很难应用。这是一个非常抽象的概念,而这正是系统架构师可以发挥作用的地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 2021-02-15
  • 2021-12-29
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 2020-05-09
相关资源
最近更新 更多