服务器配置初级与进阶

初级篇:(单机模式)

假设配置:(Dual core 2.0GHz,4GB ram,SSD)

基础框架:apache(PHP)
+ Mysql / IIS + MSSQL

(最基础框架,处理一般访问请求)

进阶1:替换Apache为Nginx,并在数据库前加上cache层【数据库的速度是最大的瓶颈】

Nginx(PHP) + Memcache + Mysql

(此时已经具备处理小型访问量的能力)

进阶2:随着访问量的上涨,最先面临的问题就来了:CGI无法匹配上Nginx的高IO性能,这时候可以通过写扩展来替代脚本程序来提升性能,C扩展是个好办法,但是大家更喜欢用简单的脚本语言完成任务,Taobao团队开源了一个Nginx_lua模块,可以用lua写Nginx扩展,这时候可处理的并发已经超越进阶1
一个档次了。

Nginx(nginx_lua or C) + Memcache + Mysql

(此时处理个同时在线三四千人没有问题了)

进阶3:随着用户的增多,Mysql的写入速度成了又一大瓶颈,读取有memcache做缓存,但写入是直接面对Mysql,性能受到了很大阻碍,这时候,要在Nginx和Mysql中间加入一层写缓存,队列系统就出场了,就以RabbitMQ为例,所有写入操作全部丢到这只兔子的胃里面,然后屁股后面写个接应程序,一条条的拉出来再写入mysql。而RabbitMQ的写入效率是Mysql的N倍,此时架构的处理能力又上一阶层。

|----write------>RabbitMQ--------

Nginx(lua or c)----- |--------->Mysql

|----read------>Memcache--------

(此时的并发吞吐能力已经可以处理万人左右在线)

中级篇:(分而治之)

此时我们在单机优化上已经算是达到极限,接下来就要集群来显示作用了。

数据库篇: 数据库总是在整个环节中是吞吐能力最弱的,最常见的方法就是sharding。

sharding可以按多种方法来分,没有定式,看情况。可以按用户ID区段分,按读写分等等,可用参考软件:mysql proxy(工作原理类似lvs)

缓存篇:memcache一般采用的是构建memcache
pool,将缓存分散到多台memcache节点上,如何将缓存数据均匀分散在各节点,一般采用将各节点顺序编号,然后hash取余对应到各个节点上去。这样可以做到比较均匀的分散,但是有一个致命点就是,如果节点数增加或减少,将会带来几乎80%的数据迁移,解决方案我们在高级篇再提。

WEB服务器篇: web服务器集群的建设,最常见的就是lvs方式(memcache
pool同样可以如此组建),lvs的核心就是调度节点,调度节点负责将流量通过算法分散到各个节点上,因调度所耗资源很少,所以可以产生很高的吞吐率,后台节点数量可以任意增删,但此法弊病就是如果调度节点挂了,则整个集群都挂了,解决方案我们在高级篇提。

方法2:参见 HAProxy
- The Reliable, High Performance TCP/HTTP Load Balancer

高级篇:(高可用性+高可扩展性的集群)

单点调度故障解决:

集群的好处显而易见,但是有一个弊端就是单节点进行调度,如果节点出现故障,则整个集群全部都无法服务,对此的解决方案,我们使用keepalived来解决。Keepalived
for Linux

keepalived是基于VRRP协议(VRRP协议介绍)的,请一定先了解VRRP协议后再进行配置。

keepalived可以把多台设备虚拟出一个IP,并自动在故障节点与备用节点之间实现failover切换。这样我们配置两台货多台lvs调度节点,然后配置好keepalived就可以做到lvs调度节点出现故障后,自动切换到备用调度节点。(同样适用于mysql)

memcache集群扩展解决:

memcache因为我们一般采用的都是hash后除以节点数取余,然后分配到对应节点上,如果节点数出现变化,以前的缓存数据将基本都不能命中。

解决方法:consistent hashing 简介:一致性哈希

consistent hashing大概的思路就是,把hash后的值保证在 0 ~ (2^32)-1 的数值上,然后把这一连串数字对应映射到一个想象的圆上。

把要存储的各个值hash后,放到圆上,如图

然后把cache节点也用同样的hash方法,映射到圆上,然后每个刚才hash过的value顺时针寻找离自己最近的节点,这个节点就是存储它的节点。

为了提高存储的平衡性,算法还可以加入虚拟节点的概念,即每个实际cache节点,会在圆上对应N个虚拟的节点,这样可以提高算法的命中率,更加平衡。

consistent hashing原理:Consistent
hashing and random trees

完结。

时间: 2024-10-31 00:44:28

服务器配置初级与进阶的相关文章

初级PHP工程师对于进阶的思考

突然想写篇博客记录下刚毕业这段时间的经历,主要是对于人生的下一阶段的思考和诸多事物触起的思考. 一.人生的下一阶段 人生的意义从来不是为自己奋斗,生活的意义也从来不是奋斗.今年毕业,距离博文发表的现在约莫有2个月,毕业前的我是一个极度执着追求计算机科学的青年,现在想来,大学的自己就是不断地在思考,大一的时候可能思考的是未来要从事什么,大二的时候可能思考的是计算机科学到底是什么,大三,大四基本在想这个行业到底是什么样的,需要什么样的人才等等.大学的我会因为一天没有把今天的“目标”完成,就会为自己感

