网站架构的逐步优化演变

news/2024/5/11 3:54:39/文章来源:https://blog.csdn.net/cpongo1/article/details/89546485

一:建站之初

    • *

建站之初,站点流量非常小,可能低于十万级别。这意味着,平均每秒钟也就几次访问。请求量比较低,数据量比较小,代码量也比较小,几个工程师,很短的时间搭起这样的系统,甚至没有考虑“架构”的问题。
站点架构特点是“ALL-IN-ONE”:
image.png

这是一个单机系统,所有的站点、数据库、文件都部署在一台服务器上。工程师每天的核心工作是CURD,浏览器端传过来一些数据,解析GET/POST/COOKIE中传过来的数据,拼装成一些CURD的sql语句访问数据库,数据库返回数据,拼装成页面,返回浏览器。相信很多创业团队的工程师,初期做的也是类似的工作。

比如:微软技术体系这条路:Windows、iis、SQL-Sever、C#

推荐选择LAMP体系。

为什么选择LAMP?

LAMP无须编译,发布快速,功能强大,社区活跃,从前端+后端+数据库访问+业务逻辑处理全部可以搞定,并且开源免费,公司做大了也不会有人上门收钱(不少公司吃过亏)。现在大家如果再创业,强烈建议使用LAMP。
image.png

初创阶段,工程师面临的主要问题:写CURD的sql语句很容易出错。

我们在这个阶段引进DAO和ORM,让工程师们不再直接面对CURD的sql语句,而是面对他们比较擅长的面向对象开发,极大的提高了编码效率,降低了出错率。

二:流量增加,数据库成为瓶颈

    • *

随着流量越来越大,老板不只要求“有一个可以看见的站点”,他希望网站能够正常访问,当然速度快点就更好了。

而此时系统面临问题是:流量的高峰期容易宕机,大量的请求会压到数据库上,数据库成为新的瓶颈,人多并行访问时站点非常卡。这时,我们的机器数量也从一台变成了多台,我们的系统成了所谓的(伪)“分布式架构”:

image.png

我们使用了一些常见优化手段:

  • (1)动静分离,动态的页面通过Web-Server访问,静态的文件例如图片就放到单独的文件服务器上;
  • (2)读写分离,将落到数据库上的读写请求分派到不同的数据库服务器上;

互联网绝大部分的业务场景,都是读多写少。对访问量大的系统来说,绝大部分用户的需求是访问信息,搜索信息,只有少数的用户发贴。此时读取性能容易成为瓶颈,那么如何扩展整个站点架构的读性能呢?常用的方法是主从同步,增加从库。我们原来只有一个读数据库,现在有多个读数据库,就提高了读性能。

在这个阶段,系统的主要矛盾为“站点耦合+读写延时”,如何解决这两个问题的呢?

第一个问题是站点耦合。对发布信息的系统而言,典型业务场景是:类别聚合的主页,发布信息的发布页,信息聚合的列表页,帖子内容的详细页,原来这些系统都耦合在一个站点中,出现问题的时候,整个系统都会受到影响。

第二个问题是读写延时。数据库做了主从同步和读写分离之后,读写库之间数据的同步有一个延时,数据库数据量越大,从库越多时,延时越明显。对应到业务,有用户发帖子,马上去搜索可能搜索不到(着急的用户会再次发布相同的帖子)。
image.png

要解决耦合的问题,最先想到的是针对核心业务做切分,工程师根据业务切分对系统也进行切分:我们将业务垂直拆分成了首页、发布页、列表页和详情页

另外,我们在数据库层面也进行了垂直拆分,将单库数据量降下来,让读写延时得到缓解。

image.png

同时,还使用了这些技术来优化系统和提高研发效率:

  • (1)对动态资源和静态资源进行拆分。对静态资源我们使用了CDN服务,用户就近访问,静态资源的访问速度得到很明显的提升;
  • (2)除此之外,我们还使用了MVC模式,擅长前端的工程师去做展示层,擅长业务逻辑的工程师就做控制层,擅长数据的工程师就做数据层,专人专用,研发效率和质量又进一步提高。

第三:全面转型开源技术体系

    • *

流量越来越大,当流量达到百万甚至千万时,站点面临一个很大的问题就是性能和成本的折衷。上文提到很多系统最初的技术选型是Windows,我们在这个阶段做了一次脱胎换骨的技术转型,全面转向开源技术:

(1)操作系统转型Linux
(2)数据库转型Mysql
(3)web服务器转型Tomcat
(4)开发语言转向了Java

其实,很多互联网公司在流量从小到大的过程中都经历过类似的转型,例如京东和淘宝。

随着用户量的增加,对站点可用性要求也越来越高,机器数也从最开始的几台上升到几百台。那么如何提供保证整个系统的可用性呢?首先,我们在业务层做了进一步的垂直拆分,同时引入了Cache,如下图所示:
image.png

