05 2013 档案

摘要:在使用MSMQ的时候一般只会使用默认的XML序列化来对消息进行存储,但XML存储的缺点是序列化体积相对比较大和效率上有点低.其实.net提供非常简单的方式让我们实现不同序列化方式来存储MSMQ信息,如json,protobuf等.为了能够让开发人员实现自定义序列化的消息存储,.NET提供了IMessageFormatter这样一个接口,只需要简单地实现这个接口就可以对MSMQ的消息进行处理.以下讲解如何实现json和protobuf的messageformater.IMessageFormatter// 摘要: // 从“消息队列”消息体序列化或反序列化对象。 [TypeC... 阅读全文
posted @ 2013-05-31 13:28 beetlex 阅读(3167) 评论(2) 推荐(6)
摘要:Stream是.net数据流操作的一个封装,它提供统一的流读写规则,为后期开发这方面的功能提供了很大的便利性.有些场景下是直接操作byte[]比较灵活所以Stream派生出MemoryStream从byte[]构建一个stream来方便开发人员使用.但在使用的时候碰到了一个非常坑爹事情.一个非常意想不到的结果...应用代码string value = "111111111"; string value1 = "2222222222222222222222"; System.IO.MemoryStream stream = new System.IO... 阅读全文
posted @ 2013-05-29 10:53 beetlex 阅读(23391) 评论(49) 推荐(4)
摘要:使用ServiceStack.Redis的连接池在操作多台Redis的时候并不会对出现故障的Redis进行排除切换,这样就会导致应用会还是会分配到故障的Redis服务中导致应用处理错误.这次对ServiceStack.Redis连接池的改造主要实现两个功能:1)对故障的Redis服务在轮循的时候排除,2)定期检测故障的Redis服务,如果服务正常则恢复到轮盾环节中.(ServiceStack.Redis的代码结构还是很不错修改起来也很方便)增加基于Host的连接池功能ServiceStack.Redis连接池的连接存储结构相对简单,只是用一些简单的数组进行处理也没有明确按Host划分,所以修改 阅读全文
posted @ 2013-05-24 11:32 beetlex 阅读(5551) 评论(9) 推荐(2)
摘要:PooledRedisClientManager是ServiceStack.Redis的连接池管理类,通过连接池可以实现更高效的Redis操作.但PooledRedisClientManager相关GetClient的设计似乎存在一些问题,如果你只Pool只指向一台Redis这倒不会有什么问题,但如果指向多台Redis那就可能产生悲剧的事情.下面解释一下指向多台Redis存在的一些问题.具体代码 1 /// <summary> 2 /// Called within a lock 3 /// </summary> 4 /// <returns><... 阅读全文
posted @ 2013-05-23 11:23 beetlex 阅读(8191) 评论(1) 推荐(1)
摘要:IIS可以对ASP.NET站点进行一个资源控制,包括使用的CPU,处理进程数等.但如果想对某些动态页面进行一个资源限制,只允许固定线程数量来处理某些动态请求,而不至于在某些情况个别的动态请求把整个站的资源都占光了.对于这么小的粒度控制显然不适合由IIS来做,这个时候就可以通过asp.net提供IHttpAsyncHandler来解决这种事情.处理结构由于Asp.net提供了异步处理Handler,所以可以在Handler的Begin处理方法中把具体对象存放到队列中,然后根据实际业务的需要来配置1-N个线程来处理相关请求.IHttpAsyncHandlerpublic interface IHt 阅读全文
posted @ 2013-05-21 13:37 beetlex 阅读(3122) 评论(9) 推荐(3)
摘要:在Linux下对Web进行压力测试的小工具有很多,比较出名的有AB.虽然AB可以运行在windows下,但对于想简单界面操作的朋友有点不太习惯.其实vs.net也提供压力测试功能但显然显得太重了,在测试的时候也会占用了大量的资源导致测试效果不理想.为了让在win下对web压力测试变得更简单方便所以用.net写了一个小工具来完成这个事情功能介绍这个小工具提供了一系列的参数设置,主要包换测试的类型,并发用户数和是否保持长连接状态等.KeepAlive是否保持连接状态,如果选择是则省下了连接创建的损耗从而达到更高的吞吐测试效能并发用户数这个值是指同时请求的用户数,如果是局域网测试此值一般在100以内 阅读全文
posted @ 2013-05-16 13:04 beetlex 阅读(23541) 评论(59) 推荐(11)
摘要:在大并发数据应用处理过程中,往主需要消息队列这样的应用把信息分发到不同服务器上进行数据处理,目的是把流程数据拆分成N个环节分布到不同的服务器上运行,从而提高整体数据处理能力.前段时间在做MSMQ的负载和故意处理,在测试的过程中发现让我非常困扰的问题,就是通过.net 操作远程MQ的时候当对方挡机了.NET并不会报错,而是会写入本地转出队列这样就很难实时有效地把消息转移到别的MQ服务器.另一方面.NET操作远程MQ本机也必须装上MQ服务,还有一个就是.NET操作远程MQ的损耗也非常高.为了解决以上问题的,所以打算实现一个MSMQ代理组件,组件分为两大部分别是服务端和CLIENT,服务端的功能主要 阅读全文
posted @ 2013-05-07 12:57 beetlex 阅读(1490) 评论(3) 推荐(3)
摘要:最近在做一个MSMQ的Agent服务,在这里分享一下这个服务在优化的一点经验,通过分析内存更准确地定位出程序中存在的性能问题,从而让程序的性能以倍数的提升.问题的引发由于通过.NET MSMQ的Client实现消息分布和故障转移实在测试效果并不理想..所以决定实现一个MSMQ的Agent服务,由于有网络编写的经验所以对实现的效果还有很有信心的.可惜最终实现出来的效果实在惨不忍睹...4个连接并发消息写入只有150/秒,实在是完全坑爹的结果!在架构上的设计并不存在问题,所以问题一定存在程序实现过程中,以往的经验告诉自己做内存分析是最直接的办法.问题排查一Buffer没正常回收到Pool由于在测试 阅读全文
posted @ 2013-05-02 13:08 beetlex 阅读(3356) 评论(10) 推荐(5)