程序员必读书籍及导读指南

最近在网上看了一个非常好的帖子<程序员一生必读的书>(我的腾讯微博上有分享该贴子链接,有兴趣就点击进去看看吧),该贴的第一个张图片是一个雷达图, 这张图是由ThoughtWorks(全球软件设计与定制领域的领袖级企业)的资深人士提供的,它将程序员要读的书分为四个类别,每个类别又分为初级.进阶和高级读物,并用黄色三角形点出了强烈推荐阅读的书籍.四个类别包括: 编程实践(Coding Practice) 设计与架构(Design & Architecture) 方法学(Methodolog

王俊凯等明星加持直播平台,啥样姿势才能有大未来

明星是一种IP,但就如电影一样,众多明星加盟,也可以是部烂片,关键还看"导演"如何运作这些IP. 文/张书乐 9月21日是国民弟弟王俊凯的生日,这一天的社交网络,从微博到直播,都在被他刷屏.一清早,李小璐.钟镇涛等明星发微博为他庆生,而整个一天,各种"包飞机飞长沙"."租黄金路段大屏打广告"之类的粉丝花样庆生消息,更把王俊凯当天下午2时20分在一直播上的生日会直播,刷的人气爆棚. 王俊凯只是涌入明星直播浪潮中的一员,而此番明星们以人肉IP.自带粉

纯JavaScript实现异步Ajax的基本原理

Ajax实际就是XMLHttpRequest对象和DOM.(X)HTML和CSS的简称,用于概括异步加载页面内容的技术. Ajax实例 HTML代码如下,包含一个h5标题和一个按钮: JS代码如下: 上述代码中核心对象是XMLHttpRequest,这正是Ajax的技术基础.所有现代浏览器均支持XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject). XMLHttpRequest 用于在后台与服务器交换数据.这意味着可以在不重新加载整个网页的情况下,对网页的某

程序员利用javascript代码开发捕鱼游戏

面试这么成功,全靠这个捕鱼游戏来完成,看的就是里面javascript代码,所以说前端最重要的还是javascript这一关,不管是现在HTML5时代还是以后如何,javascript永远不会落后,大家想把这个项目拿去自己练练手,可以在下方直接下载. 如果有正在学习前端的伙伴,不知道怎么学习,或者该学些什么才能找到工作的可以一起来我们的头条前端裙499415298,不过你是大牛还是想学习前的都可以进来,一整套前端学习路线及系统学习资料已上传到群文件! 下面直接看效果: 点击网页链接群文件获取捕鱼

从jQuery学细节

前言 最近看了两遍jQuery源码,感觉只是看懂了jQuery的小部分小部分,不过仅此,就已经对john resig佩服的五体投地咯.. 下面附上这位帅哥的靓照,记住吧,是他改变了世界. 看的大多是实现的细节.技巧,整体的架构还是没有看出来.功力不够呀,还得慢慢修炼.jQuery真的是值得去读无数次的东西,每读一次,都会有不一样的收获.以后有空就多看看吧~ 研读优秀框架的源码,是从初级jser进阶到中级jser的捷径,可以学到好多优秀代码的风格.从代码可以看出一个程序员的水平呀~ 现在把自己看出

excel VLOOKUP函数的使用方法 .

VLOOKUP函数是Excel中几个最重函数之一,为了方便大家学习,兰色幻想特针对VLOOKUP函数的使用和扩展应用,进行一次全面综合的说明.本文为入门部分 一.入门级 VLOOKUP是一个查找函数,给定一个查找的目标,它就能从指定的查找区域中查找返回想要查找到的值.它的基本语法为: VLOOKUP(查找目标,查找范围,返回值的列数,精确OR模糊查找) 下面以一个实例来介绍一下这四个参数的使用 例1:如下图所示,要求根据表二中的姓名,查找姓名所对应的年龄. 公式:B13 =VLOOKUP(A13

程序员必读书籍及导读指南(转)

原文:程序员必读书籍及导读指南 最近在网上看了一个非常好的帖子<程序员一生必读的书>(我的腾讯微博上有分享该贴子链接,有兴趣就点击进去看看吧),该贴的第一个张图片是一个雷达图, 这张图是由ThoughtWorks(全球软件设计与定制领域的领袖级企业)的资深人士提供的,它将程序员要读的书分为四个类别,每个类别又分为初级.进阶和高级读物,并用黄色三角形点出了强烈推荐阅读的书籍.四个类别包括: 编程实践(Coding Practice) 设计与架构(Design & Architecture

我所理解的Cocos2d-x

我所理解的Cocos2d-x(完全基于Cocos2d-x3.0,深度剖析计算机图形学,OpenGL ES及游戏引擎架构,全面提升游戏开发相关知识) 秦春林 著   ISBN 978-7-121-24625-8 2014年11月出版 定价:79.00元 404页 16开 内容提要 <我所理解的Cocos2d-x>针对最新的 Cocos2d-x3.x版本,介绍了Coco2d-x游戏引擎的基本架构.渲染机制,以及各个子模块的功能和原理,并结合OpenGL ES图形渲染管线,深入探讨了游戏开发中涉及的