摘要:本文是在Cat Qi的参考原帖的基础之上经本人一题一题练习后编辑而成,非原创,仅润色而已。另外,本文所列题目的解法并非只有一种,本文只是给出比较普通的一种而已,也希望各位园友能够自由发挥。 阅读全文
posted @ 2014-08-02 12:20 EdisonZhou 阅读 (14991) 评论 (19) 编辑
摘要:通过前面几篇的介绍中,我们都是在单机上使用Redis进行相关的实践操作,从本篇起,我们将初步探索一下Redis的集群,而集群中最经典的架构便是主从复制架构。那么,我们首先来了解一下神马是主从复制架构? 阅读全文
posted @ 2014-08-02 02:30 EdisonZhou 阅读 (4333) 评论 (15) 编辑
摘要:book转眼之间,《大型网站技术架构》的读书笔记到此就结束了。最近时间非常紧,因此本篇没有详细对笔记进行介绍(本篇涉及太多内容,而且都是安全相关的)。通过本书的学习,我们从高性能、高可用、伸缩性、可扩展性、安全性五个方面的架构学习了每个方面经典的技术方案,虽然以理论偏多,但还是可以从中管中窥豹,一览大型网站技术的面貌。后面,等我找完工作,拿到offer后,也许会抽出时间去实践下大型网站所使用的一些技术方案,比如使用Mono在Linux上部署ASP.Net MVC项目,借助Nginx/Jexus构建负载均衡服务器,MSSQL数据库读写分离等,到时也会抽空将所学写成一篇篇博客发到博客园,与各位园友分享。 阅读全文
posted @ 2014-07-28 23:28 EdisonZhou 阅读 (3148) 评论 (1) 编辑
摘要:在很多场景中,用户都需要和我们的网站系统进行多次的信息交互,这时就需要一种解决方案来克服无状态特性所带来的困境。还好,在巨人的肩膀上,我们已经有了很好的解决方案,那就是浏览器端的Cookie和服务器端的Session。在一般的单机开发中(这里一般是指只有一台Web服务器的情况),服务器端我们通常使用Session来存储用户登录状态(一般是一个自定义对象实例),在多数的管理信息系统开发中(毕竟内部系统用户量不多,一台Web服务器既提供Web服务又存储Session对象内存还算是够用的)这是很常见的。 阅读全文
posted @ 2014-07-25 14:04 EdisonZhou 阅读 (4575) 评论 (8) 编辑
摘要:book上篇笔记我们学习了可伸缩架构,但在实际场合中,包括许多架构师也常常混淆可伸缩和可扩展,用可扩展表示伸缩性。那么在此,跟随作者我们来理清这两个概念,避免我们以后对其傻傻分不清楚。扩展性(Extensibiltiy)指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。我们不禁想到了面向对象中一大原则:开闭原则,对扩展开放,对修改封闭。也就说,当系统新增一个功能时,不需要对现有系统的结构和代码进行修改。伸缩性(Scalability)指系统能够通过增加(或减少)自身资源规模的方式增强(或减少)自己计算事务的能力。在网站架构中,通常是指利用集群的方式增加服务器数量,从而提高系统的整体事务吞吐能力。 阅读全文
posted @ 2014-07-24 00:31 EdisonZhou 阅读 (3968) 评论 (3) 编辑
摘要:首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl、PHP为主。 仅仅memcached网站上列出的语言就有:Perl、PHP、Python、Ruby、C#、C/C++以及Lua等。那么,我们作为.Net码农,自然是使用C#。既然Memcached客户端有.Net版,那我们就去下载一个来试试。下载文件:http://pan.baidu.com/s/1w9Q8I memcached clientlib项目地址:http://sourceforge.net/projects/memcacheddotnet/ 阅读全文
posted @ 2014-07-21 01:22 EdisonZhou 阅读 (18986) 评论 (46) 编辑
摘要:Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。经过多年的发展,目前已经有很多知名的互联网应用使用到了Memcached,比如:Wikipedia、Flickr、Youtube、Wordpress等等。 阅读全文
posted @ 2014-07-20 00:06 EdisonZhou 阅读 (5711) 评论 (20) 编辑
摘要:book首先,所谓网站的伸缩性,指不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务处理能力。在整个互联网行业的发展渐进演化中,最重要的技术就是服务器集群,通过不断地向集群中添加服务器来增强整个集群的处理能力。 阅读全文
posted @ 2014-07-19 13:57 EdisonZhou 阅读 (10295) 评论 (7) 编辑
摘要:book首先,不得不说:要保证一个网站永远完全可用几乎是一件不可能完成的任务(Mission Impossible,是不是有点碟中谍的感觉)。广泛采用故障分的,它是对网站故障进行分类加权计算故障责任的方法。一般会给每个分类的故障设置一个权重(例如事故级故障权重为100,A类为20等),其计算公式为:故障分=故障时间(分钟)*故障权重。公司对技术团队的考核一般会参考故障分,例如某团队今年发生了几个事故级故障,那么其绩效考核估计受到很大影响,年终奖什么的就悲剧了。 阅读全文
posted @ 2014-07-12 02:36 EdisonZhou 阅读 (6147) 评论 (10) 编辑
摘要:在目前广泛的Web应用中,都会出现一种场景:在某一个时刻,网站会迎来一个用户请求的高峰期(比如:淘宝的双十一购物狂欢节,12306的春运抢票节等),一般的设计中,用户的请求都会被直接写入数据库或文件中,在高并发的情形下会对数据库服务器或文件服务器造成巨大的压力,同时呢,也使响应延迟加剧。这也说明了,为什么我们当时那么地抱怨和吐槽这些网站的响应速度了。 阅读全文
posted @ 2014-07-07 17:56 EdisonZhou 阅读 (33397) 评论 (28) 编辑
摘要:首先,不得不说Redis官方提供了众多的API开发包,但是目前Redis官方版本不支持.Net直接进行连接,需要使用一些第三方的开源类库。目前最流行的就是ServiceStack.Redis这个开源项目,其在GitHub上的下载地址为:https://github.com/ServiceStack/ServiceStack.Redis.进入下载页面,点击“Download Zip”按钮,即可下载该API包。解压该Zip包后,其实我们所用到的只是其中的几个DLL而已,打开build/release/MonoDevelop文件夹,看到里边还有一个zip包,这里边就是我们所需的DLL了。 阅读全文
posted @ 2014-07-04 11:19 EdisonZhou 阅读 (4488) 评论 (14) 编辑
摘要:随着应用对高性能需求的增加,NoSQL逐渐在各大名企的系统架构中生根发芽。时至今日,涌现出的NoSQL产品已经有很多种了,例如Membase、MongoDB、Apache Cassandra、CouchDB等。不过,在国内外互联网巨头例如社交巨头新浪微博、传媒巨头Viacom及图片分享领域佼佼者Pinterest等名企都不约而同地采用了Redis作为其NoSQL数据库的选择,到底Redis是何方神圣呢?能让如此多的名企为它而痴狂。 阅读全文
posted @ 2014-07-03 02:50 EdisonZhou 阅读 (10526) 评论 (27) 编辑
摘要:book反向代理服务器具有以下功能:①保护网站安全:任何来自Internet的请求都必须先经过代理服务器;②通过配置缓存功能加速Web请求:减轻真实Web服务器的负载压力;③实现负载均衡:均衡地分发请求,平衡集群中各个服务器的负载压力; 网站性能优化第一定律:优先考虑使用缓存优化性能。缓存是指将数据存储在相对较高访问速度的存储介质中(如内存),以供系统进行快速处理响应用户请求。 阅读全文
posted @ 2014-06-26 17:20 EdisonZhou 阅读 (5988) 评论 (9) 编辑
摘要:bookGzip压缩效率非常高,通常可以达到70%的压缩率,也就是说,如果你的网页有30K,压缩之后就变成了9K左右。想要启用Gzip压缩,提高浏览速度,可以浏览这篇文章:http://www.chinaz.com/web/2012/1017/278682.shtml 内容分发网络(Content Delivery Network,简称CDN)将加速内容分发至离用户最近的节点,缩短用户查看对象的延迟,提高用户访问网站的响应速度与网站的可用性,解决网络带宽小、用户访问量大、网点分布不均等问题。 阅读全文
posted @ 2014-06-24 21:20 EdisonZhou 阅读 (3386) 评论 (2) 编辑
摘要:book最常见的架构模式,将系统在横向维度上切分成几个部分,每个部分单一职责。网站一般分为三个层次:应用层、服务层和数据层。通过分层,一个庞大系统切分成不同部分,便于分工合作和维护。但是,分层架构也有一些挑战:①必须合理规划层次边界和接口;②禁止跨层次的调用及逆向调用。 阅读全文
posted @ 2014-06-16 00:56 EdisonZhou 阅读 (5315) 评论 (5) 编辑
摘要:book一、大型网站系统特点(1)高并发、大流量:PV量巨大(2)高可用:7*24小时不间断服务(3)海量数据:文件数目分分钟xxTB(4)用户分布广泛,网络情况复杂:网络运营商(5)安全环境恶劣:黑客的攻击(6)需求快速变更,发布频繁:快速适应市场,满足用户需求(7)渐进式发展:慢慢地运营出大型网站 阅读全文
posted @ 2014-06-07 01:40 EdisonZhou 阅读 (10316) 评论 (23) 编辑
摘要:book《大型网站技术架构:核心原理与案例分析》通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选型、架构设计、性能优化、Web安全、系统发布、运维监控等在内的大型网站开发全景视图。 阅读全文
posted @ 2014-06-06 23:35 EdisonZhou 阅读 (11683) 评论 (4) 编辑
摘要:dotNet一、依赖也是哲学(1)本质诠释:“不要调用我们,我们会调用你”(2)依赖和耦合:①无依赖,无耦合;②单向依赖,耦合度不高;③双向依赖,耦合度较高;(3)设计的目标:高内聚,低耦合。(4)控制反转(IoC):代码的控制器交由系统控制而不是在代码内部,消除组件或模块间的直接依赖;(5)依赖注入(DI):①接口注入;②构造器注入;③属性注入; 阅读全文
posted @ 2014-06-05 00:50 EdisonZhou 阅读 (791) 评论 (2) 编辑
摘要:dotNet(1)核心思想:一个类最好只做一件事,只有一个引起它变化的原因(2)常用模式:Facade模式、Proxy模式(3)基本方法:Extract Interface 抽取接口、Extract Class 抽取类、Extract Method 抽取方法(4)DEMO:数据库管理系统中根据不同权限进行CRUD操作(这里是使用Proxy模式重构后的代码) 阅读全文
posted @ 2014-05-26 00:04 EdisonZhou 阅读 (666) 评论 (0) 编辑
摘要:dotNet(1)出生:系统首先会在内存中分配一定的存储空间,然后初始化其附加成员,调用构造函数执行初始化,这样一个对象实体就完成了出生过程。(2)旅程:在某种程度上就是外界通过方法与对象交互,从而达到改变对象状态信息的过程。这也和人的生存之道暗合。在.NET的世界中,对象的生命周期由GC来控制:GC管理所有的托管堆对象,当内存回收执行时,GC检查托管堆中不再被使用的对象,并执行内存回收操作;不被应用程序使用的对象,指的是对象没有任何引用。 阅读全文
posted @ 2014-05-24 11:18 EdisonZhou 阅读 (1232) 评论 (1) 编辑