大型网站架构演变

news/2024/5/20 11:32:10/文章来源:https://blog.csdn.net/weixin_34209406/article/details/86339147
初级篇:(单机模式)

假设配置:(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 的数值上,然后把这一连串数字对应映射到一个想象的圆上。<img src="https://pic2.zhimg.com/c3cd8e6cf787c82d6f7e011e882ce27d_b.jpg" data-rawwidth="95" data-rawheight="108" class="content_image" width="95">
把要存储的各个值hash后,放到圆上,如图
<img src="https://pic2.zhimg.com/77a5474913b2017a9c64e877940ca625_b.jpg" data-rawwidth="238" data-rawheight="257" class="content_image" width="238">
然后把cache节点也用同样的hash方法,映射到圆上,然后每个刚才hash过的value顺时针寻找离自己最近的节点,这个节点就是存储它的节点。
<img src="https://pic2.zhimg.com/cf3a58c791488b89d6bda4f6c8c43d55_b.jpg" data-rawwidth="287" data-rawheight="257" class="content_image" width="287">
为了提高存储的平衡性,算法还可以加入虚拟节点的概念,即每个实际cache节点,会在圆上对应N个虚拟的节点,这样可以提高算法的命中率,更加平衡。

consistent hashing原理:Consistent hashing and random trees

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_754192.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在线流程图与图表制作网站

现在很多功能网站,最常见的就是图片处理类,不如切图,图片转换,添加效果等。本文收集了国外最常用的流程图与图表制作网站,这些网站功能强大,如果你正好需要制作图表或流程图,而对于软件又不熟悉…

linux条件编译预编译,C语言条件编译_Linux编程_Linux公社-Linux系统门户网站

C语言中的预编译包含三种:1.宏定义2.文件包含3.条件编译,条件编译指的是满足一定条件下才进行编译,它有几种形式:(1)#ifdef标识符//程序#else//程序#endif它的意义为如果定义了标识符,则执行程序段1,否则执…

inputstream怎么写给前端_写给大家看的网站制作教程01了解网站制作流程

作者 | 杨小二来源 | web前端开发(ID:webqdkf)前言这些年里,被读者和周围朋友以及一些认识的人,问的最多的问题,就是,怎么做一个自己的网站?这个难不难学呀?其实,我知道,…

Web层框架对网站中所有异常的统一处理

一个网站的异常信息作为专业的人士,是不会轻易暴露给用户的,因为那样狠不安全,显得你漏是一回事,只要还是考虑到网站的数据安全问题,下面给大家分享一下一些常见的web层框架是如何处理统一的异常。 之前都是在Struts2…

修改网站自动关闭时间timeout_centos7修改网卡名称为ethX

测试平台VMWARE WORKSTATION 15 虚拟机系统Centos7centos7网卡的随机名给自动化运维带来混乱,那么我们把网卡名重新配置为ethX一、在安装系统的时候配置:修改内核选项:net.ifnames0 biosdevname0二、已安装系统修改方法像我的虚拟机&#xff…

旧版ios软件网站_ios旧版软件抓包

大家好,这里是小虾虾科技屋——————————————————————有时候,某个软件随着更新,会带走许多历史的痕迹,于是有的人就想尝试复原那些软件,所以产生了今天为大家分享的工具。iTunes旧版软件抓包神器&a…

seo按天扣费系统源码_企业SEO外包,这样选靠谱!

原标题:企业SEO外包,这样选靠谱!一般在选择企业SEO外包的时候,需要注意什么点?一、清晰企业网站SEO优化定位清晰企业网站SEO优化定位对于企业的的目标定位,大家说法不一,但是总体上作为企业的负责任你需要…

突发!32TB Windows 10核心数据泄漏,被人上传至第三方公开网站

本文讲的是突发!32TB Windows 10核心数据泄漏,被人上传至第三方公开网站,据外媒The Register报道,微软Windows操作系统内部大量组件和核心代码泄漏,正在网络上传播。 这些泄漏的数据多达32TB,包括微软未公开…

Python Django搭建网站流程图解

更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/人人影视http://www.sfkyty.com/1. 创建Django REST framework工程 1.1手动创建工程文件夹 1.2进去工程文件夹内,执行命令&#xff1…

前台页面当前时间_wordpress网站开发中,怎样不同页面调用不同的标题?2招帮你搞定...

一个wordpress网站,它的前台页面是千变万化的,不同的页面肯定有不同的内容和标题。如果一个wordpress网站,所有的页面都是同一个标题,那对于搜索引擎来说,是非常不友好的。那么,在wordpress网站主题模板开发…

xml能存图片吗_robots文件只能放在网站根目录吗?

要使得网站能被百度收录特定页面,robots文件发挥着重要作用,甚至一定层面上影响着网站优化和SEO策略。那么robots文件是不是一定要放在网站的根目录下面呢?【Robots文件的作用】一般搜索引擎蜘蛛会优先访问网站内部的robots文件,根…

Windows 服务器配置、运行、图文流程(新手必备!) - IIS建站配置一条龙

Window 2008 服务器的配置教程本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar —— 心分享、心创新!助力快…

百度搜索结果 转换_百度继续调整搜索结果页面 恢复原本被隐藏的网站地址

来源:蓝点网网址是用户分辨是否是百家号内容的关键参考因素,因此百度这次调整也继续被用户炮轰认为百度居心不良。现在百度再次调整搜索结果页将网站的网址恢复显示,如果本身已关联百度百家或者熊账号则显示媒体名称。部分关键词搜索结果如下…

简单的物流管理网站制作源码_这个网站可以免费DIY专属的圣诞老人问候视频,效果不错制作简单!...

圣诞节快到了,过节气氛越来越浓。。。圣诞节是孩子们最喜爱的节日之一,除了收到圣诞老人送的礼物,如果还能收到来自圣诞老人的专属祝福视频也会是一件能让孩子们非常开心的事情!今天给大家推荐的这个网站,可以在家免费…

e3d教程做logo教程_企业官网网站SEO优化怎么做-技巧教程

企业网站推广是中小企业都面临的难题。百度竞价成本太大,做SEO优化又难上排名。企业网站SEO优化教程,搜索引擎优化核心在于目标关键词,目标关键词站外因素是外链即锚文本建设,SEO优化关键词排名的着陆页通常是网站首页。利用首页做…

c++builder 运行网站的api_TensorFlow2.x目标检测API安装配置步骤详细教程

TensorFlow Object Detection API支持TensorFlow2.x版本已经有一段时间了,这里对安装配置步骤做详细说明。安装步骤也可以参考如下两个链接:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf2.mdhttps://tensorflo…

网站服务器对接要多长时间6,【网络是怎样连接的】第6章 - 请求到达web服务器,响应返回浏览器(2)...

6.2 服务器的接收操作图6.7 服务器的工作过程.png网卡将接收到的信号转换成数字信息到达服务器的网络包其本质是电信号或者光信号,接收信号的过程和客户端是一样的。接收操作的第一步是网卡接收到信号,然后将其还原成数字信息。局域网中传输的网络包信号…

网站根目录打不开服务器拒绝,网站打不开怎么办,自查方法

网站打不开原因很多,首先检查下域名解析是否有问题,在去检查空间和网站程序,先不要急,有些可以自已检查的方法,作为一个站长,需要具备些基本的网站管理知识。一、检查域名解析是否有问题利用第三方的工具查…

html网站运行时间,JavaScript实现网站运行时间

友情提示:此篇文章大约需要阅读 4分钟39秒,不足之处请多指教,感谢您的阅读。看到很多的博客站点上都是有网站运行时间统计的代码,之前有学过JS语言,之后上网上借鉴了一下网上大佬写的代码。就是一个简单的运行时间的减…