大型网站架构

news/2024/5/9 23:56:24/文章来源:https://blog.csdn.net/liNewman/article/details/86576770

大型网站架构

大型网站架构:

分布式(分压)和高并发(数据完整性和高可用)
还有服务器集群(负载均衡)



分布式(消息队列通讯:阿里MQ)
高并发(队列或者文件锁,数据库锁)
完整性(事务)

-------------------------------------
MYSQL大访问量:
读写分离、垂直拆分,水平拆分
---------------------------------------------
说得很好
大型网站技术架构:http://www.thinkphp.cn/code/2510.html

-----------------------------------------------------


$fp = fopen("lock.txt", "w+");
if(flock($fp,LOCK_EX | LOCK_NB)) {
//todo ....
flock($fp,LOCK_UN);
} else {
echo "系统繁忙,请稍后再试";
}
fclose($fp);
//--------------------------
//Redis Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。
$rt = sadd('product_lock_key',"1");
if($rt == false){
//加不进去说明已经有人进入下单流程
}
//---------------------------
//抢购库存
$num = 10;   //系统库存量
$user_id =  \Session::get('user_id');//当前抢购用户id
$len = \Redis::llen('order:1');  //检查库存,order:1 定义为健名
if($len >= $num)//判断队列长度
return '已经抢光了哦';
$result = \Redis::lpush('order:1',$user_id);  //把抢到的用户存入到列表中
if($result)
return '恭喜您!抢到了哦';
//if判断被绕过,导致存入队列的用户ID超出库存,要解决“超抢/超卖”的问题,核心在于保证检查库存时的操作是依次执行的,再形象的说就是把“多线程”转成“单线程”。
//即使有很多用户同时到达,也是一个个检查并给与抢购资格,一旦库存抢尽,后面的用户就无法继续了。
//准备工作,库存放入队列,只秒杀抢购开始前进行一次准备---------总结:尽量用lpop控制库存,较少if判断队列长度数量比较导致的并发。
$num=10; //库存
//检查库存,goods_store:1 定义为健名
$len = \Redis::llen('goods_store:1'); //被抢购的数量,0
$count = $num-$len; //实际库存-被抢购的库存 = 剩余可用库存,10-0
for($i=0;$i<$count;$i++)//10
\Redis::lpush('goods_store:1',1);//往goods_store列表中,未抢购之前这里应该是默认滴push10个库存数了
//echo \Redis::llen('goods_store:1');//未抢购之前这里就是10了
//循环执行抢购开始
$user_id =  \Session::get('user_id');//当前抢购用户id
$count=\Redis::lpop('goods_store:1');//lpop是移除并返回列表的第一个元素。
if(!$count)//如果没剩余库存了
return '已经抢光了哦';
$result = \Redis::lpush('order:1',$user_id);
if($result)
return '恭喜您!抢到了哦';
\DB::table('goods')->decrement('num', 1);//减少num库存字段
//尽量将数据库的交互往后推,之前先过滤掉并发

--------------------------------------------------------------

附:
大型网站技术架构,分布式集群示例!
网站都是从小网站一步一步发展为大型网站的,而这之中的挑战主要来自于庞大的用户、安全环境恶劣、高并发的访问和海量的数据,任何简单的业务处理,一旦需要处理数以 P 计的数据和面对数以亿计的用户时,问题就会变的很棘手
下面我们就来说说这个演变过程:
初始阶段
大型网站都是由小型网站演变而来的,网站架构也一样
小型网站最开始没有太多人访问,只需要一台服务器就绰绰有余,就像这样:
大型网站架构
小型网站架构
应用程序、数据库、文件等所有资源都在一台服务器上,通常使用 Linux PHP MySQL Apache 就可以完成整个项目部署,然后再买个域名,租一个廉价的服务器就可以开始我们的网站之旅了
应用服务与数据服务分离
随着业务的发展,逐渐的一台服务器已经不能满足需求,这时我们可以将 应用与数据分离
分离之后我们使用到三台服务器:应用服务器、文件服务器和数据库服务器,如下所示:
大型网站架构
应用服务与数据服务分离
对于这三台服务器要求各不相同:
应用服务器 要处理大量的业务逻辑,所以需要更好更快更强大的 CPU
数据库服务器 需要快速的进行磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存
文件服务器 需要存储用户上传的文件资源,因此需要更大的硬盘存储空间
应用与数据分离后,各个的职责变得更加专一,网站的性能得到进一步的提升,但随着用户的继续增加,我们需要对网站架构进一步优化
使用缓存改善性能
网站的访问一样遵循二八定律:80% 的业务访问集中在 20% 的数据上面
因此我们要对这一小部分的数据进行缓存来减轻数据库的访问压力,以提高整个网站的数据访问速度,改善数据库的读写性能
网站的缓存可以分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存
本地缓存 的访问速度会快一些,但是受应用服务器内存限制,缓存数据量很有限,而且会出现内存争用的情况
远程分布式缓存 可以使用集群的方式,部署大内存的服务器作为专门的缓存服务器,可以在理论上做到不受内存容量限制的缓存服务
如下所示:

大型网站架构
使用缓存后的
使用缓存后,数据访问压力得到了有效的缓解,但单一的应用服务器能够处理的请求连接数有限,在访问的高峰期,应用服务器又会成为网站性能的瓶颈
使用应用服务器集群改善网站并发处理能力
使用集群是网站解决高并发,海量数据问题的常用手段,当你纵向提升到一定程度后,那就该开始横向提升了
当一台服务器的处理能力不足时,与其换一台更强大的服务器,不如增加一台服务器去分担原有的服务器压力。对于大型网站而言,无论多么强大的服务器,都满足不了持续增长的业务需求,更高效的方式就是增加服务器来分担压力
对于网站架构而言,如果增添一台新的服务器可以改善负载压力,那么就可以使用同样的方式来应对源源不断的业务需求,从而实现系统的可伸缩性
大型网站架构

应用服务器集群
通过负载均衡调度服务器,可以将用户请求分发到应用服务器集群里的任何一台服务器上,如果有更多的用户,可以增加更多的应用服务器,使应用服务器的负载压力不再成为网站的性能问题
数据库读写分离
在使用了缓存后,大多数的操作不经过数据库访问就能完成,但仍有一部分读操作(缓存访问未命中,缓存过期)和所有的写操作需要访问数据库,在网站的用户量达到一定时,数据库的负载问题就来了
目前大多数的数据库都支持主从热备份,通过配置两台服务器的主从关系,可以将一台数据库服务器的数据更新同步到另一台,网站利用这一功能,实现数据库读写分离,从而进一步改善数据库负载压力

大型网站架构
数据库读写分离
应用服务器在写操作的时候,访问主数据库,主数据库通过主从复制机制把数据同步更新到从数据库,这样当应用服务器进行读操作的时候,就能访问从数据库获取数据
使用反向代理和 CDN 加速网站响应
CDN 和 反向代理 的基本原理都是缓存
CDN 部署在网络供应商的机房,用户在进行请求时,会从距离最近的网络供应商机房获取数据
反向代理 则部署在中心机房,当用户请求到达中心机房后,会首先访问反向代理服务器,如果反向代理服务器中缓存这用户请求的资源,就直接返回给用户
大型网站架构

CDN 和 反向代理
使用 CDN 和 反向代理 都是为了尽快返回给用户数据,一方面加快用户访问速度,另一方面也减轻了后端服务器的压力
使用分布式文件系统和分布式数据库系统
随着网站业务的继续发展,这时候就可以像分布式应用服务器一样,对数据库系统和文件系统进行分布式管理
分布式数据库 是网站数据库拆分的最后手段,一般我们可以采取业务分库,根据不同业务的数据库部署在不同的数据库服务器上
大型网站架构

文件系统和数据库系统分布式管理
使用 NoSQL 和搜索引擎
这两个方式都是依赖于互联网的技术手段,应用服务器通过一个统一的数据访问模块来访问各种数据,从而减轻应用程序有多个数据源的麻烦
大型网站架构

使用搜索引擎和nosql
业务拆分
对于大型网站,我们可以分而治之,把整个网站的业务分为不同的模块,比如大型的交易购物完整可以分为首页、店铺、订单、买家等,分别交给不同的业务团队来负责
同时我们将一个网站根据模块划分拆分成多个应用,每个应用进行单独的部署和维护,应用之间通过超链接建立关系(指向不同的应用地址),最后通过相同的数据存储系统来构成一个互相关联的完整系统
大型网站架构

