大型网站系统架构演化之路

news/2024/5/19 19:45:31/文章来源:https://blog.csdn.net/weixin_34029680/article/details/90684358

大型网站系统架构演化之路

前言

一个成熟的大型网站(如淘宝、天猫、腾讯等)的系统架构并不是一开始设计时就具备完整的高性能、高可用、高伸缩等特性的,它是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构、设计思想也发生了很大的变化,就连技术人员也从几个人发展到一个部门甚至一条产品线。所以成熟的系统架构是随着业务的扩展而逐步完善的,并不是一蹴而就;不同业务特征的系统,会有各自的侧重点,例如淘宝,要解决海量的商品信息的搜索、下单、支付,例如腾讯,要解决数亿用户的实时消息传输,百度它要处理海量的搜索请求,他们都有各自的业务特性,系统架构也有所不同。尽管如此我们也可以从这些不同的网站背景下,找出其中共用的技术,这些技术和手段广泛运用在大型网站系统的架构中,下面就通过介绍大型网站系统的演化过程,来认识这些技术和手段。

一、最开始的网站架构

最初的架构,应用程序、数据库、文件都部署在一台服务器上,如图:

二、应用、数据、文件分离

随着业务的扩展,一台服务器已经不能满足性能需求,故将应用程序、数据库、文件各自部署在独立的服务器上,并且根据服务器的用途配置不同的硬件,达到最佳的性能效果。


三、利用缓存改善网站性能

在硬件优化性能的同时,同时也通过软件进行性能优化,在大部分的网站系统中,都会利用缓存技术改善系统的性能,使用缓存主要源于热点数据的存在,大部分网站访问都遵循28原则(即80%的访问请求,最终落在20%的数据上),所以我们可以对热点数据进行缓存,减少这些数据的访问路径,提高用户体验。

缓存实现常见的方式是本地缓存、分布式缓存。当然还有CDN、反向代理等,这个后面再讲。本地缓存,顾名思义是将数据缓存在应用服务器本地,可以存在内存中,也可以存在文件,OSCache就是常用的本地缓存组件。本地缓存的特点是速度快,但因为本地空间有限所以缓存数据量也有限。分布式缓存的特点是,可以缓存海量的数据,并且扩展非常容易,在门户类网站中常常被使用,速度按理没有本地缓存快,常用的分布式缓存是Memcached、Redis。

四、使用集群改善应用服务器性能

应用服务器作为网站的入口,会承担大量的请求,我们往往通过应用服务器集群来分担请求数。应用服务器前面部署负载均衡服务器调度用户请求,根据分发策略将请求分发到多个应用服务器节点。



常用的负载均衡技术硬件的有F5,价格比较贵,软件的有LVS、Nginx、HAProxy。LVS是四层负载均衡,根据目标地址和端口选择内部服务器,Nginx是七层负载均衡和HAProxy支持四层、七层负载均衡,可以根据报文内容选择内部服务器,因此LVS分发路径优于Nginx和HAProxy,性能要高些,而Nginx和HAProxy则更具配置性,如可以用来做动静分离(根据请求报文特征,选择静态资源服务器还是应用服务器)。

五、数据库读写分离和分库分表

随着用户量的增加,数据库成为最大的瓶颈,改善数据库性能常用的手段是进行读写分离以及分表,读写分离顾名思义就是将数据库分为读库和写库,通过主备功能实现数据同步。分库分表则分为水平切分和垂直切分,水平切换则是对一个数据库特大的表进行拆分,例如用户表。垂直切分则是根据业务不同来切换,如用户业务、商品业务相关的表放在不同的数据库中。





六、使用CDN和反向代理提高网站性能

假如我们的服务器都部署在成都的机房,对于四川的用户来说访问是较快的,而对于北京的用户访问是较慢的,这是由于四川和北京分别属于电信和联通的不同发达地区,北京用户访问需要通过互联路由器经过较长的路径才能访问到成都的服务器,返回路径也一样,所以数据传输时间比较长。对于这种情况,常常使用CDN解决,CDN将数据内容缓存到运营商的机房,用户访问时先从最近的运营商获取数据,这样大大减少了网络访问的路径。比较专业的CDN运营商有蓝汛、网宿。

