共3页: 上一页 1 2 3 下一页 
摘要: Memcached是一个很常见的分布式组件,现在有很多.NET下开源的Memcached组件的客户端实现,比如EnyimMemcachedClient。在Adhesive框架中实现了一个分布式组件客户端,同时也实现了第一个具体的客户端,也就是Memcached。与其它实现不同的是,这里我们提供了Memcached二进制协议的完整实现,并且也实现了一些特色功能,进一步封装了Memcached的一些基础API。要使用Adhesive.DistributedComponentClient,首先免不了进行配置。和框架的其它模块一样,这里我们也使用了配置服务:进一步查看:在这里我们定义了一个TestMe阅读全文
posted @ 2011-10-18 17:51 lovecindywang 阅读(1602) 评论(0) 编辑
摘要: 之前我们提到过,Mongodb数据服务的客户端和服务端都使用了内存队列服务模块来提交数据,使用内存队列服务有下列好处:1、操作异步化:比如客户端对数据进行转换再调用Wcf把数据提交到服务端的时间需要10毫秒,那么,使用了队列服务之后,客户端向队列插入数据的方法只需要1毫秒调用即可完成,之后的9毫秒只会发生在后台。2、降低瞬时的流量:比如在某个时刻有特别多的数据需要提交,那么这种不均匀的提交对服务端或者对数据库来说是一个瞬时的压力,使用了队列服务之后,队列服务会按照指定的间隔提交,并不会产生瞬时的压力,未提交的数据会保存在内存中。当然,在这里我们实现的是内存队列服务,因为不适合保存不允许丢失的数阅读全文
posted @ 2011-10-14 10:14 lovecindywang 阅读(1710) 评论(4) 编辑
摘要: Mongodb数据服务可以直接接受任何类型数据,并且它设计为可以承受大量数据的写入。为了能保存任何类型的数据,并且在后台可以查看任何类型的数据,因此我们必须在收到数据的时候对数据的元数据进行提取,随同主体数据一并保存在数据库中。对数据本身也需要重新组织结构,相当于进行一次序列化,然后保存到数据库中。虽然Mongodb是支持Json格式的,但是由于我们在保存数据的时候还有很多逻辑,因此我们必须手动进行这个工作。其实对于提交数据来说,应该是一个非常快的动作,应该以异步方式进行,在一个尽量短的时间内让方法的调用可以返回,之后可以在后台慢慢进行数据的转换和数据发送到远端。因此,开发了一个内存队列服务模阅读全文
posted @ 2011-10-13 15:25 lovecindywang 阅读(1799) 评论(1) 编辑
摘要: 在前一篇中,我们介绍的主要是站在开发人员的角度如何使用Mongodb数据服务来保存数据,这一篇会介绍在保存数据之后,如何去查看数据,也就是怎么样去使用Mongodb数据服务的通用后台。Mongodb数据服务的后台是采用Silverlight4制作的。进入后台,第一件事情是登录系统:这个配置是通过配置服务进行的,来看一下Mongodb数据服务的配置部分中的管理员配置(至于其它配置会在实现篇中介绍,因为其中涉及到了Mongodb数据服务的实现细节):在这里我们定义了三个用户,进入aa这个用户看一下:这里除了定义登录用户名、密码之外还定义了管理的数据库:在这里,通过我们限制aa这个用户只能对以Aic阅读全文
posted @ 2011-10-12 15:07 lovecindywang 阅读(1318) 评论(1) 编辑
摘要: 之前介绍的应用程序信息中心模块中所有日志、异常、性能和状态数据都依赖Mongodb数据服务,Mongodb数据服务的接口也简单的可以: public interface IMongodbInsertService : IDisposable { void Insert(object item); }总之一点,不管什么数据,提交进来即可!在提交之前所要做的只是设计...阅读全文
posted @ 2011-10-12 09:30 lovecindywang 阅读(1618) 评论(3) 编辑
摘要: 应用程序信息中心模块项目的源代码结构如下:在这里可以看到:1、接口项目主要都是服务的接口定义、基于接口的扩展方法以及接口中需要用到的一些实体的定义。2、实现项目主要由几部分构成:1)模块的配置2)异常服务3)自动附加信息的各种提供程序4)日志服务5)性能服务6)状态服务有关配置部分,没什么可以介绍的,全部依赖于配置服务,直接传递一个自定义类对象作为默认的配置,配置服务会初始化所有的配置节点和默认值: var config = configService.GetConfigItemValue(false, "AppInfoCenterConfiguration", defa.阅读全文
posted @ 2011-10-11 15:02 lovecindywang 阅读(1529) 评论(1) 编辑
摘要: 应用程序信息中心 Application Infomcation Center 简称AIC其实是一套已经实现的程序,集应用程序数据收集、数据存储以及后台查询、报警为一体。主要的作用是实现网站特殊信息(比如未处理异常)的监控和报警。在Adhesive中进行了重写和升华,把功能分为日志、异常、性能和状态几个部分: public class AppInfoCenterService { ...阅读全文
posted @ 2011-10-10 17:46 lovecindywang 阅读(1607) 评论(0) 编辑
摘要: 公共模块是所有框架内部组件依赖的项目,其中包括一些基础实现和小工具。首先是一个Bootstrapper的理念:1、在需要的时候,我们可以把实现和接口进行分离,实现使用依赖注入(不一定要项目引用,只需要文件夹下有实现的DLL)。那么,我们就需要在网站应用程序或是其它应用程序启动的时候,把这些实现注入进来。这里需要提一点的是,正因为我们把实现和接口进行分离,使得我们可以让两个组件进行相互的引用,比如配置服务的实现可以调用信息中心的接口来记录日志,而信息中心的实现可以调用配置服务的接口来存储配置。2、然后,我们需要针对每一个组件进行一些初始化工作,比如进行数据初始化,这步工作需要在1之后。当然,还可阅读全文
posted @ 2011-10-10 15:38 lovecindywang 阅读(1595) 评论(2) 编辑
摘要: Adhesive框架是为了满足公司内部项目需要开发的一套基础框架。Adhesive这个单词是胶水的意思,这个名字有几层含义:1、框架其本身的组件像胶水一样相互配合,旨在为一个中型的互联网网站提供一套基于.NET 4.0的开发基础平台,实现灵活性、性能、伸缩性等。2、框架对微软提供的既有技术进行粘合和扩展使它们可以更好发挥作用,比如ADO.NET EF4、ASP.NET MVC3、.NET WCF等。框架基于.NET 4.0开发,可以用于ASP.NET (MVC)网站、控制台应用程序或Windows服务应用程序等,提供的主要功能包括:1、基础组件:Bootstrapper模式、本地配置服务、本地阅读全文
posted @ 2011-10-10 14:10 lovecindywang 阅读(3651) 评论(23) 编辑
摘要: (一)总体介绍 (二)公共模块实现 (三)配置服务模块使用 (四)配置服务模块实现 (五)信息中心模块使用 (六)信息中心模块实现 (七)Mongodb数据服务模块使用 (八)Mongo...阅读全文
posted @ 2011-10-09 16:48 lovecindywang 阅读(3035) 评论(3) 编辑
摘要: 在公司内部有很多基础框架或者基础组件,甚至对于使用SOA架构的公司来说,会有大量的业务组件的契约程序集,对于这些框架或组件的引用管理有的人使用源代码管理工具,但是NuGet相比源代码管理工具更方便:1) 安装和卸载:不需要手动添加和移除引用,不需要手动改写配置文件甚至是一些初始化服务的代码。版本升级也只需要执行一条命令。2) 打包:多文件打包,支持依赖管理等,使用的人没有繁琐的配置。对于官方的包,可以在http://www.nuget.org/ 找到,自己也可以提交包上去。但是如果不希望把包公开的话,可以在内部架设一个NuGet服务器。下面介绍一下基本步骤以及如何进行打包。1) 下载 NuGe阅读全文
posted @ 2011-05-12 13:59 lovecindywang 阅读(9959) 评论(9) 编辑
摘要: 源代码见 http://wcfextension.codeplex.com/注意:1) 本来没打算这么早开源,这只是一个比较原始的实现,请勿直接在商业环境使用2) 请注意本框架的授权条款Apache License 2.03) 本框架依赖的外部程序集或框架版权归原作者所有4) 框架之后可能会增加很多功能,请关注项目主页即使获得最新信息解压缩代码打开sln文件后可以看到这样的结构1) WcfExtension就是核心框架:Client文件夹放的是客户端用到的一些代码,Server自然是服务端用到的一些代码Log是日志相关的一些代码(四种日志),Config是配置相关的代码Setting是框架本身阅读全文
posted @ 2011-05-10 15:33 lovecindywang 阅读(6752) 评论(44) 编辑
摘要: 以前写过一个MVC执行流程的分析的文章:http://www.cnblogs.com/lovecindywang/archive/2010/12/02/1894740.html使用一些自定义的代码埋点方式来解析MVC框架颞部的执行过程。今天看到一个老外写了一篇不错的Wcf文章,我整理了一下它的代码,为每一个方法加上了MSDN中标注的中文注释,大家可以通过这个例子来学习Wcf的扩展以及了解Wcf框架内部的执行流程:完整的代码点击这里下载。下图可以看到代码执行结果的控制台截图(点击查看大图):注意:1) 蓝色的代表服务端的执行逻辑,黄色的代表客户端的执行逻辑2) 执行了三次方法,第一次普通的请求返阅读全文
posted @ 2011-05-09 14:50 lovecindywang 阅读(2826) 评论(8) 编辑
摘要: 对于负载均衡环境,多服务器内存中缓存数据的话,需要解决的一个很重要的问题就是一旦数据库中数据有更新,怎么让缓存的数据立即更新?如果可以容忍延迟或是差异性的话,可以考虑缓存的数据有一个过期时间。但是,最好的方式还是采用通知方式,或者说发布订阅方式。所有的客户端会订阅客户端配置修改的消息,所有的服务端会订阅服务端配置修改的消息,配置后台在修改后复杂发布这个消息。在这里采用redis作为发布订阅的服务端,利用TCP双工特性与所有客户端和服务端保持长连接,进行消息的推送。 string contract = ""; using (WcfConfigDataContext data 阅读全文
posted @ 2011-04-28 17:31 lovecindywang 阅读(4144) 评论(17) 编辑
摘要: 在第一篇文章中已经列出了几种日志的概览:所有的日志都有一个最终基类,来看看这个类:[DataContract(Namespace = "WcfExtension")] [KnownType(typeof(WcfExceptionInfo))] [KnownType(typeof(ServerExceptionInfo))] [KnownType(typeof(ClientExceptionInfo))] [KnownType(typeof(WcfInvokeInfo))] [KnownType(typeof(ServerInvokeInfo))] [KnownType(ty阅读全文
posted @ 2011-04-28 15:01 lovecindywang 阅读(3652) 评论(6) 编辑
摘要: 假设定义了一个服务契约:[ServiceContract(Namespace = "WcfExtension.Services.Interface")] public interface ITestService { [OperationContract] int Add(int x, int y); [OperationContract] [ServiceKnownType(typeof(TestContract))] ITestContract TestData(ITestContract tc); ...阅读全文
posted @ 2011-04-28 12:54 lovecindywang 阅读(3216) 评论(4) 编辑
摘要: 从这次开始在几个方面简单阐述一下实现,集中配置是这个框架很大的一个目的,首先在数据库中会有这么一些表:其实可以看到这些表的结构,应该是和<system.serviceModel>配置节点中的层次有对应的1) Service表描述的是服务,主要保存服务行为以及服务的配置。在这里,ServiceConfig是框架内用到的配置,比如各种日志是否要记录等等。服务对应到服务的集群,集群公开一个地址,客户端访问这个地址,也就是一个负载均衡的虚拟IP地址。2) 一个Service可以有多个ServiceEndpoint,ServiceEndpoint中定义了契约的版本,类型和行为,以及涉及到地址阅读全文
posted @ 2011-04-28 12:38 lovecindywang 阅读(4240) 评论(12) 编辑
摘要: 由于希望使用Wcf作为公司内的通讯框架,因此基于Wcf进行了一些扩展,主要的目的有以下几个方面: 1) 希望减少客户端调用的复杂度,调用方式简化为WcfServiceLocator.Create<IT...阅读全文
posted @ 2011-04-25 13:59 lovecindywang 阅读(7059) 评论(23) 编辑
摘要: 对于下面几种方式,哪一种是最合适的,我期望的是这样的: 1) 在客户端,对于TCP确保使用连接池,在每一次使用连接之后归还连接等待复用。由于连接池是宝贵的资源,不可能每一次调用都去创建,而是只创建一次...阅读全文
posted @ 2011-03-17 14:33 lovecindywang 阅读(8810) 评论(23) 编辑
摘要: 从上篇的图中可以猜测到还会有Redis 2.2.1 的测试,相同的测试环境,1K的数据量,使用ServiceStack.Redis客户端进行如下测试: 1) Set操作 2) Get操作 3) Del...阅读全文
posted @ 2011-03-03 10:29 lovecindywang 阅读(32975) 评论(14) 编辑
摘要: 进行了一下Mongodb亿级数据量的性能测试,分别测试如下几个项目: (所有插入都是单线程进行,所有读取都是多线程进行) 1) 普通插入性能 (插入的数据每条大约在1KB左右) 2) 批量插入性能 (...阅读全文
posted @ 2011-03-02 22:09 lovecindywang 阅读(106670) 评论(63) 编辑
摘要: 我们知道TCP连接的代价是比较大的,因此很多时候我们都会使用长连接,对于客户端也就会使用连接池。 而各种客户端实现的方式不尽相同,API的最佳使用方式也不尽相同,如果使用不当则会发生很大的问题。 ...阅读全文
posted @ 2011-02-16 18:00 lovecindywang 阅读(2644) 评论(3) 编辑
摘要: Redis 是一个有趣的项目,与其把它说成键值存储、键值缓存还不如把它说成是一个远程的数据结构。 Redis的项目名是Remote Dictionary Server的缩写,我觉得还不如叫Remot...阅读全文
posted @ 2011-02-12 15:33 lovecindywang 阅读(7016) 评论(2) 编辑
摘要: 假设有2个机房(测试服务器2/3以及123/124)互为灾备,应用都只连接自己机房的存储服务(mongodb1.6.5和kt 0.9.28),两个机房之间的存储服务需要相互同步,尝试方案如下: 编号 ...阅读全文
posted @ 2011-01-31 12:39 lovecindywang 阅读(4204) 评论(1) 编辑
摘要: 如果我们记录用户的点击或者鼠标的移动,并且绘制成热点图,生成的结果可以帮助我们分析和改良UI。 用于分析网站UI友好性的点击热点图可以这么来做: 最简单的方式是记录页面地址,鼠标相当于页面左上角的...阅读全文
posted @ 2011-01-28 16:13 lovecindywang 阅读(2370) 评论(3) 编辑
摘要: kt和memcached性能比较 kt在不同数据量的情况下性能比较阅读全文
posted @ 2011-01-18 16:04 lovecindywang 阅读(2055) 评论(0) 编辑
摘要: Redis按照官方的定义是一个开源的,高级的键值存储。本文就想扩展开介绍,高级和存储两点。 为什么高级,咱们列一下它的基本特性: 每秒10万+的读,8万+的写(是不是有点吹?) 操作原子性(还支持把...阅读全文
posted @ 2011-01-12 15:58 lovecindywang 阅读(5188) 评论(6) 编辑
摘要: 请根据下面的表格,从纵向的列选择你熟悉的知识点(最后两行可以随意列举你感兴趣或熟悉的知识点),从横向的行选择一个知识点的方面构成一个问题。 也就是说你可以选择一个知识点回答其五个方面,也可以选择十个...阅读全文
posted @ 2010-12-28 21:32 lovecindywang 阅读(18582) 评论(41) 编辑
摘要: 一共有4台机器,各自挂接一个存储,希望实现: 尽量节约存储 高可用性 存储大量数据 配置方案: 每一台机器做一个分片的主数据库 每一台机器做一个分片的后备数据库 每一台机器做一个分片的仲裁服务 两个两...阅读全文
posted @ 2010-12-10 15:16 lovecindywang 阅读(6659) 评论(4) 编辑
摘要: 购买链接:http://www.china-pub.com/197209译者序做.NET 或是微软平台的架构设计既简单又困难。说简单的理由是,微软提供的产品往往考虑全面,容易上手,并且文档丰富。说困难的理由是,微软往往没有什么权威性的“指南”推荐说A方面可以用X 技术,B 方面可以用Y 技术(比如JAVA 开发流行的Struts2+Spring+Hibernate 框架),...阅读全文
posted @ 2010-12-03 15:09 lovecindywang 阅读(1926) 评论(8) 编辑
摘要: 测试代码点击这里下载,通过此代码也剖析了MVC2的扩展点和扩展方式。   MVC执行流程如下: ----------------开始执行TestMvcApplication 类的 App...阅读全文
posted @ 2010-12-02 17:51 lovecindywang 阅读(3537) 评论(5) 编辑
摘要: 虽然linq2sql 不是什么新技术,但是这个ppt附带的例子我花了2周时间来准备覆盖了linq2sql使用/特性的方方面面,可以算是一个例子大全,提供给大家作为学习的材料Training ii:linq2sql View more presentations from powerzhuye.http://files.cnblogs.com/lovecindywang/TrainingII%ef%...阅读全文
posted @ 2010-11-26 14:09 lovecindywang 阅读(4058) 评论(4) 编辑
摘要:   上次我发了一个帖子,讨论了几种前端的实现方式,在此文中想针对模板方式进行一些补充。   其实说白了,这么多方式可以分为两类,一种是HTML在客户端组装,一种是HTML在服...阅读全文
posted @ 2010-10-26 17:26 lovecindywang 阅读(2718) 评论(11) 编辑
摘要: 今天接到一个临时任务,排查一个网站的诡异问题,是这样的,这个网站访问量很大,上了一个模块,在页面服务端发出一个http请求,读取另一个java网站提供的数据,上线之后发现一旦存在并发,或是比较多的访问,http请求就会失败,甚至在服务器上不能打开任何页面,但是服务器可以被ping通,也可以ping通其它网址(我没有看到真实的情况,只是听说有这样一个情况)。   对于一个高并发网站的服...阅读全文
posted @ 2010-10-21 22:19 lovecindywang 阅读(3385) 评论(13) 编辑
摘要: 对于前端页面和后端代码的分离,ASP.NET WEBFORM和ASP.NET MVC都在不同方面做了努力。在这里提出一些自己初步的设想,只是初步的设想,对各种质量特性并没有经过验证,就不放首页了。我们的目的是:1)产品或美工负责页面布局、样式以及基本的交互行为(不依赖业务逻辑的交互)。2)开发人员只负责数据的填充。3)产品提供的html不需要引入代码进行二次包装,直接使用。您可以觉得这就是模板的方...阅读全文
posted @ 2010-09-30 14:13 lovecindywang 阅读(942) 评论(1) 编辑
摘要: Training i:.net 3.5 & c# 3.0 & linq View more presentations from powerzhuye.代码下载地址:http://files.cnblogs.com/lovecindywang/TrainingI..rar(这些代码我花了两个星期编写,你可以研读也可以作为写LINQ时的参考,基本覆盖了LINQ TO OBJECTS、...阅读全文
posted @ 2010-09-11 11:23 lovecindywang 阅读(1705) 评论(7) 编辑
摘要: demo地址:ServerAutoUpdate.rar测试步骤:1) 安装ServerAutoUpdate.Server这个Windows服务,修改配置文件中Web服务地址为ServerAutoUpdate.SelfUpdateWinSerive.MgrSite2) 打开ServerAutoUpdate.SelfUpdateWinSerive.MgrSite,选择一个服务,能看到已经有一个实例注册...阅读全文
posted @ 2010-08-24 16:07 lovecindywang 阅读(762) 评论(1) 编辑
摘要: http://files.cnblogs.com/lovecindywang/%e6%b5%85%e8%b0%88%e7%bd%91%e7%ab%99%e6%9e%b6%e6%9e%84%e4%b8%ad%e7%bc%93%e5%ad%98%e7%9a%84%e5%ba%94%e7%94%a8.rar包含:PPT缓存示例(取模算法/一致性哈希算法/缓存模式/memcache演示以及客户端/appa...阅读全文
posted @ 2010-07-19 12:48 lovecindywang 阅读(2173) 评论(6) 编辑
摘要: 最新版本改进了以下几点: ResourceMerge.rar   1) 增加了PreOptTool在上线之前进行脚本样式压缩,并且增加头尾标识/*begin*/和/*end*/ 2) 增加头尾标识的目的是因为发现如果引用的资源是网络资源(比如从CDN获取)的话在网络不稳定的时候会出现文件下载不完整,通过头尾标识可以判断文件是否完整,不完整重试2次,配置文件配置: <!--...阅读全文
posted @ 2010-07-01 09:42 lovecindywang 阅读(915) 评论(0) 编辑
摘要: 发现有一个服务占用大量的内存 奇怪的是服务一开始的时候只占用100M左右内存,随着时间推移越来越大,最后导致服务器内存吃紧。这可以算是一种内存泄漏的问题,之所以标题不说是内存泄漏,最后就会知道,并不是因为什么东西没回收导致内存泄漏。于是dump了一下进程,使用windbg打开后先看看托管堆情况:0:000> !eeheap -gc Number of GC Heaps: 1 generati...阅读全文
posted @ 2010-06-18 13:50 lovecindywang 阅读(6514) 评论(22) 编辑
共3页: 上一页 1 2 3 下一页