web-services - 适合新手的实用 SOA

标签 web-services service scalability soa high-availability

我是 SOA 领域的新手。因此,我正在研究一些“SOA 框架/技术”,并试图了解如何利用它们来构建一个高度可扩展(Facebook 类)的网站。

我想在这里解决几个“痛点”:

  • 可组合性(+ 管理依赖项,Pub/Sub)
  • 服务的语言无关
  • 可扩展性和性能
  • 高可用

  • 我研究了一些可以回答上述标准子集的技术:
  • Thrift - Facebook的跨平台RPC平台
  • WCF - 支持 SOAP、JSON 和 REST,因此它可以被认为是语言互操作的。生成 WSDL可用于生成 java 代理的文件。
  • Microsoft DSS - 只是将它包含在我的调查中,但它似乎并不相关,因为它是高度状态驱动和特定于 .NET 的。
  • 网络服务

  • 现在,我了解了如何从上述内容中获得可组合性和语言独立性的某些方面。但是,我还没有找到太多关于如何使用上述/其他工具来实现可扩展性和高可用性的具体信息(不是嗡嗡声)。所以最后我得到了我的问题:

    如何利用 SOA 技术来解决我上面定义的问题? 我在哪里可以找到这方面的技术指南?我寻找的不仅仅是系统图,而是实际的库、代码示例、APIS ......

    最佳答案

    我认为这个问题更多地与所涉及的概念有关,而不是与工具有关。对项目的回答:

  • 理解和内化 bounded context .将不相关的部分分开对于在不同的服务上实现真正的重用非常重要。相关技术不会帮助您,您可以在适当的上下文中分离应用程序,您可以将其适本地重用于不同的服务。
  • 基于已知协议(protocol)的清晰通信端点允许使用不同的技术实现不同的部分
  • 让操作像基于不同协议(protocol)的独立操作一样流动,为您提供了很多可以添加层的地方。是整个流程的一个特定子流程,使用大量资源,服务器不能再忍受了,只需要移动到单独的服务器上。负载不断增长,并且该服务器不再使用它,添加额外的服务器和负载平衡。您还有更多机会使用缓存和连接池。
  • 有一个需要始终可用的关键子流程,添加一个服务器以便您可以进行故障转移。有一个需要始终“可用”的整体流程,将队列用于以后可以处理的部分。

  • 你真的需要支持这种类型的负载吗?设置与特定场景相关的适当性能/负载/互操作性目标。如果你真的需要支持这种类型的负载,我建议你找一个已经处理过它的人加入。

    如果最终可能是负载,请识别有界上下文并设计具有 SOA 思维方式的人之间的交互。剩下的就是保持代码干净,在代码库中使用 TDD、松散耦合、集中集成测试等。有了好的代码,如果您以后需要分离系统的各个部分,就会容易得多。

    关于web-services - 适合新手的实用 SOA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/753273/

    相关文章:

    database-design - 设计一个高性能的酒店房间预订系统

    web-services - 自动测试 Web 服务通信

    c# - 当 web 服务方法抛出异常时如何获取错误消息。

    c# - 在 C# 中预验证 Web 服务请求

    java - Android 通知相互重叠

    web-applications - 使用有状态的Web服务器有意义吗?

    ios - 从 iOS 和 JSON 解析调用 ASP.NET webmethod

    android - 使用自定义 rom 为后台进程 android 管理中文设备

    linux - 如何将 Systemd 服务标准输出从 ExecStart 传输到 shell,例如。 bash ?

    database - 用于构建可扩展 Web 应用程序的书籍? (数据库性能/调优、网络、一般性能等)