业务拆分
分布式服务
随着业务拆分,整个系统越来越大,应用的整体复杂度呈指数级增加,部署维护越来越困难,并且所有的应用服务器都要与数据库服务连接, 在数万台服务器规模的情况下,这些连接的数目是服务器规模的平方,导致资源不足
这时候就要对相同的业务进行提取,独立部署,把这些可重用的业务和连接数据库等,提取出来作为公共业务服务,而应用系统只需要通过分布式服务访问公共业务服务完成业务操作
大型网站架构

分布式
到这里,基本上大多数的技术问题都能得到解决,还有一些实时同步等具体业务问题也都可以通过现有的技术解

posted @ 2018-02-01 10:01 Newman·Li 阅读(...) 评论(...) 编辑 收藏

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

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

相关文章

为什么大型网站前端使用 PHP 后台逻辑用 Java?

为什么大型网站前端使用 PHP 后台逻辑用 Java&#xff1f; https://www.zhihu.com/question/20314377 很好。 go语言 很能处理后端&#xff1f;&#xff1f;&#xff1f;cpp(C)做后端 很猛&#xff1f;&#xff1f;分享&#xff1a; 喜欢 0 赠金笔 阅读┊ 评论 ┊ 收藏┊…

前端开发SEO以及注意事项

2019独角兽企业重金招聘Python工程师标准>>> 1、网站布局要做到样式与页面分离&#xff0c;删除页面中不必要的标签和元素。 2、页面生成要尽量小&#xff0c;要压缩页面的大小&#xff0c;页面尽量使用静态或伪静态。 3、所有的CSS、JS都要使用外部调用。 4、外…

Mozilla Firefox 在用户访问被黑客攻击的网站时发出警告

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; Mozilla 正致力于 优化 Firefox Monitor 功能&#xff0c;该功能推出于 2018 年&#xff0c;目的是让用户确认他们的账户信息是否泄漏。目前&#xff0c;Mozilla 已经为 Firefox 用户做好了下一…

基于django的视频点播网站开发-step11-后台用户管理功能

用户管理功能&#xff0c;包含用户添加、列表展示、编辑、删除四大功能。下面我们一一揭晓。 用户添加 我们先实现用户添加功能&#xff0c;我们现在urls.py下添加相关的路由 path(user_add/, views.UserAddView.as_view(), nameuser_add), path(user_list/, views.UserListVie…

seo网站图片如何优化

各大搜索引擎对于图片的识别技术越来越成熟&#xff0c;但还是没有达到能100%识别图片内容的地步。网站中的图片优化急需一个完整的解决办法&#xff0c;下面我以太原雅辉装修公司网站中的近1000张图片优化经历来分享网站图片优化的实用技巧。 一、站内图片该有的属性一个都不能…

大型网站技术架构(一)大型网站架构演化

2019独角兽企业重金招聘Python工程师标准>>> 看完了有一本书&#xff0c;就应该有所收获&#xff0c;有所总结&#xff0c;最近把《大型网站技术架构》一书给看完了&#xff0c;给人的印象实在深刻&#xff0c;再加上之前也搞过书本上讲的反向代理和负载均衡以及ses…

PHP解决网站大数据大流量与高并发

为什么80%的码农都做不了架构师&#xff1f;>>> 1&#xff1a;硬件方面 普通的一个p4的服务器每天最多能支持大约10万左右的IP&#xff0c;如果访问量超过10W那么需要专用的服务器才能解决&#xff0c;如果硬件不给力 软件怎么优化都是于事无补的。主要影响服务器的…

自定义SharePoint新网站创建过程(1)

为什么要自定义一个SharePoint新网站的创建过程呢&#xff1f;作用很多。其中之一就是&#xff0c;我们创建了一个新的SharePoint应用组件&#xff0c;然后希望SharePoint管理员在创建一个SharePoint新网站的时候&#xff0c;就可以在那个新网站中使用我们开发的新应用组件。 …

Nginx代理访问网站及实现缓存

1.Nginx介绍首先介绍下NNginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器。Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的&#xff0c;第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布&#xff0c;因它…

电子商务网站SQL注入项目实战一例

故事A段&#xff1a;发现整站SQL对外输出&#xff1a; 有个朋友的网站&#xff0c;由于是外包项目&#xff0c;深圳某公司开发的&#xff0c;某天我帮他检测了一下网站相关情况。 我查看了页面源代码&#xff0c;发现了个惊人的事情&#xff0c;竟然整站打印SQL到Html里&#x…

