新手的实用SOA

时间:2009-04-15 19:15:47

标签: web-services service scalability soa high-availability

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

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

  1. 可组合性(+管理依赖项,发布/订阅)
  2. 服务的语言独立性
  3. 可扩展性&性能
  4. 高可用性
  5. 我研究了一些能够回答上述标准的一部分的技术:

    1. Thrift - Facebook的跨平台RPC平台
    2. WCF - 支持SOAP,JSON和& REST,因此它可以被认为是语言可互操作的。生成可用于生成Java代理的WSDL文件。
    3. Microsoft DSS - 只是在我的调查中将其包括在内,但它似乎并不相关,因为它是高度国家驱动的和.NET特定的。
    4. 网络服务
    5. 现在,我理解如何从上面得到可组合性和语言独立性的某些方面。但是,我没有找到关于如何使用上述/其他工具实现可伸缩性和高可用性的更多具体信息(不是嗡嗡声)。最后我得到了我的问题:

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

7 个答案:

答案 0 :(得分:6)

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

  1. 理解并内化bounded context。保持不相关的部分将其重要性分开,以便在不同服务上实现真正的重用。相关技术对此没有帮助,您可以在适当的上下文中分离应用程序,您可以适当地重用不同的服务。
  2. 基于已知协议的清晰通信端点允许使用不同的技术实现不同的部分
  3. 让操作像基于不同协议的独立操作一样流动,为您提供了许多可以添加层的地方。是使用大量资源的整个过程的特定子过程,服务器不能再使用它,只需移动到单独的服务器。负载不断增长,并且该服务器不再使用它,添加额外的服务器和负载平衡。您还有更多机会使用缓存和连接池。
  4. 拥有一个需要始终可用的关键子流程,添加服务器以便进行故障转移。有一个需要一直“可用”的整个过程,使用可以在以后处理的部分的队列。
  5. 你真的需要支持这种类型的负载吗?设置与特定方案相关的适当性能/负载/互操作性目标。如果你真的需要支持这种类型的负载,我建议你让一个人在船上处理它。

    如果它是最终可能的负载,则识别有界上下文并设计具有SOA思维模式的那些之间的交互。保持代码清洁是您需要做的其余工作,在代码库中使用TDD,松耦合,集中集成测试等。有了良好的代码,如果您以后需要分离系统的各个部分,那将会容易得多。

答案 1 :(得分:2)

亚马逊首席技术官提供有关服务和架构的有趣且相关的事情 - Werner Vogels:

答案 2 :(得分:1)

IDesign.net对WCF有一个bunch of great downloads

答案 3 :(得分:0)

值得一看:http://www.manning.com/davis/

答案 4 :(得分:0)

查看捆绑了CXF服务堆栈的Mule项目以及提供RESTful备选方案的Mule REST包。我想你会看到它解决了你所有的痛苦,文档和分发中都有很多例子。

答案 5 :(得分:0)

我可以推荐这本书:Springer Verlag出版的“面向企业服务的架构”。

答案 6 :(得分:0)

这里的所有建议都很好,但在你真的需要之前不要担心。

专注于构建人们真正喜欢的可用的功能性应用程序。当您开始遇到问题,然后开始处理瓶颈。

您永远无法预见应用程序失败的每一种方式,那么您怎么知道[[insert tech here]]是否是您的答案?