在架构上,我们抽象了一个相对独立的服务层,所有数据的访问都通过这个服务层统一来管理,上游业务线就像调用本地函数一样,通过RPC的框架来调用这个服务获取数据,服务层对上游屏蔽底层数据库与缓存的复杂性。
image.png

除此之外,为了保证站点的高可用,我们使用了反向代理。

什么是代理?代理就是代表用户访问xxoo站点。

什么是反向代理?反向代理代表的是自己的网站,用户不用关注访问是你网站的哪台服务器,由反向代理来代表你的网站。你的网站通过反向代理,DNS轮询, LVS等技术,来保证接入层的高可用性。

另外,为了保证服务层和数据层的高可用,我们采用了冗余的方法,单点服务不可用,我们就冗余服务,单点数据不可用,我们就冗余数据。

这个阶段你的服务器进入了一个业务高速爆发期,短期内衍生出非常多的业务站点和服务。新增站点、新增服务每次都会做一些重复的事情,例如线程模型,消息队列,参数解析等等

这个阶段,为了进一步解耦系统,我们引入了配置中心、柔性服务和消息总线。
image.png

引入配置中心,业务要访问任何一个服务,不需要在本地的配置文件中配置服务的ip list,而只需要访问配置中心。这种方式的扩展性非常好,如果有机器要下线,配置中心会反向通知上游订阅方,而不需要更新本地配置文件。

柔性服务是指当流量增加的时候,自动的扩展服务和站点。

消息总线也是一种解耦上下游“调用”关系常见的技术手段。

机器越来越多,此时很多系统层面的问题,靠“人肉”已经很难搞定,于是自动化变得越来越重要:自动化回归、自动化测试、自动化运维、自动化监控等等等等。

最后补充一点,这个阶段引入了不少智能化产品,比如智能推荐,主动推荐一些相关的数据,以增加系统的PV;智能广告,通过一些智能的策略,让用户对广告的点击更多,增加同城的收入;智能搜索,在搜索的过程中加入一些智能的策略,提高用户的点击率,以增加系统的PV。这些智能化产品的背后都由技术驱动。

四:进一步的挑战

    • *

现在,系统的流量已经达到10亿的量级,架构上我们规划做一些什么样的事情呢,几个方向:

(1)业务服务化
(2)多架构模式
(3)平台化
(4)...

image.png

五:小结

    • *

最后做一个简单的总结,网站在不同的阶段遇到的问题不一样,而解决这些问题使用的技术也不一样:

(1)流量小的时候,我们要提高开发效率,可以在早期要引入ORM,DAO;
(2)流量变大,可以使用动静分离、读写分离、主从同步、垂直拆分、CDN、MVC等方式不断提升网站的性能和研发效率;
(3)面对更大的流量时,通过垂直拆分、服务化、反向代理、开发框架(站点/服务)等等手段,可以不断提升高可用(研发效率);
(4)在面对上亿级的流量时,通过配置中心、柔性服务、消息总线、自动化(回归,测试,运维,监控)来迎接新的挑战;

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

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

相关文章

可视化编辑网站模板拖拽式建站源码_模板建站缘何这么流行?

伴随着互联网技术的迅速发展,各式各样的平台网站层出不穷。网站模板变成企业建站的一部分,不仅是自身方便快捷的功能,更是未来发展前景的促进。网站模板就是网页模板,这里比较突出的当属开创者素材了,它采用网站制作软…

bootstrap下拉框选择没反应_SEO工具脚本,Python百度下拉框关键词采集工具

对于词的研究,想必每个seoer都知道,而除了比较热门的百度相关搜索词之外,百度下拉框关键词应该也是不少人研究的范围,不过大部分人都是针对下拉框词的刷量,毕竟百度下拉框关键词采集已经泛滥成灾了。百度下拉的官方正式…

服务器购买网站vuter,vscode中安装开发html5中需要的插件

vscode中安装开发html5中需要的插件vscode中安装开发html5中需要的插件最近在学习H5,也开始尝试着用vscode来写h5的代码。vscode是一个很不错的剪辑器,已经用它来写过php,python,还有vue的代码了。最近使用它写H5的代码&#xff0…

xampp配置PHP配置端口,【PHP】xampp配置多个监听端口和不同的网站目录(转)

windows下使用xampp配置多个监听端口和不同的网站目录一:配置Apache文件httpd.conf打开Apache的配置文件httpd.conf,可以通过点击xampp的Apache的config下的Apache(httpd.conf)打开。首先在Listen 80下面添加监听端口如Listen 8001Listen 8002然后在http…

css background-image 高度自适应_打造自适应网站只用一个CSS属性就够了

用一个CSS属性创建一个响应式网站,让我们来看看它是如何做到的。 以这个模板为例,没有应用css属性。 使用 clamp() CSS函数,我们可以创建仅具有一个属性的响应式网站。现在添加魔术CSSclamp(minimum, preferred, maximum);在这里!…

打开是什么样子的图片_3个在线设计效果图网站,可以把图片生成网页扁平网页模板...

