摘要: 最近1个月在阅读《构建高性能web站点》这本书,里面讲的每一个章节都是值得扩展开来。下面记录下几个概念性的问题一. 吞吐率:一个衡量web服务性能的指标,表征每秒处理请求的次数。该指标受到3方面的因素影响:并发用户数、总请求数、请求资源的类型。有时在请求总数一定的情况下,并发用户越多,吞吐率反而越高;另外,请求一个几kb的文件和请求一个几m的文件,最终完成处理的时间显然是不一样的。因此,吞吐率是一个比较综合的指标,并不是指并发能力。二. 用户浏览器,代理服务器,web服务器和应用程序服务器的典型关系三. 各级缓存设计客户端缓存->反向代理缓存->web服务器缓存->应用程序缓 阅读全文
posted @ 2013-03-01 22:48 visionwang 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 春节快到了,笔者在想做点什么之前,还是回顾下去年做了些什么,好歹有个交代。记录下学习的轨迹,分享给您还有未来的自己。学知识的话,以前比较喜欢上网,现在比较喜欢看书。网络文字很多比较概略,散乱。而一本好书往往倾尽一个人的相关专长上全部才能。读读书,省时省力。计算机语言C#CLR via C#深入理解C#(第2版)ruby松本行弘的程序世界web技术正则表达式必知必会.NET单元测试艺术Pro ASP.NET MVC 3 Framework构建高性能可扩展ASP.NET网站应用Rails进行敏捷Web开发集体智慧编程数据库技术MySQL性能调优与架构设计高性能Myqlmongodb权威指南编程风格 阅读全文
posted @ 2013-02-05 11:08 visionwang 阅读(221) 评论(1) 推荐(0) 编辑
摘要: 整理:jonathan1 Unix哲学基础Unix哲学起源于Ken Thompson早期关于如何设计一个服务接口简洁、小巧精干的操作系统的思考,随着Unix文化在学习如何尽可能发掘Thompson设计思想的过程中不断成长,同时一路上还从其它许多地方博采众长。Unix哲学说来不算是一种正规设计方法。它并不打算从计算机科学的理论高度来产生理论上完美的软件。那些毫无动力、松松垮垮而且薪水微薄的程序员们,能在短短期限内,如同神灵附体般造出稳定而新颖的软件——这只不过是经理人永远的梦呓罢了。Unix哲学(同其它工程领域的民间传统一样)是自下而上的,而不是自上而下的。Unix哲学注重实效,立足于丰富的经验 阅读全文
posted @ 2013-02-01 09:42 visionwang 阅读(233) 评论(0) 推荐(0) 编辑
摘要: LRU是Cache服务中最常用的淘汰算法,经典的实现为Hash+双链表,可以保证数据访问和淘汰的期望复杂度为O(1).但是该算法有两个问题:双链表指针开销大;多线程不友好,即使是读也要加锁来修改链表的指针,将最近访问的节点提到队首.Redis的这个近似LRU算法非常有启发意义。Redis最主要的做法就是:不维护双链表,只是每个Object维护一个相对的时间,淘汰时,随机取3个或者更多的,找到最老的进行淘汰.不量节省了双链表的指针开销,读时还不用加锁.虽不能保证一定淘汰最老的,但倾向于淘汰偏老的对象, 经过我们线上的实测:和标准的LRU对比,命中率的损失非常小, 效果不错。http://oldb 阅读全文
posted @ 2013-01-30 13:32 visionwang 阅读(1196) 评论(0) 推荐(0) 编辑
摘要: 在stackoverflow网站上搜索到的结果http://stackoverflow.com/questions/1563191/c-sharp-cleanest-way-to-write-retry-logic 阅读全文
posted @ 2012-12-11 16:43 visionwang 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 总的来说,MySQL Server可以看成是二层架构,第一层我们通常叫做 SQL Layer,在 MySQL 数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断,sql 解析,执行计划优化,query cache 的处理等等;第二层就是存储引擎层,我们通常叫做 StorageEngine Layer,也就是底层数据存取操作实现部分,由多种存储引擎共同组成。所以,可以用如下一张最简单的架构示意图来表示 MySQL Server的基本架构。该图载自新浪微博。实际上每一层中都含有各自的很多小模块,尤其是第一层 SQL Layer,结构相当复杂的。下面我们就分别针对 SQL Laye 阅读全文
posted @ 2012-12-04 09:22 visionwang 阅读(2980) 评论(0) 推荐(0) 编辑
摘要: 在使用MonogDB构建真实的应用程序并用于生产环境之前,应该注意一些局限,它们大多数都是由于MongoDB使用内存映射文件(memory-mapped file)而 导致的。首先,MongoDB通常应该运行于64位的机器上。32位系统只能对4 GB内存做寻址。要知道,一般半数的内存都会被操作系统和程序进程占用,就只剩2 GB内存能用来映射数据文件。因此,如果运行在32位的服务器上,还定义了适当数量的索引,那么数据文件只能被限制在1.5 GB。大多数生产环境系统的要求都高很多,因此一个64位的系统是必需的。使用虚拟内存映射的第二个后果是,数据占用的内存会自动按需分配。这样一来,想在共享环境中运 阅读全文
posted @ 2012-11-30 17:01 visionwang 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 如何设计memcache的部署结构,假设业务需要100G的容量,通过一致性Hash部署?虽然可以解决单点问题,但是如何解决Multi-Get的性 能问题,以及线性扩容的问题?通过部署多层memcache结构,即避免了单点问题,同时又减少了Multi-Get需要访问服务器的数量从而提升性能, 同时还可以解决线性扩容问题。依据先稳定后优化的理念,在架构设计层面防止单点故障的发生: 1. mc作为mysql故障时的备份,降低了故障的影响。 2. memcache层采用多套数据冗余, master/slave + L1 list cache。 3. 多机房容灾, 一个机房出现故障后流量可以快速切换到另 阅读全文
posted @ 2012-11-24 22:29 visionwang 阅读(1145) 评论(0) 推荐(1) 编辑
摘要: XML中的特殊字符 > 和 < 这类字符是XML标记字符,在XML中有特殊的含义。当在 SQL 查询(或 XPath 查询)中指定这些字符时,必须对它们进行适当的编码(也称为实体编码)。下表列出了这些特殊字符并描述了它们的含义。有关更多信息,请参见XML1.0 规范 中的XML1.0 规范。特殊字符 特殊含义 实体编码>开始标记&gt;<结束标记&lt;"引号&quot;'撇号&apos;为了不使用转义字符,保存的时候需要使用 <![CDATA[。。。。 ]]> 例如:<?xml version=&qu 阅读全文
posted @ 2012-11-21 16:17 visionwang 阅读(11602) 评论(0) 推荐(0) 编辑
摘要: hash算法实现代码如下:继承自c#的HashAlgorithm类View Code public class FNV1a : HashAlgorithm { private const uint Prime = 16777619; private const uint Offset = 2166136261; protected uint CurrentHashValue; public FNV1a() { this.HashSizeValue = 32; this.... 阅读全文
posted @ 2012-11-20 23:27 visionwang 阅读(2225) 评论(0) 推荐(0) 编辑