网站业务架构演变过程

news/2024/5/10 16:27:35/文章来源:https://blog.csdn.net/haoyiyide/article/details/59078700

网站业务架构演变过程

有一天,我突发奇想创建了一个站点,基于LNMP架构,起初只有我自己访问,后来因为我点儿正,访问量越来越大,所以最终导致下面的架构演变。
1. 单台机器因为只是一个小站,访问量一天也没有多少uv(100以内),所以用一台1核1g的机器足够了。机器上安装的是CentOS系统,然后搭建了nginx+php-fpm+mysql的环境。


2. 一台变两台

jg2.jpg

访问量越来越大,日uv突破5000,单台机器不够了,本可以增加机器配置编程4核8G,但是考虑到还要换机器,所以直接添置一台DB服务器单独跑MySQL服务。原来的服务器只需要跑nginx+php-fpm,新加服务器跑MySQL服务。 在这里,大家往往会遇到一个问题,就是如何在多台机器上编译安装LAMP环境,在单台机器上编译大家都没有问题,PHP放在最后,因为它依赖MySQL,但我们这里需要把MySQL放到另一台机器,所以编译肯定会报错。解决这个问题,其实很简单,即使WEB上不需要MySQL,我们也要安装一下,因为编译PHP的时候依赖它。


3. 增加memcached
jg3.jpg


访问量持续增加,uv上w了,DB服务器和WEB服务器压力越来越大,这时候我们需要加一个缓存来缓解DB服务器的压力。同样是两台机器,只不过WEB机器配置需要升级了,原来的1核1g不够用了,不仅要加cpu还要加内存,因为在WEB上我们需要运行memcached服务,同时php也需要安装memcache扩展。


4. 增加WEB,并做MySQL主从
访问量又扩大了,uv到了5w,数据库服务器因为一开始配置就挺高,所以没有压力,但是WEB服务器负载有点高了,在高峰期可以感觉到网站访问变慢。所以,这时候不得不考虑要加一台WEB服务器。另外,数据库是单点,如果磁盘损坏,可能会带来意想不到的后果,所以我们有必要加一台从DB服务器,作为数据的备份。
jg4.jpg


在这里,两台WEB服务器我们并没有做负载均衡,因为为了节省资源,暂时先不去购买服务器做负载均衡,我们使用DNS轮询的方法来把用户的请求发到两台机器上,但这种该架构有个问题,一旦一台WEB机器宕机,将会有一半的用户访问不到业务。还有一个问题,我们也需要考虑到,如何保证WEB服务器上的数据一致,比如用户可能会上传图片到WEB服务器上,假如他上传到了WEB1上,那WEB2是不存在这个图片的。所以我们需要做一个共享存储让WEB1和WEB2同时可以访问,所以在这里我把WEB1的一个目录使用NFS共享出来,让WEB2去挂载。还有一个问题就是memcached服务如何分配,在这里,我是把memcaced服务分别安装到两台WEB上的,自己用自己的memcached服务。
5. mysql读写分离
访问量持续上升,uv已经到了数十万。网站在高峰期总是会卡顿那么一段时间。经排查,发现在MySQL服务器上有很多慢查询,经过各种调优依然没有太明显效果,最后决定做读写分离。 

做读写分离有两种方案,第一可以借助程序来实现,把所有的写操作指向到主mysql,所有的读操作指向到从mysql。对于这种方案,机器数量和环境不用做任何调整,唯一要做的是程序代码要改一下。第二可以借助mysql-proxy来实现,不用修改代码,节省开发成本,但需要增加一个角色。架构是这样的。
jg5.jpg



6. 避免单点引入负载均衡
两台WEB服务器因为有一台比较老,所以在高峰期时,终究是没有能扛住而挂掉。结果影响了一半的用户访问不到网站了。经过此次事故,我不得不修改架构,尽量避免单点,于是在WEB前端设置了负载均衡器,并且做了高可用。
jg6.jpg