点击上方“字体传奇”→点右上角“...”→点选“设为星标★找到3个在线设计效果图网站,可以把图片生成网页扁平网页模板,在网站内上传一张图片,可以生成好几个不同风格的浏览器页面,照片等风格,背景色彩都是可以自定义…

论好用的云主机对于网站运营的重要性

网站的运营对于企业来说,其重要性是不必多言的,不管是企业还是个人,网搭建好后,只有很好地运营起来才能带来收益。既然后期的网站运营对于企业或个人网站来说如此重要,那影响网站后期运营的重要因素又有哪些呢&#xf…

网站被黑该怎么修复漏洞

近日wordpress被爆出高危的网站漏洞,该漏洞可以伪造代码进行远程代码执行,获取管理员的session以及获取cookies值,漏洞的产生是在于wordpress默认开启的文章评论功能,该功能在对评论的参数并没有进行详细的安全过滤与拦截&#xf…

找网站建设工作前的练习,织梦分页列表样式错误问题,没有可点击分页标签只有记录并且样式错误...

因为要去找工作,就想把自己先做个网站到时面试能加分。 于是,织梦登场,当然工作了可能也是必备的。 第一天,文档模板总是提示不存在,但是我已经改了啊,结果搜索了一天答案都没找到问题,第二天醒…

网站验证码的生成原理、难度控制,及python实现...

图片验证码已经广泛的使用在各种反爬虫的场景中,验证码的的生成验证过程对于开发者来说是零成本的,对于用户体验来说可能稍差、但是对于爬虫来说是致命的和高成本的。 下面将介绍使用python实现网站验证码的产生及验证的全过程,然我们对验证码…

C#实现一直疯狂get访问一个网站

好无聊,哈哈,就写了个这玩意,也没什么技术含量using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Net;using System.Threading;namespace aotoHttpGet{class Program{static…

JAVA游戏停产_烽火18台系列之十四:应急处置“网站一键关停”

前不久,“永恒之蓝“病毒肆虐整个互联网,各网络安全管理员们纷纷忙于打补丁、拔网线、做封堵,那种”想哭“的感觉还记忆犹新,那幅手忙脚乱的画面还历历在目。网络安全工作的重点已经从“防御”一切可能的攻击逐渐转向提升应对攻击…

网站程序有漏洞怎么修复和查找漏洞

ecshop目前最新版本为4.0,是国内开源的一套商城系统,很多外贸公司,以及电商平台都在使用,正因为使用的人数较多,很多攻击者都在挖掘该网站的漏洞,就在最近ecshop被爆出高危漏洞,该漏洞利用跨站伪…

java和seo学那个_seo和java哪个更好

一个seo行业站点,科学的内容制作应该与seo相关,且内容本身是有人搜索的。seo和java哪个更好是有人搜索的语句,且与seo是强相关的,对于seo教程自学网来讲,这样的内容再适合不过了。任何一门技术,如果精通&am…

网站被黑导致被西部数码关闭 提示有害信息未处理的解决方案...

前段时间有一客户的网站打不开了,打开网站被提示什么:抱歉,主机因存在有害信息逾期未处理被关闭 Sorry, the site now can not be accessed. 客户第一时间找到我们SINE安全寻求解决方案,我们根据客户的反馈,进行详细的记录&#x…

百度站长平台的正确使用方式,seoer必备技能!

seo技术指标:如何查看网站的变化利用百度站长平台最为准确,都知道百度自己的产品,当然统计出来的数据也是最为准确的。第一:把网站添加到百度站长平台中去: 搜索资源平台--站点管理 点开站点管理,添加自己的…

家乡网站的设计与实现_博客网站的设计与实现(工具篇)

一、系统的设计目标目标:能够注册用户,用户可以创建自己的博客,而且用户间可以互动。二、开发工具及安装配置MyEclipse,Navicat for MySQL1.1 MyEclipse1、简介:MyEclipse是在eclipse 基础上加上自己的插件开发而成的功能强大的企…

小白在阿里云云服务器上如何发布自己的网站(建站|详细)...

昨天发的小白在阿里云云服务器上如何发布自己的网站(建站|详细),今更新一下 一、选购云服务器 到阿里云官网进行选购1.1 使用学生优惠购买使用学生优惠后为118元/年1.2 市场价购买如果是没有学生优惠的话,请用市场价购买 阿里云还…

网站高可用架构--一

网站的可用性(Availability)描述网站可有效访问的特征。 网站可用性的度量与考核网站可用性度量2.网站可用性考核 可用性指标是网站架构设计的重要指标。从管理层面,可用性指标是网站或者产品的整体考核指标,具体到每个工程师的考…

PageAdmin CMS网站建设教程:自动任务执行时间设置...

PageAdmin Cms发布文章时候有一个上线时间设置和下线时间设置,网站编辑人员可以利用这个功能来实现定时发布,在信息发布界面,如下图: 设置后就会自动加入定时任务中,注意这个功能需要再系统设置>>自动任务执行间…