繁体   English   中英

Web服务体系结构-多租户设计模式(也许)

[英]Web Service Architecture - multi tenancy design pattern (maybe)

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

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

这很简单,除了要查询多个服务器。我的想法是让中央sqlite db具有当前在线服务器的所有连接字符串,然后依次查询每个


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);
}


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

如果有人能帮助我朝正确的方向前进,我将非常感激,这是一个非常大的项目,而开始犯错将在后来流下眼泪。

谢谢

如果您无法通过某种方式将数据合并到单个DB中。 您可能可以使用nHibernate。 它可以查询多个数据库,请参见http://mikehadlow.blogspot.com/2008/10/mapping-entities-to-multiple-databases.html

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

我想进一步考虑这个问题,但是我有一个可能很感兴趣的现成想法,因此我将继续解决它。

我的想法是让中央sqlite db具有当前在线服务器的所有连接字符串,然后依次查询每个

这给了我一个主意:为什么不异步地向每个系统启动搜索查询? 我在这里想使用AJAX(但是您可以使用iFrame)...

  1. 用户输入搜索并点击“开始”。
  2. 您会以某种方式遍历已知数据源的集合,但是每个“子”搜索都是独立且异步的(请考虑联合搜索)。
  3. 结果返回时,它们会在屏幕上显示给用户-如果他们得到自己喜欢的匹配项,然后他们可以停止搜索过程。

我假设数据将通过UI可视化“拉在一起”-通过直接布局或通过巧妙的客户端代码-这将为您提供定制UI的更多选择,但以更复杂的客户端为代价代码库。

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

同样,添加/删除数据源也很简单。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM