【问题标题】:SOA and APIs - are the APIs endpoint services or they require a distinct service?SOA 和 API - API 是端点服务还是需要不同的服务?
【发布时间】:2012-09-27 12:42:06
【问题描述】:

我正在设计一个 RESTful Service Oriented Architecture Web 应用程序,以使其尽可能地扩展,并将不同类型的服务放在不同的机器上(将资源密集型操作与其他服务分开)。

我还希望用户能够访问他们的数据来制作自己的应用程序。 我不确定我是否必须将这些服务设计为向全世界开放,因此只需让它们在 Web 域(如 AWS)上侦听或创建另一个服务来处理 API 请求。

对我来说,拥有安全的开放式 Web 服务是有意义的,但它确实给架构本身增加了很多复杂性,因为每个服务都成为必须被同一套件中的其他服务识别(信任)的客户端,就像以及我必须识别尝试访问自己数据的 3rd 方应用程序。

这是正确的 SOA 方法吗?我想确定的是,我没有混合错误的概念来设计错误的面向服务的架构。

所有服务都有 crud 接口,因此可以使用 REST 原则对其进行查询。

【问题讨论】:

    标签: ruby web-services api rest soa


    【解决方案1】:

    根据您的系统的性质,使用不安全的 Web 服务可能是可行的,因此它们都可以在没有安全开销的情况下相互通信。为了使服务可供第三方使用,您可以使用Service Perimeter Guard 作为从外部访问服务并在该层应用安全性的唯一机制。这样做的好处是为您的所有服务提供一致的安全性,但是如果外围受到破坏,则可以获得对所有服务的访问。

    这种方法可能不适用于所有服务。例如,需要保护被视为“个人机密”的信息(例如,家庭住址、紧急联系方式、健康数据等员工数据),以便未经授权的员工无法访问这些信息。

    关于您将不同服务放在不同机器上的评论,这将导致某些机器上的资源利用不足,而另一些机器上的资源可能过度利用。为避免这种情况,请将所有服务部署到所有机器并使用负载均衡器。这将提供更优化的资源使用并简化部署(例如,使用 Chef 或 Puppet),因为所有节点都是相同的。随着资源使用量的增加,您可以简单地添加更多节点。同样,如果资源使用率低,您可以移除节点。

    关于您的最后一句话,REST 比 CRUD(例如 HATEOAS)要多得多。

    【讨论】:

    • 感谢您的丰富回答!我将阅读有关 Service Perimeter Guard 的信息。由于考虑到我们的客户,所有数据都必须被视为敏感数据,并且我希望保持套件一致,我认为最后我将实施一个非常类似于 OAuth1(签名)的解决方案,以便服务也可以在 HTTP 上工作(因为有没有永久令牌来生成多个请求)。我正在尝试遵循关于 SOA 的最严格的规则以避免任何故障点(每个服务必须在身份验证之前不信任任何请求),我想避免新的队友能够搞砸一切。
    • 我也非常喜欢关于机器利用率的想法,但是根据服务类型优化环境而不是在多台机器上回复相同的环境不是更有用吗?示例:将高写入服务放在 ramfs 机器上,将 cpu 密集型服务放在多 cpu 机器上……等等。它应该允许我优化资源(包括成本),因为我不应该购买所有具有高硬件规格的服务器,你不觉得吗? (只是为了澄清你的概念)
    • 在高性能情况下,将一些服务移动到特定节点是有意义的(成本明智的),但是与额外的管理和部署开销(这 = 增加这些活动的成本)。这不是你会“以防万一”的事情,而是你会做的事情来提高一组特定服务的性能,一旦它们被证明表现不佳并且知道实际的瓶颈。更常见的是将 OLTP 服务与 OLAP 服务分开,这样 OLAP 查询不会影响 OLTP 请求。
    猜你喜欢
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 2019-08-21
    相关资源
    最近更新 更多