而反向代理,则是部署在网站的机房,当用户请求达到时首先访问反向代理服务器,反向代理服务器将缓存的数据返回给用户,如果没有没有缓存数据才会继续走应用服务器获取,也减少了获取数据的成本。反向代理有Squid,Nginx。

七、使用分布式文件系统

用户一天天增加,业务量越来越大,产生的文件越来越多,单台的文件服务器已经不能满足需求。需要分布式的文件系统支撑。常用的分布式文件系统有NFS。

八、使用NoSql和搜索引擎

对于海量数据的查询,我们使用nosql数据库加上搜索引擎可以达到更好的性能。并不是所有的数据都要放在关系型数据中。常用的NOSQL有mongodb和redis,搜索引擎有lucene。

九、将应用服务器进行业务拆分

随着业务进一步扩展,应用程序变得非常臃肿,这时我们需要将应用程序进行业务拆分,如百度分为新闻、网页、图片等业务。每个业务应用负责相对独立的业务运作。业务之间通过消息进行通信或者同享数据库来实现。

 

十、搭建分布式服务

这时我们发现各个业务应用都会使用到一些基本的业务服务,例如用户服务、订单服务、支付服务、安全服务,这些服务是支撑各业务应用的基本要素。我们将这些服务抽取出来利用分部式服务框架搭建分布式服务。淘宝的Dubbo是一个不错的选择。



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

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

相关文章

微网站|h5弹窗|手机网站 html5 弹窗、弹层、提示框、加载条

为了精确体验,您可通过Chrome设备模式浏览。或通过[url]手机扫二维码进入[/url] layer mobile是为移动设备(手机、平板等webkit内核浏览器/webview)量身定做的弹层支撑,采用Native JavaScript编写,完全独立于PC版的lay…

访问jira网站中已解决问题链接时跳转到另一IP的解决办法

迁移完Jira后,以普通用户进入jira,点击Jira中已解决问题的链接,发现跳转到的IP是迁移前的IP,以下为解决办法。 第一步:使用管理员用户进入Jira,点击“管理”-->"通用设置"; 第二步…

Wordpress 网站搭建及性能监控方法详解!

2019独角兽企业重金招聘Python工程师标准>>> ######前言 说到 Wordpress,大家往往想到的是博客,其实,如今的 WordPress 已经成为全球使用量最多的开源 CMS 系统。并且,如果你有一定的技术基础稍加改动,就可…

IIS 7 发布网站

1.先按F6编译通过。 2.操作如下列图上所示: 3. IIS 的配置 部署完毕 如有问题请留言,大家一起解决。

支付宝手机网站支付接口API之C#版

一、准备工作 1、使用企业支付宝签约手机网站支付 2、下载支付宝官方demo 文档地址:https://doc.open.alipay.com/doc2/detail?treeId60&articleId103564&docType1 下载地址:http://aopsdkdownload.cn-hangzhou.alipay-pub.aliyun-inc.com/demo…

JQuery仿购物网站放大镜特效所遇问题及思考

JQuery仿购物网站放大镜特效所遇问题及思考 先贴下效果图,然后描述起来也就不会不知道我在说什么了。 我碰到的问题一: 一开始我自己总结了是因为两个小原因导致的①使用了mouseover,mouseout事件②因为层叠样式(z-index)的原因。一开始的HTM…

bind、click、mouseover、mouseout及简写实现显示与隐藏效果