爬取视频网站的视频

网站视频 解析视频连接 以某一个视频为例&#xff1a; 因为是视频的原因&#xff0c;视频后台服务器为了优化做了对视频这一类大文件的分片处理&#xff0c;所以下面会看到一集视频会包含很多请求链接&#xff0c;本人测试了一下&#xff0c;平均一个请求会对应一个1M的视频文…

【JSP学习笔记】4:使用Model1模式构建购物网站demo

J2EE课的上机题&#xff0c;实现一个Model1模式的购物网站的功能。 编码问题 编码问题终于找到解决方法了&#xff0c;首先保证每个页面能编码的都编成UTF-8&#xff0c;然后所有用到内置对象的地方上来先.setCharacterEncoding("UTF-8");&#xff0c;然后重要的是…

搭建网站必不可少的知识15

网站迁移 备份网站和数据库 在服务器上将网站文件拷贝到另一个文件夹 数据库部分打开phpmyadmin 进入phpboke数据库&#xff0c;点击“导出”进行“执行” 选择数据库要保存的位置&#xff0c;进行保存 网站恢复当我们更换服务商或者系统时进行了网站和数据库的备份&#xff0c…

HTTrack(网站镜像工具)

1、首先打开kali 中的这个工具 Web信息收集工具HTTrack ,会直接出现出现使用语法。 对于传统的像存在Robots.txt的网站&#xff0c;如果程序运行的时候不做限制&#xff0c;在默认的环境下程序不会把网站镜像&#xff0c;简单来说HTTPrack跟随基本的JavaScript或者APPLet、flas…

我的网站搭建: (第十天) Ueditor后台编辑器

之前说过&#xff0c;我的网站编辑器一开始是tinymce&#xff0c;然后才用的ckeditor。可是最近我发现&#xff0c;ckeditor的小图标不是很美观&#xff0c;看久了有点low的样子。我是不是应该换一个编辑器呢&#xff0c;一想到这里&#xff0c;马上打开谷歌搜索有没有更加美观…

Java Web性能测试 - 动态网站测试脚本录制

Java Web性能测试 - 动态网站测试脚本录制 本章讲解使用Badboy对网站的请求进行录制&#xff0c;录制完成的脚本文件可以直接用JMeter使用&#xff0c;免去在JMater中进行配置的时间。 使用Badboy录制基本的目的就是减少我们在使用JMeter测试WEB项目时&#xff0c;一个一个Url…

Java Web项目性能测试 - JMeter测试网站吞吐量、反应时间百分比、流量

Java Web项目性能测试 - JMeter测试网站吞吐量、反应时间百分比、流量 为了衡量、调整、完成Java Web项目的性能指标&#xff0c;满足客户、用户对性能的要求&#xff0c;保证项目上线后能正常运行&#xff0c;以及了解项目的性能指标&#xff0c;为项目性能监控做参考&#x…

Java图片水印生成器代码 - 批量给自己的网站图片加水印

Java图片水印生成器代码 - 批量给自己的网站图片加水印 最近在做一款APP&#xff0c;App中的图片是自己一个个的画出来的&#xff0c;为了保证图片不被盗用和处理&#xff0c;所以就需要加上水印防盗。这跟CSDN一样。 注意事项&#xff1a;1. 我是在window7 eclipse 下完成的…

阿里云云虚拟主机上个人网站的Https访问配置

本文基于阿里云云虚拟主机,我个人网站是基于Hexo博客系统搭建的静态网站,所以搭建Https相对方便 一、获取HTTPS安全证书 在操作之前&#xff0c;请将你的域名的隐私保护去掉&#xff0c;让证书服务商能通过域名解析查看到域名管理者的邮箱&#xff0c;否则验证证书时会无法进行…

阿里云服务提供商分享视频直播网站服务器解决方案

大家应该都听过抖音、西瓜视频这类的视频网站&#xff0c;而且这些视频网站深受大家喜爱。直播模式也如雨后春笋一般快速出现&#xff0c;电商直播也逐渐火热。因此很多视频类公司纷纷搭建视频直播平台&#xff0c;那么这类网站的服务器该如何选择呢&#xff1f;下面就由阿里云…