51CTO博客开发
在之前的文章中,提到了在Discuz!NT中进行缓存分层的概念。之前在产品中也实现了其中的构想,但该方案有一个问题,就是如果将产品进行分布式布署之后,如果某一站点发生数据变化时,只能更新本地缓存和Memcached缓存信息,而其它分布式布署的站点则无法收到缓存数据已修改的‘通知’,导致数据不同步而成为‘脏数据’。 虽然在之前的文章中提到通过将本地缓存失效时间‘缩短’(比如15秒后即失效),以便在相对较短的时间内让本地数据失效从而再次从Memcached读取最新的数据,但这必定不符合我们设计的基本思路,并且导致程序的运行效率低,同时会造成过于频繁的访问Memcached,无形中增加了与 Memcached的socket开销。所以才有了今天的这篇文章。
在前面的几篇文章中,主要谈到了在Discuz!NT中的跨站缓存数据,数据库负载均衡。但如果要实现将产品分布式布置到若干机器,组成集群来共同支撑起整个业务的话,还是有一定问题的(后面会有所介绍)。下面先介绍一下如何使用 Discuz!NT负载均衡方案搭建分布式应用。 Discuz!NT前端负载均衡是基于nginx实现的,下面是它的一些简介:
做为微软最新技术应用的DEMO。dinnernow使用了: IIS7, ASP.NET Ajax Extensions, LINQ, WCF, WF,WPF,Windows PowerShell, Card Space以及 .NET Compact Framework. 本文将会继续订餐流程,来讨论关于WF(Windows Work Flow Foundation)状态机, 在"订单"这一应用场景中的设计思路:)
做为微软最新技术应用的DEMO。dinnernow使用了: IIS7, ASP.NET Ajax Extensions, LINQ, WCF, WF,WPF,Windows PowerShell, Card Space以及 .NET Compact Framework. 本文将会继续订餐流程,来讨论关于WF(Windows Work Flow Foundation), 在"订单"这一应用场景中的设计思路:)
做为微软最新技术应用的DEMO。dinnernow使用了: IIS7, ASP.NET Ajax Extensions, LINQ, WCF, WWF,WPF,Windows PowerShell, Card Space以及 .NET Compact Framework. 本文将会继续订餐流程,来讨论关于ASP.NET Ajax Extensions在"选餐"这一应用场景中的设计思路:)
继上一篇(初尝dinnernow)之后,通过配置并驱动起了web应用。从今天起本系列文章将以一个购物流程为主线,介绍一下DinnerNow是如何使用WCF,LINQ,ASP.NET Ajax Extensions等技术来架构应用的。
作为微软最新技术应用的DEMO。dinnernow使用了: IIS7, ASP.NET Ajax Extensions, LINQ, WCF, WF, WPF,Windows PowerShell, Card Space以及 .NET Compact Framework.
在Discuz!NT的最新版本中,支持目前主流LINUX平台上的负载均衡解决方案,比如NGINX,HAPROXY,LVS等。本文与其说是解决方案,倒不如说是介绍如何搭建Discuz!NT负载均衡解决方案:) 因为我们的产品运行的主流平台是WINDOWS+IIS+SQLSERVER(2000以上版本),而LVS+KEEPALIVED是LINUX下的四层负载均衡软件。其有如下特点:LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率(在DR模式下),将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。一般来说,LVS集群采用三层结构,其主要组成部分为:
声明:本文是学习Mongodb过程中的副产品,因为接触时间并不长,难免有理解上的偏差,希望借此文与感兴趣的朋友讨论切磋,呵呵。去年年底,开始接触并学习Mapreduce模型。因为工作上的关系,最近开始研究Mongodb,其中对其新特性(2010年四月)reduce模型实现产生的兴趣,因为特别留意了一下。当然网上关于该方面的内容并不是很多,且多为EN文,所以我想有必要将学习使用过程中的一些问题作一下记录并加以整理,因为就有了此文。废话不多说了,开始正文吧!目前支持Mongodb的C#客户端应该就是Samuel Corder 开源的这个项目了,链接:http://github.com/samus/mongodb-csharp。
在目前最新版本的产品中,我们提供了缓存静态文件的解决方案,就是使用SQUID做静态前端,将论坛中的大部分静态文件布署或外链到一个新的HTTP链接上,其中可以外链的静态文件包括: 1.Discuz.web/Javascript/ 下所有以‘template_’打头的JS文件以及该文件夹下的部分js文件。 2.模版文件夹下的所有CSS或IMAGE文件(空间相册文件夹除外) 3.前台Image文件夹下的Medal(勋章),Topicidentify(主题鉴定图标)下的所有文件。
目前在网上关于TokyoCabinet(以下简称TC)和TokyoTyrant(以下简称TT)的资料已相对丰富了,但在.NET平台上的客户端软件却相对匮乏,因为做Discuz!NT企业版的关系,两个月前开始接触TC和TT,开始写相关的客户端代码。这里开放的是客户端主要功能代码,开源的目的一方面是希望更多的人来学习研究TC和TT,同时大家可以下载本C#源码继续优化提升性能,同时查找BUG,必定本人精力能力有限,而Discuz!NT企业版的功能点又太多(抽空会多写文章进行介绍)实在有些力不从心了,呵呵:) 好了,为了便于使用,下面先对源码中的项目文件进行说明:
在年前发布的基于silverlight4(beta)版的摄像头应用之后。经过最近一段时间的完善。目前已推出了beta2版,在修改了原有程序bug的基础上,做了如下变化: 1.将图片载入修改成为按原图宽高比进行缩放,所以以前可以分别沿X,Y轴变化的功能就砍掉了。 2.添加了控件样式,使显示效果更加丰富。 3.在高级模式下添加了没X,Y,Z轴设置图片翻转属性功能,这主要为了解决摄像头截图与本人面部特片呈180翻转的问题。当然,应用该功能还能制过更多有趣的头像。 4.添加加载图片提示信息。
基于Silverlight4(beta)的WebCam(摄像头)应用,支持区域缩放,剪裁,自成生成缩略图,Ink涂鸦,以及特效等,同时也可将本地图片拖拽到编辑区域进行相应操作,支持保存到本地,打印图片信息, 鼠标右键菜单等等。 开发环境:vs 2010 beta2 , silverlight 4 beta 运行配置:由于使用了上传功能,所以需要配置上传文件的读写权限,目录包括:
在开源之后,还没什么文章来说明 Discuz!NT项目的一些特点。作为这个控件库的设计者,本人将在接下来的时间里用连载的方式来向大家解释其中一些控件的设计思想,实现功能以及一些未曾使用过的功能展示(因为管理后台只使用控件的部分功能)。同时因为这组控件开发的周期很短(当时仅用一个半月,后不断增强功能),有不少思路和控件设计的规范相驳,但当时只考虑为后台程序开发和订制方便,因此就暂且开发成了这个样子,但本人日后会不断完善和规范这些代码:)
今天上班一开MSN,发现郑伟的签名变成了‘爽’很是好奇。一问之后才知道最近郑伟升职并加薪了,并且加了20%,相当于平时跳槽一次的加薪幅度了。雨辰开玩笑似的回复说:“希望你以后就用这个名字吧,将来百年之后不在了,到时就叫‘爽死了’”。
在以前的两篇文章(Discuz!NT 缓存设计简析, Discuz!NT中集成Memcached分布式缓存)中,介绍了Discuz!NT中的缓存设计思路以及如何引入Memcached,当然前者是IIS进程的缓存(本地缓存),后者是分布式内存对象缓存系统。两者通过Discuz!NT中的memcached.config文件中的ApplyMemCached结点的值来决定使用哪一种缓存方式。不过在之后,有朋友反映当使用Memcached时,特别是在大并发来时,效率会打折扣,甚至有很多时间会消耗在socket套接字(创建和传输方面)上。而事实上也的确如此,尽管Memcached在使用池化的方式初始化一定数量的套接字资源(之前测试时实始化为128个链接),在小并发(100左右)时,可能问题不大,但并发上了1000-2000时,其效率要比本地化缓存机制低1/3(loadrunner测试场景),比如loadrunner测试1000并发时,如果showtopic(显示主题),本地缓存处理时间为15秒,而使用memcached可能会达到25-35秒。
周五开会时,有人提出在团队中采用结对开发的Agile实践。当然团队里有人说,如果让新手与水平高的人结对,基本上就是知识的单向传递了,对于新手来说的确是个不错的学习机会,但对于水平高的开发者,就未必不乐意了。不过雨辰心里想,这样还有一方受益,就是公司,因为公司巴不得每个新人都能在最短的时间内变成‘高手’,这样就可以用比高手低的多的工资来获取高质量的代码。会后,雨辰在MSN上遇到了老杜,说了这样开会的事,并把自己的想法告之了老杜。 老杜在MSN上发了个笑脸,回复:“结对无外乎如下几种情况。”
自从上回老杜把TDD,DDD在中国的处境看成是‘水土不服’之后,雨辰就一直想找个机会再跟老杜‘理论’一下。后来在整理以前资料的时候找到了Ivar Jackbson(UML三友,用例的发明人)在2008中国之行时做的一次演讲时用的PPT,其中提出了一种称之为‘明智软件开发’的软件开发思路。雨辰当时看这个大约4M的ppt时的第一印象就是Ivar破天荒的提出将UP与敏捷有机结合到一起,并最终用于软件开发的过程中。让这两个阵营中的优秀思想相互补充,各自发挥所长,听起来倒是一种不错的想法。 当然IVAR也对AGILE阵营中对“架构”的偏激思想进行了反击,正如后来孟岩所总结的那样:
这几天产品终于发布了,在做完了阶段总结之后,剩下的主要工作就是解决官网上用户反馈的一些问题,因为工作量不是很大,所以雨辰能抽一些时间观注一些新技术比如 windows7下开发multi-touch应用等。不过今天早上有同事在RTX上发消息说从竞争对手那边泄露出来的源码中发现有抄袭自己产品的痕迹,很是不平。其实这种事这些年雨辰经历了一些,态度也从当初的气愤变成了现在的‘一笑了之’。 在大家私下聊天时,雨辰就半开玩笑的说:“我还担心‘竞争对手不抄’呢。” 因为抄袭别人的代码就好比吸了海洛因一样,以后他有可能收不住手了,并且自己的产品中的‘问题’有可能是从所抄的代码中‘继承’过来,这本身就是个麻烦事,如果解决不了就只能把希望寄托在对手身上了,而这无疑是‘非常危险’的。另外如果那天人家不开源了,那该怎么办,到时就好比‘断了奶的孩子’一样。同时抄袭竞争对手的代码,对开发者本身也是一种‘羞辱’,另外抄得越多,自己的自信心和自尊心受到的打击就越大。不过有些竞争对手是开头抄,后来觉得没什么意思了,就打着‘走自己的路’的旗号,按自己的理解而不是客户需求来做设计开发产品,最后把产品整得四
周三中午吃完饭,雨辰从食堂回来,发现开发小组中的一位姓黄的同事(组里管他叫老黄牛)正在看一本.net的书,因为这几年雨辰已基本上不再买技术类的书了,因为真正看的上眼、有价值、有水准的书籍前些年基本都翻遍了。雨辰带着好奇心走过去问老黄关于该书的一些情况,因为已过了对那些所谓标以‘入门’、‘精通’,‘深入浅出’,‘宝典’之类图书的‘感冒期’,所以就单刀直入,问了老黄正在看的部分。
cwRsync,软件分为服务器端/客户端,用于同步或备份文件,本文介绍如何用最简单的方式配置同步信息,并创建定时备份(截图方式)。
最近有些时间,开始接触负载均衡方面的东西,从硬件F5再到Citrix Netscalar。不过因为硬件的配置虽然不复杂,但那些不费的价格也让一般用户望而却步(十几万到几十万),所以只能转向nginx,squid这类有反向代理功能的软件了。好在其设置都不是很麻烦。
郑伟听雨辰话题一转,便正色道:“你说是silverlight3.0吧,我其本上通过SDK了解的差不多了,眼下我主要的兴趣还是在其视频的支持上,按其官方提供的技术文档说是新增了H.264,AAC,MP4格式支持。你呢?” 雨辰笑着说:“还是在其复杂数据展示上面,我想富媒体展示和交互是其主要方向,必定其对手是FLASH,换句话,FLASH中的优势应该被silverlight所吸取并完善。另外我们的产品中也使用了SL进行开发了。”
在之前的两篇文章中,基本上介绍了如何录制脚本和生成并发用户,同时还对测试报告中的几个图表做了简单的说明。今天这篇文章做为这个系列的最后一篇,将会介绍如何通过测试报告来查看系统的运行情况,找出影响性能的因素,以及如何去进行优化。首先,看一下这张并发用户的图:
在上文中,介绍了如果录制脚本和设置脚本执行次数。如果经过调试脚本能够正常工作的话,就可以设置并发用户数并进行压力测试了。 首先我们通过脚本编辑界面上的“工具”菜单项,选择该菜单的第二项“Create Controller Scenario(创建控制场景)”,这时,lr会弹出一个窗口,我们只要在select scenario type项中的number of vusers设置成1000,这样我们就可以用1000并发用户来测试我们上文中所执行的操作了,如下图:
DiscuzNT3正式版发布已经有一段时间了,最近半年多来很少再写关于这个产品的技术文章了,一是时间,二是精力有限。不过在正式版发表之后,倒是有了些功夫,同时我们的一个商业客户在从2.6版本升级到3.0正式版之后,出了一个小插曲,导致不得不退回到2.6版本。因为这个客户的论坛访问量和发帖量比较大,平时在线人数5000,日发帖量在2-3万左右。所以出了一些性能上的问题,在大并发情况下,服务器响应超时,且在峰值时越发不稳定。之前我在公司内部用了tinyget做了一些简单的压力测试,发现了一些问题,但原因尚不明显,所以在公司会议上就有人提出使用loadruner来做一下压力测试,看看3.0产品的性能倒底如何,是什么造成用户的服务器不稳定。所以就有了今天的这篇文章。
在写本文之前,本人一直抱着‘不宜’在asp.net MVC框架下搞什么控件开发的想法,因为一提到控件就会让人想起‘事件’,‘VIEWSTATE’等一些问题,而asp.net MVC下是Controller, Action, Viewpage, Filter等特性的‘天下’。所以总感觉‘驴唇对不上马嘴’。但直到前阵子在邮箱中收到了关于telerik关于MVC框架扩展的一些信息之后,才发现这家商业控件公司也开始打MVC的主意了。而这个项目(开源)就是该公司在理解了asp.net mvc的基础上所做的一些尝试,当然其所实现的所谓控件与之前我们在项目中所开发或使用的web服务器控件有很大的不同,可以说是抛弃了以往的设计方式。尽管目前它的这种做法我心里还打着问号,但必定是一种尝试(不管你赞同还是不赞同)。下面就做一个简单的分析,希望能给研究MVC架构的朋友提供一些的思考。
周末,郑伟约雨辰出来吃饭,正在最近雨辰吃得比较素,正好就着这次机会改善一下生活。两人周六晚上到了王利餐馆,要了几个晕菜,开了两瓶啤酒,有说有笑的边吃边聊了机来。两人从大学开始,一直聊到毕业之后找工作,又聊到眼下的国内经济形势,聊着聊着就扯到了雨辰昨晚在天涯社区上看到的一篇文章。浅析人们“ 为什么要装B”以及“怎样装B”,文中对人们装B的心态和原因做了一定程度的分析,虽然有些YY的嫌疑,但还是挺有意思的。
周一中午吃过午饭,雨辰发现老杜MSN正在线上,就打了个招呼,老杜也挺闲,哥俩儿就聊了起来。侃了一会,就把话题转到了一则之前的新闻上:富士康员工因丢失iPhone被调查跳楼自杀<br/> 雨辰是前些时候在CSDN上看到这则新闻的,一开始还真是挺气愤,主要是公司怎么能把员工逼到这个份上。雨辰想听听老杜对这个事的看法,就把新闻链接发了过去,不一会儿,老杜在那头回复说:“MD,以前都是卸磨杀驴,现在倒成了‘驴的自杀’,可叹呀!”
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号