在这里我拿nginx做了负载均衡器,并没有使用lvs,因为我觉得nginx更容易操作,更好控制。为了节省成本,我并没有单独把mysql-proxy摘出来作为独立服务器,因为那样的话,也得为它考虑单点问题。在这个架构中,其实还有一个缺陷,就是NFS服务端也是有风险的,更加保险的做法是单独搞一台服务器做NFS服务。

7. 继续扩充
uv上升到100w,两台WEB服务器明显不够用了,而瓶颈并不在mysql上。所以,只增加WEB,同时把NFS服务器单独摘出来,并做一个备用NFS服务器。

jg7.jpg



8. 引入NoSQL
uv近1000w,三台WEB服务器也早已不够,增加到5台,而MySQL服务器压力逐渐变大,针对mysql的慢查询,发现压力主要体现在个别sql语句上,该优化的已经优化到极致,对于这几个查询,其实是可以使用NoSQL的。于是,我找懂php开发的朋友帮我修改了程序,把一些访问量大的数据存储到redis,从而减少了对MySQL服务器的压力。 而Redis为了防止单点也做了主从。

jg8.jpg

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

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

相关文章

OpenCms创建网站过程图解

http://blog.csdn.net/qianxuncms/archive/2007/04/09/1557694.aspx 很多人都听说了OpenCms,知道了它的强大,索性的下载安装了,终于见到了久违OpenCms,看到了它简洁的界面,欣喜过后却不免一脸茫然,这个东西…

欢迎大家来我的网站做客哦

网站 http://www.ibaozi.cn/ 简要 该网站目的收集Flutter教程文章,欢迎投稿,还有该网站提供免费的博主页设计,想入住网站的朋友随时可以入住哦。入住的样子如下: Macro 校长 文章推荐: 随时投稿哦 文章

Flutter Web网站搭建教程

简述 曾几何时,你有没有一个搭个人网站的冲动,我这个想法在我第一次开始写博客就有了,可就是没有搭起来,直到我看到flutter有了web支持,我就在想,是时候了,必须且一定要做,于是乎我…

Flutter Web网站之Jetpack成型

往期 Flutter Web网站搭建教程Flutter Web 网站之主页框架搭建 上期回顾 上期我们做了一个能兼容不同屏幕大小的主页,来适配Web、Android等平台。主要用到了**MediaQuery**来动态获取屏幕的宽度,来动态适配UI。 本期内容 好消息,我申请的…

Flutter Web网站之ScrollView+GridView优化

往期 Flutter Web网站搭建教程Flutter Web 网站之主页框架搭建Flutter Web网站之Jetpack成型 上期回顾 上期我们做了简单的分包处理,然后就用了SingleChildScrollViewGridView为主要的框架实现了网格布局以及上下滑动效果,Chrome Web以及原生体验并没有发…

Flutter Web网站之最简方式实现暗黑主题无缝切换

往期 Flutter Web网站搭建教程Flutter Web 网站之主页框架搭建Flutter Web网站之Jetpack成型Flutter Web网站之ScrollViewGridView优化 上期回顾 上期我们做了优化,主要针对ScrollViewGridView的使用场景,用了更加合适的组件,这期想做一个…

Flutter Web网站之Markdown展示与博客列表

往期 Flutter Web网站搭建教程Flutter Web网站之主页框架搭建Flutter Web网站之Jetpack成型Flutter Web网站之ScrollViewGridView优化Flutter Web网站之最简方式实现暗黑主题无缝切换 上期回顾 上期主要实现了主题切换,通过StreamBuilder来动态的切换ThemeData&…

关于云服务器中IE浏览器无法下载和登录网站的问题解决方案

关于云服务器IE浏览器无法下载和登录网站的问题解决方案 原因解决方案 原因 IE浏览器增强安全配置已启用,导致网站的访问权限降低 解决方案 1.进入服务器管理器 2.如图所示,本地服务器-IE增强的安全配置 3.设置为关闭 即可

asp.net802-个人博客网站空间管理系统#毕业设计

项目编号:asp.net802-个人博客网站空间管理系统 运行环境:VSSQL 开发工具:VS2010及以上版本 数据库:SQL2008及以上版本 使用技术:HTMLJSHTML 开发语言:C#,框架:asp.net 互联网彻底改变了我们每个人的生活&#x…

