Web服务架构 - 多租户设计模式(可能)

时间:2010-08-30 03:57:08

标签: c# wcf design-patterns architecture

我有一个轻微的设计问题:我必须创建一个从多个数据库服务器检索客户数据的Web服务(asmx或wcf),每个服务器都完全相同,除非它们包含不同状态的数据(每个数据库1个服务器)州,大州可以有倍数等。)

这将由呼叫中心使用,例如,有人呼叫呼叫中心并说,我可以在我的订单交付时有一个指示我的订单号是“aa_etc”,服务应该对所有人运行查询服务器并返回该订单的所有订单详细信息。

这是直截了当的,除了有多个服务器要查询。我的想法是让中央sqlite数据库与当前在线服务器的所有连接字符串然后依次查询每个服务器


public class OnlineServer 
{
 public string Name {get;set;}
 public string ConnectionString {get;set;} 
}
...
public class Order
{
   public List OrderDetail getDetails(string orderno,string connstring)
   {
     //Code to get all orders from database using specified connstring
   }
   ....
}
....

List servers = getOnlineServers();

foreach(OnlineServer in servers)
{
  OrderDetails d = Order.getDetails("aa_etc",OnlineServer.ConnectionString);
}


写下这个想法是完全错误的。

我真的很感激,如果有人可以帮助我朝着正确的方向前进,这是一个非常大的项目,并且开始这个错误将会在以后流下眼泪。

由于

2 个答案:

答案 0 :(得分:1)

如果你不能将数据合并到一个数据库中。 您可以使用nHibernate。它可以查询多个数据库,请参阅http://mikehadlow.blogspot.com/2008/10/mapping-entities-to-multiple-databases.html

您必须为每台服务器设置不同的实体。通过这种方式,它将处理所有数据库连接,池,会话等。

答案 1 :(得分:0)

我想更进一步地考虑这个问题,但我有一个可能感兴趣的离题创意,所以我会在那里完成。

  

我的想法是拥有中央sqlite数据库   与所有连接字符串   当前在线服务器然后查询   每一个轮流

这给了我一个想法:为什么不能异步地触发每个系统的搜索查询?我在这里考虑AJAX(但你可以使用iFrames)......

  1. 用户输入搜索并点击“开始”。
  2. 不知何故,你循环遍历已知数据源的集合,但每个“子”搜索都是独立的和异步的(想想联合搜索)。
  3. 当结果返回时,它们会在屏幕上显示给用户 - 如果他们得到他们喜欢的匹配,他们就可以停止搜索过程。
  4. 我假设UI可以直观地将数据“拉到一起” - 无论是通过直接布局还是通过聪明的客户端代码 - 这将为您提供更多选项来定制UI,但代价是更复杂客户端代码库。

    您还有其他选择,例如允许用户根据需要缩小搜索范围。

    此外,添加/删除数据源很简单。

    这是我需要更直接地解决你的实际问题的地方;在我看来,你最希望每个数据库都有一个单独的服务 - 但你可以灵活地做到这一点。

    • 拥有反映数据源的服务集合可为您提供干净的逻辑架构。
    • 这样做并不排除在顶部放置一些东西(将松散耦合在这里)。
    • 总是更容易把东西放在一起而不是撕开它们。
    • 您仍然可以重用代码:也许是多个实例。
    • 由于多个实例,您会有一些管理开销 - 而且还有更好地管理它们的灵活性:访问控制,资源专用等。