1、$().bind("click", function() {...........});也可以写成 $().click(function() {..........}); 2、$().bind("mouseover", function() {...........}) .bind("mouseout", function() {...........}); 也可以写成 $().mouseover(function…

如何修改XAMPP默认网站目录

XAMPP默认网站目录保存在...\xampp\htdocs文件夹下,修改目录步骤: 1.XAMPP面板,点击Apache服务器Config按钮,选择Apache(httpd.conf); 2.在打开的记事本中,使用快捷键CtrlF进行查找&…

nodejs微信公众号开发——9.爬取网站素材定时推送消息

上一篇文章:nodejs微信公众号开发——8.群发消息,介绍了高级群发接口的实现,并通过一个简单例子加以说明。本节的内容可能和微信公众号开发本身关系不大,只是我小项目中涉及到的内容,知识点包含nodejs爬虫和定时模块。…

jQuery-鼠标事件及使用unbind移除mouseover、mouseout、mousemove绑定

$item.mouseover(function(){//鼠标滑入... }).mouseout(function(){//鼠标滑出... }).mousemove(function(){//鼠标移动... }); 如上,对dom绑定了鼠标事件,那么如何解除绑定呢?如下设置即可: $item.unbind(mouseover).unbind(m…

阿里云ECS建网站(建站)超详细全套完整图文教程!菜鸟必看!

第一步:如何以最低价格快速买到阿里云服务器? 1.1 如果我是学生,我如何通过¥9.9买到价值¥117的服务? 答:用¥9.9购买云服务器ECS是阿里云学生专属活动。首先,你需要在阿里…

云服务器更换PHP版本升级的问题_升级PHP后_网站打不开

摘要: 升级PHP版本后网站打不开解决办法,切换PHP版本后网站打不开解决办法。 文章前面说一下,本人是小白,写这篇文章是因为自己解决了问题,高兴之余,是因为没有这样的文章写出来,可能是太基础的…

【服务器】搭建vue3+vite+koa2+mongodb网站 ----- 安装宝塔面板(步骤一)

介绍 我的是百度云的轻量应用服务器LS,新用户可以试用,百度云官网 1. 在服务器上安装宝塔面板 宝塔面板官网,我的服务器系统镜像是 Centos 7(别用 Centos 8 宝塔面板会无法安装 Nginx,如果已经安装了 8 那就重装系统…

【服务器】搭建vue3+vite+koa2+mongodb网站 ----- 部署前端项目(步骤二)

部署前端项目 1. 前端项目打包(npm run build),上传打包后的 dist 文件夹到服务器,下面是操作步骤 新建文件夹 health-web ,根据自己项目来 打包后的 dist 文件夹内容上传至 新建的 health-web 文件夹内 2. 新建一个…

【服务器】搭建vue3+vite+koa2+mongodb网站 ----- 部署后端项目(步骤三)

部署后端项目 1. 在宝塔面板的文件中,新建 health-server 文件夹,然后上传后端代码(千万不要上传 node_modules 文件夹) 需要上传的文件和文件夹 上传成功后的界面 在 health_server 文件夹下,安装 node_modules 文…

【服务器】搭建vue3+vite+koa2+mongodb网站 ----- 使用mongodb数据库(步骤四)

使用 mongodb 数据库 在软件商店里找到 mongodb ,点击修改 mongodb 配置, 允许任何机器都可以访问该数据库 使用 mongodb 客户端 MongoDB Compass 连接服务器数据库 如果刷新页面出现 404,可以通过配置 nginx 解决 location / {try_files …

【服务器】搭建vue3+vite+koa2+mongodb网站 ----- http变成https(步骤五)

1. 介绍 因为微信小程序请求接口需要 https,所以这里把 http 转换为 https 2. 申请 ssl 证书 其他免费证书 https://freessl.cn/ 因为我有百度云账号,这里免费申请了百度云的 ssl 证书,支付成功后还需要申请一下 申请成功后 下载证书&…

【服务器】搭建vue3+vite+koa2+mongodb网站 ----- 常见问题

一. 接口不通 需要查看是否开启线上配置,默认是开发环境,需要配置一个生成环境,这里 VITE_BASE_API 使用线上地址加端口,也就是马赛克挡住的部分 二. 刷新页面出现404 如果刷新页面出现 404,可以通过配置 nginx 解决…

推荐 | 基于Linux命令行的五个文件下载和网站浏览工具

Linux命令行是GNU/Linux中最神奇迷人的部分,它是非常强大的工具。命令行本身功能多样,多种内建或者第三方的命令行应用使得Linux变得更加健壮和强大。Linux Shell支持多种不同类型的网络应用,无论是BT下载软件,专用下载器或者互联…

使用laravel快速开发网站流程(composer)

一、下载安装composer 1、composer官方下载地址 2、安装 中间的选项可以不用操作忽略掉直接下一步到安装结束 3、完成 cmd中输入composer出现下面的信息证明安装结束 4、配置中文镜像 快速down包 , 不需要的可以忽略这一步 。直接在cmd中输入命令 命令地址 二、laravel应用 …