10 2011 档案

摘要:Adhesive框架中的WCF分布式服务模块基于原来写的WCF扩展修改而来,主要的修改如下: 1)原先使用数据库的元数据配置,现在统一改为配置服务,主要是为了统一,不用再去开发一个WCF的配置后台 2)原先直接存储到Mongodb中的各种日志,现在统一使用Monodb数据服务,也是进行了一个统一 3)和信息中心模块中的网站请求状态(统计每一个请求的情况)一样,这里也提供了WCF客户端和服务端... 阅读全文
posted @ 2011-10-30 12:48 lovecindywang 阅读(1667) 评论(1) 推荐(1) 编辑
摘要:Adhesive框架中是分布式组件客户端首先实现的是基于Json序列化+二进制协议的Memcached客户端。在本文中会介绍其中的实现细节。 我们先来看一下项目结构: 从这个结构大致可以看出: 1)Memcached只是其中的一个具体实现,这个组件期望提供一个ClientSocket-ClientNode-ClientCluster的基础实现,以后可以有各种客户端基于这种结构来实现 2... 阅读全文
posted @ 2011-10-29 12:38 lovecindywang 阅读(1020) 评论(2) 推荐(0) 编辑
摘要:如果我们新建了一个Adhesive.Test.WebApp的网站应用程序,希望对其中的异常进行监控报警,那么我们可以直接通过配置服务后台配置报警模块实现。很明显,这是一个对数据量的监控,在异常记录达到一定数据量之后进行报警:点击增加按钮,取名为“测试应用程序的异常监控”,这里看到的是添加后的结果:然后对数据进行修改:这里我们监控的数据库为Aic__Exception(应用程序信息中心模块的已处理异常),可以查看元数据知道:然后由于我们按照应用程序名分表,因此这里表名需要修改为Adhesive.Test.WebApp:然后我们这里配置了,1分钟内数据量超过100则报警,10秒检查一次。这里时间跨 阅读全文
posted @ 2011-10-28 16:49 lovecindywang 阅读(999) 评论(1) 推荐(0) 编辑
摘要:在此文中,我们会实践一下,如何使用Mongodb数据服务存储新的自定义数据。之前我们说过了,使用Mongodb数据服务只有4步这么简单: 1)定义实体 2)定义元数据 3)配置Mongodb数据服务 4)调用API插入数据 在这里,我们希望使用Mongodb存放书籍借阅的信息: public enum Status { 借出 = 1, 归还 = ... 阅读全文
posted @ 2011-10-28 15:56 lovecindywang 阅读(1882) 评论(2) 推荐(2) 编辑
摘要:Adhesive框架的Mongodb数据服务模块提供了大量数据的存储功能。在有的时候,我们希望对数据量或是数据的某个值进行一个监控,并且在达到某个阀值之后进行报警。此时,可以使用报警服务模块进行邮件报警和短信报警。报警服务的实现其实很简单,定期检测数据量或数据的值,然后根据配置决定是否要报警,如果要的话,根据配置获取报警的接收者,然后进行相应的报警。现在先来看一下报警服务的配置,同样,打开配置后台可以在全局配置中找到报警服务的配置节点:点击进去:在这里依次介绍一下每一个配置:1、状态数据的报警配置:这里配置了基于状态数据的报警配置。所谓状态信息,就是始终只有一条最新的数据代表了一个状态,报警也 阅读全文
posted @ 2011-10-20 14:09 lovecindywang 阅读(1676) 评论(0) 推荐(0) 编辑
摘要:Memcached是一个很常见的分布式组件,现在有很多.NET下开源的Memcached组件的客户端实现,比如EnyimMemcachedClient。在Adhesive框架中实现了一个分布式组件客户端,同时也实现了第一个具体的客户端,也就是Memcached。与其它实现不同的是,这里我们提供了Memcached二进制协议的完整实现,并且也实现了一些特色功能,进一步封装了Memcached的一些基础API。要使用Adhesive.DistributedComponentClient,首先免不了进行配置。和框架的其它模块一样,这里我们也使用了配置服务:进一步查看:在这里我们定义了一个TestMe 阅读全文
posted @ 2011-10-18 17:51 lovecindywang 阅读(1901) 评论(0) 推荐(1) 编辑
摘要:之前我们提到过,Mongodb数据服务的客户端和服务端都使用了内存队列服务模块来提交数据,使用内存队列服务有下列好处:1、操作异步化:比如客户端对数据进行转换再调用Wcf把数据提交到服务端的时间需要10毫秒,那么,使用了队列服务之后,客户端向队列插入数据的方法只需要1毫秒调用即可完成,之后的9毫秒只会发生在后台。2、降低瞬时的流量:比如在某个时刻有特别多的数据需要提交,那么这种不均匀的提交对服务端或者对数据库来说是一个瞬时的压力,使用了队列服务之后,队列服务会按照指定的间隔提交,并不会产生瞬时的压力,未提交的数据会保存在内存中。当然,在这里我们实现的是内存队列服务,因为不适合保存不允许丢失的数 阅读全文
posted @ 2011-10-14 10:14 lovecindywang 阅读(1945) 评论(4) 推荐(3) 编辑
摘要:Mongodb数据服务可以直接接受任何类型数据,并且它设计为可以承受大量数据的写入。为了能保存任何类型的数据,并且在后台可以查看任何类型的数据,因此我们必须在收到数据的时候对数据的元数据进行提取,随同主体数据一并保存在数据库中。对数据本身也需要重新组织结构,相当于进行一次序列化,然后保存到数据库中。虽然Mongodb是支持Json格式的,但是由于我们在保存数据的时候还有很多逻辑,因此我们必须手动进行这个工作。其实对于提交数据来说,应该是一个非常快的动作,应该以异步方式进行,在一个尽量短的时间内让方法的调用可以返回,之后可以在后台慢慢进行数据的转换和数据发送到远端。因此,开发了一个内存队列服务模 阅读全文
posted @ 2011-10-13 15:25 lovecindywang 阅读(2024) 评论(1) 推荐(7) 编辑
摘要:在前一篇中,我们介绍的主要是站在开发人员的角度如何使用Mongodb数据服务来保存数据,这一篇会介绍在保存数据之后,如何去查看数据,也就是怎么样去使用Mongodb数据服务的通用后台。Mongodb数据服务的后台是采用Silverlight4制作的。进入后台,第一件事情是登录系统:这个配置是通过配置服务进行的,来看一下Mongodb数据服务的配置部分中的管理员配置(至于其它配置会在实现篇中介绍,因为其中涉及到了Mongodb数据服务的实现细节):在这里我们定义了三个用户,进入aa这个用户看一下:这里除了定义登录用户名、密码之外还定义了管理的数据库:在这里,通过我们限制aa这个用户只能对以Aic 阅读全文
posted @ 2011-10-12 15:07 lovecindywang 阅读(1589) 评论(1) 推荐(2) 编辑
摘要:之前介绍的应用程序信息中心模块中所有日志、异常、性能和状态数据都依赖Mongodb数据服务,Mongodb数据服务的接口也简单的可以: public interface IMongodbInsertService : IDisposable { void Insert(object item); }总之一点,不管什么数据,提交进来即可!在提交之前所要做的只是设计... 阅读全文
posted @ 2011-10-12 09:30 lovecindywang 阅读(2062) 评论(3) 推荐(3) 编辑
摘要:应用程序信息中心模块项目的源代码结构如下:在这里可以看到:1、接口项目主要都是服务的接口定义、基于接口的扩展方法以及接口中需要用到的一些实体的定义。2、实现项目主要由几部分构成:1)模块的配置2)异常服务3)自动附加信息的各种提供程序4)日志服务5)性能服务6)状态服务有关配置部分,没什么可以介绍的,全部依赖于配置服务,直接传递一个自定义类对象作为默认的配置,配置服务会初始化所有的配置节点和默认值: var config = configService.GetConfigItemValue(false, "AppInfoCenterConfiguration", defa. 阅读全文
posted @ 2011-10-11 15:02 lovecindywang 阅读(1798) 评论(1) 推荐(2) 编辑
摘要:应用程序信息中心 Application Infomcation Center 简称AIC其实是一套已经实现的程序,集应用程序数据收集、数据存储以及后台查询、报警为一体。主要的作用是实现网站特殊信息(比如未处理异常)的监控和报警。在Adhesive中进行了重写和升华,把功能分为日志、异常、性能和状态几个部分: public class AppInfoCenterService { ... 阅读全文
posted @ 2011-10-10 17:46 lovecindywang 阅读(1896) 评论(0) 推荐(1) 编辑
摘要:公共模块是所有框架内部组件依赖的项目,其中包括一些基础实现和小工具。首先是一个Bootstrapper的理念:1、在需要的时候,我们可以把实现和接口进行分离,实现使用依赖注入(不一定要项目引用,只需要文件夹下有实现的DLL)。那么,我们就需要在网站应用程序或是其它应用程序启动的时候,把这些实现注入进来。这里需要提一点的是,正因为我们把实现和接口进行分离,使得我们可以让两个组件进行相互的引用,比如配置服务的实现可以调用信息中心的接口来记录日志,而信息中心的实现可以调用配置服务的接口来存储配置。2、然后,我们需要针对每一个组件进行一些初始化工作,比如进行数据初始化,这步工作需要在1之后。当然,还可 阅读全文
posted @ 2011-10-10 15:38 lovecindywang 阅读(1938) 评论(2) 推荐(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 阅读(4345) 评论(23) 推荐(6) 编辑
摘要:(一)总体介绍 (二)公共模块实现 (三)配置服务模块使用 (四)配置服务模块实现 (五)信息中心模块使用 (六)信息中心模块实现 (七)Mongodb数据服务模块使用 (八)Mongo... 阅读全文
posted @ 2011-10-09 16:48 lovecindywang 阅读(3309) 评论(3) 推荐(6) 编辑