WCF 路由/ESB 架构?

Posted

技术标签:

【中文标题】WCF 路由/ESB 架构?【英文标题】:WCF Routing/ESB Architecture? 【发布时间】:2012-01-20 16:18:47 【问题描述】:

我一直致力于在我的组织内使用 WCF 4 构建一组企业服务,并且可以使用一些指导。到目前为止,我设计的设置/体系结构类似于轻量级自定义 ESB。我有一个主要的“代理”服务(使用 wsHttp),它连接到三个底层的 netTcp 服务。代理和底层服务共享一个包含模型以及合约接口的通用程序集。在代理服务中,我可以从我想要公开的底层服务中选择哪些操作。这个想法是,根据业务需求,我们可能会拥有一组核心服务和几个不同的代理。我们计划利用 AppFabric 和 WAS 在 IIS 7.5 中托管所有内容(包括 netTcp 服务)。

这是我的问题,这样的设计是好的做法吗?它会扩展吗?这些服务应该能够每天处理数千笔交易。

我使用 WCF 4 中的路由代替了我提到的代理服务概念,但是没有看到它有多大价值,因为它只是进行重定向。

我还试图弄清楚如何优化代理服务(假设这种做法是可取的)对底层服务的代理。现在,我只是将代理作为代理主类中的私有成员。示例:

private UnderlyingServiceClient _underlyingServiceClient = new UnderlyingServiceClient();

我考虑过缓存代理,但是,我担心如果我遇到一个错误,整个代理会出现错误并且无法重用(除非我发现错误并简单地重新实例化)。

我对这些服务的目标是确保使用它们的客户可以尽快“进出”。快速请求回复。

任何输入/反馈将不胜感激。

【问题讨论】:

【参考方案1】:

如果我对您的理解正确,您可能有一些“后端”服务,可能在不同的计算机上。然后你有一个“fontend”服务,它基本上就像后端的代理,但在代码中是完全可定制的。我们正在使用机架中的几台计算机进行此精确设置。我们的前端是IIS7,后端是几台机器上的一堆wcf服务。

第一,它会扩展吗?好吧,在后端添加更多处理能力非常容易,编写一些负载平衡代码也不错。对我们来说,问题是前端陷入了困境,即使它只是充当代理。我们最终添加了几台前端计算机,您称它们为“代理”。这很好用。有人建议我使用 Microsoft ForeFront 进行自动负载平衡,但我还没有研究过。

二,你应该缓存代理吗?我肯定会说是的,但这有点糟糕。这些通道偶尔会出现故障。我有一个线程总是在后台运行。每 3 秒,它会唤醒一次,检查应用程序中的所有 wcf 服务和 wcf 客户端。任何有缺陷的都会被销毁并重新创建。

检查主机频道:...

while(true)

  tryif(MyServiceHost.State!=System.ServiceModel.CommunicationState.Opened) ReCreate(); catch 
  System.Threading.Thread.Sleep(3000);

检查客户渠道:...

  private static ChannelFactory<IMath> mathClientFactory = new ChannelFactory<IMath>(bindingHttpBin);
  while(true)
  
    try
    
      if(MyServiceClient.State==System.ServiceModel.CommunicationState.Faulted) 
      
        EndpointAddress ea = new EndpointAddress(ub.Uri);
        ch = WcfDynamicLan.mathClientFactory.CreateChannel(ea);
       
    
    catch 
    System.Threading.Thread.Sleep(3000);
  

在客户端,我不仅缓存了频道,还缓存了ChannelFactory。这只是为了方便,但可以缩短创建新频道的代码。

【讨论】:

以上是关于WCF 路由/ESB 架构?的主要内容,如果未能解决你的问题,请参考以下文章

我们应该引入 BizTalk/ESB 吗?

架构设计:系统间通信(34)——被神化的ESB(上)

分布式架构,SOA,ESB,微服务

在微服务架构中,我们还需要ESB吗?

架构设计:系统间通信(34)——被神化的ESB(上)

服务端高并发分布式架构 ESB 企业服务总线