随笔分类 -  可扩展

摘要:基本验证与业务验证,基本验证就是始终保持不变的验证规则,可以通过如下硬编码实现:public class Order { [Required] [Range(typeof(decimal), "1", "10000")] public decimal Price { get; set; } [Required] [StringLength(30)] public string Customer { get; set; } [Required(AllowEmptyStrings=true)] ... 阅读全文
posted @ 2013-09-08 17:35 McKay 阅读(2332) 评论(3) 推荐(2) 编辑
摘要:先上一张本文所描述的适用场景图分布式场景,共3台server:前端ServerOrder App ServerWarehouse App Server功能:前端Server可以不停的发送Command到CommandBus,然后由CommandBus分配不同的Command到各自的app server去处理。前端Server可以只发送Command而不必等待Response前端Server可以同步等待Response返回MSMQ消息超过3.5M会自动转为网络共享方式传输消息对于同一Command的处理,可以通过增加App Server的方式来提高并发处理速度(比如:可以开2个app serve 阅读全文
posted @ 2013-09-05 00:38 McKay 阅读(3056) 评论(2) 推荐(5) 编辑
摘要:Taobao有她自己的分布式session框架,.net阵营也不能落后了,在下做了个基于MongoDB的支持最多26台MongoDB的分布式Session框架。先看看配置文件: SessionDB mongodb://localhost mongodb://localhost mongodb://localhost mongodb://localhost mongodb://localhost mongodb://localhost mongodb://localhost mongodb://localhost mongodb://localhost mongodb://... 阅读全文
posted @ 2013-08-28 23:46 McKay 阅读(9527) 评论(30) 推荐(24) 编辑
摘要:Node.js擅长的领域为:不需要很多运算吞吐量要求高进消息轻并且要求快出消息轻并且要求快网上的例子都是socket.io的,我一直在想到底能用在什么地方?根据node.js的优点(擅长领域),想出了这个应用场景:jQuery UI的autocomplete应用场景,这个需要的数据都是很零碎却量多的。结构如下:用ASP.NET MVC4新建一个web站点,在这里编写jQuery UI autocomplete代码用WebMatrix编写Node.js代码(主要是基于express的路由)由于这2个都是独立的站点,因此涉及到跨域问题,使用JSONP解决(其实在js代码调用和node.js端都要修 阅读全文
posted @ 2013-08-20 14:21 McKay 阅读(3242) 评论(8) 推荐(0) 编辑
摘要:这次介绍的这个框架只适用于中小项目,并且各个读写数据库结构是一致的情况,还要并且是写入数据库只有1台情况。我们来看看这个子系统适用的场景:我们来看这个子系统的配置文件: Server=.;Database=d1;User Id=sa;Password=111111; //唯一的主数据库(写入DB) Server=.;Database=d2;User Id=sa;Password=111111; //这些是普通的对等的读数据库,只是做了些普通索引优化 Server=.;Database=d3;User Id=sa;Password=111111; //同... 阅读全文
posted @ 2013-07-31 00:42 McKay 阅读(6026) 评论(14) 推荐(2) 编辑
摘要:大家对这段代码肯定很熟悉吧:public List SearchUsers(string userName) { string cacheKey=string.Format("SearchUsers_{0}", userName); List users = cache.Find(cacheKey) as List; if (users == null) { users = repository.GetUsersByUserName(userName); ... 阅读全文
posted @ 2013-07-30 17:10 McKay 阅读(4319) 评论(9) 推荐(6) 编辑
摘要:放心,这次不是说设计模式中的代理模式,说的是C#的RealProxy的用法,主要用于:通过给class贴标签,让class做更多的工作,比如判断是否存在缓存,有则直接返回缓存object,没有则保存为缓存,等待下次请求是可以更快的获取数据(当然这只是其中一种常用用途,MVC的Action就是采用这种方式)下面是序列图:.Net Object Generation interceptor属于.NET自身行为,不需要额外写代码。Code Consumer指想调用RealObject来进行调用的对象,比如控制台程序,或者WEB程序。ProxyAttribute里定义了具体代理类是哪个,这个代理类是自 阅读全文
posted @ 2013-07-30 11:08 McKay 阅读(4605) 评论(3) 推荐(1) 编辑
摘要:对象池服务可以减少从头创建每个对象的系统开销。在激活对象时,它从池中提取。在停用对象时,它放回池中,等待下一个请求。我们来看下主线程中,如何与对象池打交道:static void Main(string[] args) { InstancePoolResolver.Register(); while (true) { Thread.Sleep(2000); Console.Clear(); for (int i = 0; i ... 阅读全文
posted @ 2013-07-29 19:11 McKay 阅读(3533) 评论(4) 推荐(2) 编辑
摘要:受到CQRS的影响,写了个EventBus,能实现发布订阅模式执行event,在DDD模型中,可以使用如下代码触发事件:EventBus bus = EventBus.Instance();bus.Publish(new OrderAddedEvent());解决方案结构图如下,很简单易懂:xml事件配置代码sample如下(1个event可以定义多个订阅者,如下): ConsoleApplication2.code.Events.OrderAddedEvent ConsoleApplication2.code.EventHandlers.OrderAddedEve... 阅读全文
posted @ 2013-07-28 23:21 McKay 阅读(2657) 评论(1) 推荐(0) 编辑
摘要:我们先来看看本人对下面这两个名词的个人见解:软件架构:几乎每个软件系统的架构都是不同的,因为软件架构的第一步就是根据当前项目的重要需求及约束来制定一个个技术决策。软件框架:可以分成行业框架和通用框架。通用框架是对大多数软件项目常用的模块(底层+高层)进行封装(同时暴露热点)的一个集合,能提高开发速度以及质量行业框架是针对某特定领域,把类似领域逻辑提取出来进行封装(同时暴露热点)的一个集合,能提高开发速度以及质量行业框架可以是基于通用框架之上的。站在架构师的角度,针对架构的开发,会慢慢演变为针对框架的开发(由于需要考虑复用以及对开发人员友好API特性)伸缩性:一般是指机器级别的横向扩展,如:we 阅读全文
posted @ 2013-05-27 21:52 McKay 阅读(7126) 评论(25) 推荐(5) 编辑
摘要:是一缓存,能够Set, Get value,哈哈,普通用法如下:public User GetUser(int userId){ UserInfo user = cacheService.Get("UserInfo:" + userId) as UserInfo;//cacheService是自定义的接口,具体的memcache实现代码被隔离了 if (user == null) { user = dao.GetUser(userId); cacheService.Se... 阅读全文
posted @ 2013-04-29 22:42 McKay 阅读(2360) 评论(2) 推荐(2) 编辑
摘要:要想性能高,缓存是关键,缓存处理更是关键最近一直在关注性能方面,回想起以前写cache的场景,纠结啊,一坨一坨的同步代码,都写在了业务方法中,更要命的是由于涉及到取缓存代码导致了多个方法中同时牵涉了很多处理缓存的代码、结构性基本上没有。由此粗略写了这个EventFramework,还没有优化,由于用到了反射,所以效率不高,还需要优化(今天刚搞出来的。。。)代码下载这个EventFramework能够将业务方法和相关event分离开(事件订阅),比如:事件订阅:Order.Add函数调用后,EventFramework能根据订阅的event,逐一进行调用(缓存处理可以放在这里,对处理缓存的结构比 阅读全文
posted @ 2013-04-25 10:28 McKay 阅读(3623) 评论(4) 推荐(3) 编辑
摘要:性能低主要是由于I/O操作导致的延迟,导致了等待 ==>CPU很闲,处理速率却上不去解决办法: 减少I/O操作: 加入缓存来缓解I/O操作AppFabric或Memcached让出主线程,开启单独线程来处理I/O操作(主线程就能处理更多的IIS请求)PageAsyncTask, Parallel把大面积的数据(比如某字段中保存了1w个字符串,并且select了多行...OMG!),压缩后保存到磁盘,也能减少I/O消耗的时间ICSharpCode.SharpZipLib.dll如果系统是分多个物理计算机通信的,也要压缩message的内容,比如WCF自定义MessageFormat... 阅读全文
posted @ 2013-04-24 15:50 McKay 阅读(1128) 评论(3) 推荐(2) 编辑