6

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

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

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

我研究了一些可以回答上述标准子集的技术:

  1. Thrift - Facebook 的跨平台 RPC 平台
  2. WCF - 支持 SOAP、JSON 和 REST,因此它可以被认为是语言互操作的。生成可用于生成 java 代理的WSDL文件。
  3. Microsoft DSS - 只是将它包含在我的调查中,但它似乎并不相关,因为它是高度状态驱动的和特定于 .NET 的。
  4. 网页服务

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

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

4

7 回答 7

6

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

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

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

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

于 2009-04-18T06:59:14.047 回答
2

亚马逊的 CTO - Werner Vogels 谈到了关于服务和架构的有趣且相关的事情:

于 2009-04-24T23:49:06.883 回答
1

IDesign.net 有大量的 WCF 下载

于 2009-04-18T05:55:06.200 回答
0

查看捆绑 CXF 服务堆栈的Mule项目以及提供 RESTful 替代方案的 Mule REST 包。我想你会看到它解决了你所有的痛点,并且在文档和发行版中有很多例子。

于 2009-04-18T05:42:26.883 回答
0

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

专注于构建人们真正喜欢的可用、实用的应用程序。当你开始遇到问题时,就开始处理瓶颈。

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

于 2009-04-20T16:58:46.273 回答
0

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

于 2009-04-15T19:23:03.163 回答
0

我可以推荐这本书:Springer Verlag 出版的 Enterprise Service Oriented Architectures。

于 2009-04-18T21:34:14.740 回答