asp.net829家乡土特产销售网站#毕业设计

项目编号:asp.net829家乡土特产销售网站#毕业设计 运行环境:VSSQL 开发工具:VS2010及以上版本 数据库:SQL2008及以上版本 使用技术:HTMLJSHTML 开发语言:C#,框架:asp.net 基本每个地方都有自己的特产&#xff0c…

asp.net831手工制作方面的社交网站#毕业设计

项目编号:asp.net831手工制作方面的社交网站#毕业设计 运行环境:VSSQL 开发工具:VS2010及以上版本 数据库:SQL2008及以上版本 使用技术:HTMLJSHTML 开发语言:C#,框架:asp.net ​一直以来,都有很多的手…

asp.net824个人财务管理网站#毕业设计

项目编号:asp.net824个人财务管理网站#毕业设计 运行环境:VSSQL 开发工具:VS2010及以上版本 数据库:SQL2008及以上版本 使用技术:HTMLJSHTML 开发语言:C#,框架:asp.net 个人财务信息管理系统的开发目的是使个人财…

asp.net836护肤品评测网站#毕业设计

项目编号:asp.net836护肤品评测网站#毕业设计 运行环境:VSSQL 开发工具:VS2010及以上版本 数据库:SQL2008及以上版本 使用技术:HTMLJSHTML 开发语言:C#,框架:asp.net 越来越多的人接受了电子商务这种便捷、快速的…

asp.net838服装展示销售网站毕业设计

项目编号:asp.net838服装展示销售网站毕业设计 运行环境:VSSQL 开发工具:VS2010及以上版本 数据库:SQL2008及以上版本 使用技术:HTMLJSHTML 开发语言:C#,框架:asp.net 服装基本是每个人每一天都会接触到的东西&a…

asp.net843课程网站设计与开发#毕业设计

项目编号:asp.net843课程网站设计与开发#毕业设计 运行环境:VSSQL 开发工具:VS2010及以上版本 数据库:SQL2008及以上版本 使用技术:HTMLJSHTML 开发语言:C#,框架:asp.net 学习是人类进步的阶梯,只有不…

asp.net848化妆品销售网站#毕业设计

项目编号:asp.net848化妆品销售网站#毕业设计 运行环境:VSSQL 开发工具:VS2010及以上版本 数据库:SQL2008及以上版本 使用技术:HTMLJSHTML 开发语言:C#,框架:asp.net 化妆品基本是每一个女士每天都会使用到的一个…

python+djaongo的汉服文化交流网站汉服销售网站

开发语言:Python 开发工具:pycharm 数据库:MYSQL5.7 使用框架:djangovue 随着我国文化的不断复兴,很多文化元素也正在不断的出现在街头小巷之中, 其中汉服文化就是一个典型的代表,当前在很多拥有历史沉淀的景点,经常可以看到很多年…

Java+mysql基于SSM的公司办公网站OA系统#毕业设计

开发语言:Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架:ssm 随着我国经济的发展, 各类企业也在不断的增加,相应的办公的业务也在不断的增多,这就给日常的办公提出了新的要求,很明显传统的办公…

基于springboot+vue的电影视频订票咨询网站系统-Java项目毕业设计

项目介绍 随着网络不断的普及发展,影城管理系统依靠网络技术的支持得到了快速的发展,首先要从用户的实际需求出发,通过了解用户的需求开发出具有针对性的首页、电影信息、电影资讯、个人中心、后台管理、在线客服功能 影城管理系统的主要使用…

手搭我的世界基岩版服务器后台网站(LiteloaderBDS-SQLite-Spring Boot-Vue)Java后端+RESTful API;借助Three.js实现三维可视化展览交互界面

项目是刚刚完成的,于是趁热打铁把文档也写了。在这里分享出来,也方便以后回顾 目录 项目介绍 整体设计架构图 网站界面预览图 技术选型和原因 搭建步骤 库表设计 插件说明 后端说明 前端说明 部署说明 完整代码 插件代码 后端代码 前端代…