【问题标题】:what is the standard practice to build a webpage with services用服务构建网页的标准做法是什么
【发布时间】:2011-07-28 02:35:36
【问题描述】:

我听说过很多关于 SOA、服务等的好处。但我看不到如何以良好的性能实现它。

我有一个包含社交网络功能和广告的网页。我的大部分代码都纠缠在一起,但我认为广告和“推荐朋友”功能非常独立,非常适合类似 SOA 的方法。

我可以为这两个服务创建一个 REST HTTP 级别的 API,然后为我的主站点的每个页面请求调用。

我不希望用户等待页面加载太久,如果我在我的请求中获得一堆数据(例如推荐的用户 ID),我必须处理或搜索相关数据等我觉得我做的事情慢一点没有真正的好处。 一个相对较慢的 HTTP 调用来获取我刚刚在本地处理的东西。我刚刚将处理转移到慢速 HTTP 请求的另一端。

我能看到的唯一其他选项是在我的 html 模板上放置 iframe,其 src 指向这些外部服务。这些服务将直接返回 HTML。因此并行加载。

据说一个典型的亚马逊页面是由 150 个服务构建的,我在那里没有看到 150 个 iframe,那么它们是如何做到这一点并获得低延迟的?

【问题讨论】:

    标签: web-services http soa


    【解决方案1】:

    问题中似乎有一些术语混合。首先,SOA 不仅仅是创建用于提供数据的服务(本例中为 Web 服务)的行为。它是一个相当复杂的架构概念(类似于 DDD、MVC 等),涉及将您的应用程序开发成一系列基于服务的层,在这些层中发出和服务请求。因此,与拥有支持一套业务流程的大型对象图相反,您最终会得到一组相对原子的命令,这些命令会导致与您的整体模型进行相当直接的交互。这种架构的一大好处是它可以很好地扩展。您可以构建新的服务集,而不是不断地重新设计模型并按摩新的命令/工作流程。

    综上所述,服务调用相当便宜。考虑进行服务调用的成本(1k?2k?更少?)与完整的回发或网页请求(70k?100+k?)。如果您需要为页面上的每个命令提供完整的帖子和重定向,如果您期望大量流量,那么您在带宽和性能方面的成本相当高。由公司构建的系统雅虎和谷歌等通过将任务划分为一系列命令而受益匪浅,这些命令在页面加载后异步执行,以减少预先收到的等待时间和整体网络流量。

    这里的关键是这些服务调用是异步进行的。因此,从用户的角度来看,等待页面加载的时间非常少。因此,就像您在 StackOverflow 上看到的一样,您可以在后台处理您的投票时继续扫描问题的文本。

    这是正确的方法吗?这取决于你。如果你有什么工作,坚持下去。如果由于当前架构导致性能明显下降,因此值得花时间和加速实施更复杂的解决方案,那么也许您应该考虑进行更改。

    【讨论】:

      猜你喜欢
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多