新手的实用SOA

rip*_*234 6 service soa web-services scalability high-availability

我是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 ......

egl*_*ius 6

我认为问题更多地涉及所涉及的概念而不是工具.项目答案:

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

你真的需要支持这种类型的负载吗?设置与特定方案相关的适当性能/负载/互操作性目标.如果你真的需要支持这种类型的负载,我建议你让一个人在船上处理它.

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


Cod*_*ain 0

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