我已经听说过很多关于SOA,服务等的好处但是我没有看到它是如何通过良好的性能来完成的。
我有一个包含社交网络功能和广告的网页。我的大多数代码都纠结在一起,但我认为广告和“推荐的朋友”功能非常独立,非常适合类似SOA的方法。
我可以为这两个服务创建一个REST HTTP级API,然后为我的主站点的每个页面请求调用。
我不希望用户等待页面加载太长时间,如果我在请求中获得了大量数据(例如推荐的用户ID),我必须处理或搜索相关数据等,我觉得我做的东西慢下来没有真正的好处。 一个相对较慢的HTTP调用来获取我本来刚刚在本地处理的东西。我刚刚将处理移到了慢速HTTP请求的另一端。
我能看到的唯一其他选项是在我的html模板上输出iframe,其src指向这些外部服务。这些服务将直接返回HTML。因此并行加载。
据说一个典型的亚马逊页面是由150个服务构建的,我没有看到150个iframe,所以他们如何做到这一点并获得低延迟?
答案 0 :(得分:0)
问题中似乎有一些混合的术语。首先,SOA不仅仅是创建服务(Web服务,在本例中看起来像是用于提供数据)的行为。这是一个相当复杂的架构概念(沿着DDD,MVC等),涉及将您的应用程序开发成一系列基于服务的层,在这些层中发出请求并提供服务。因此,与拥有支持一组业务流程的大型对象图形相反,您最终会得到一组相对原子的命令,这些命令会导致与整个模型的相当直接的交互。这种架构的一大好处是它可以很好地扩展。您可以构建新的服务集,而不是不断地重新设计模型并按下新的命令/工作流程。
所有这一切都说过,服务电话相当便宜。考虑进行服务呼叫(1k?2k?减少?)与完整的回传或网页请求(70k?100 + k?)的成本。如果您要求页面上的每个命令都有完整的帖子和重定向,那么您在带宽和性能方面的成本相当高如果您预计会有大量流量。公司制造的系统通过将任务划分为一系列在加载页面后异步执行的命令,以减少先前的等待时间和整体网络流量,雅虎和谷歌等受益匪浅。
这里的关键是这些服务调用是异步进行的。因此,从用户的角度来看,等待页面加载的时间非常少。因此,就像您在StackOverflow上看到的一样,您可以在后台处理upvote的同时继续扫描问题的文本。
这是正确的方法吗?随你(由你决定。如果你有工作,坚持下去。如果值得花时间和实现更复杂的解决方案,因为当前架构导致性能出现活跃且可察觉的降级,那么也许您应该考虑进行更改。