DDD:DDD+CQRS+高伸縮性的分布式架構


物理架構

物理架構優勢

  • WEB服務器可以單獨做負載平衡(獨立伸縮)。
  • 應用服務可以單擊做負載平衡(獨立伸縮)。
  • 容易引入“后台任務服務器”(正在做這方面的支持)。
  • 支持混合部署(一部分業務邏輯運行在WEB服務器,一部分業務邏輯運行在應用服務器),部署方式對開發人員幾乎透明。

如何選擇部署模型

  • 當用戶數少(自己測試)的時候可以不用應用服務器,只做WEB負責平衡。
  • 當用戶數多(自己測試)的時候,將頻繁執行的業務邏輯分離部署到應用服務器上。
  • 對於那些長時間(自己測試)執行的任務,將它們部署到后台任務服務器上。

示例代碼

項目結構

WEB服務器代碼

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 
 7 using System.Diagnostics;
 8 
 9 using Microsoft.Practices.ServiceLocation;
10 
11 using Happy.Commands;
12 using Happy.WCF.Demo.Commands;
13 using Happy.WCF.Commands;
14 
15 namespace Happy.WCF.Demo.Mvc.Controllers
16 {
17     public class DefaultController : Controller
18     {
19         public ActionResult Index()
20         {
21             var watch = Stopwatch.StartNew();
22 
23             var localBus = ServiceLocator.Current.GetInstance<ICommandBus>();
24             var localCommand = new TestCommand { X = 5, Y = 5 };
25             localBus.Send(localCommand);
26 
27             watch.Stop();
28 
29             var localMessage = string.Format("本地命令:{0} + {1} = {2},執行時間:{3}", localCommand.X, localCommand.Y, localCommand.Result, watch.Elapsed);
30 
31 
32             watch = Stopwatch.StartNew();
33 
34             var remoteBus = ServiceLocator.Current.GetInstance<ICommandBus>("Proxy");
35             var remoteCommand = new TestCommand { X = 5, Y = 5 };
36             remoteBus.Send(remoteCommand);
37 
38             watch.Stop();
39 
40             var remoteMessage = string.Format("遠程命令:{0} + {1} = {2},執行時間:{3}", remoteCommand.X, remoteCommand.Y, remoteCommand.Result, watch.Elapsed);
41 
42 
43             return this.Content(
44                 localMessage
45                 +
46                 "<br/>"
47                 +
48                 remoteMessage
49             );
50         }
51     }
52 }

代碼下載

下載地址

為什么標題為“DDD+CQRS+高伸縮性的分布式架構”

這個分布式部署模式的Demo是用HappyFramework這個開源框架開發的,而HappyFramework的目的就是為了支持DDD+CQRS。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM