一步步带你,如何网站架构

news/2024/5/10 19:32:17/文章来源:https://blog.csdn.net/weixin_33937913/article/details/94002477

何为大型网站

大型网站特性

既然说的是大型网站架构,那么架构的背后自然是解决人因面对大型网站特性而带来的问题。这样可以先给大家说下大型网站的特性,这些特性带来的问题就是人要解决的问题

  1. 高并发、大流量:PV 量巨大;
  2. 高可用:7*24 小时不间断服务;
  3. 海量数据:文件数目分分钟 xxTB;
  4. 用户分布广泛,网络情况复杂:网络运营商;
  5. 安全环境恶劣:黑客的攻击;
  6. 需求快速变更,发布频繁:快速适应市场,满足用户需求;
  7. 渐进式发展:慢慢地运营出大型网站;

大型网站目标

既然说到了大型网站的特性,那么解决这些特性带来的问题要达到什么目标呢?如下:

大型网站架构目标

每个目标背后面临着技术、设计、维护等诸多方面的挑战; 而目标本身的期望值也会根据实际情况进行调整,这也意味着网站架构建设是个不断调整的过程。

有了问题,也定了伟大的目标,那么网站在不同阶段面对不同的问题,是如何解决的?又是如何一步步成长为大型网站架构,实现这些伟大的目标呢?

如何网站架构

首先,什么是大型网站架构呢?

其实大型网站架构的概念对于每一个开发者来说很笼统、很模糊,正如盲人摸象,看到的、了解到的只是很小的一部分,大部分情况下我们只是负责架构中的一小块内容,所以很难清晰地给出具体定义。这就是所谓“不识庐山真面目 只缘身在此山中”的尴尬吧。所以我们要跳出来,站在宏观的角度,从整体到细节实现来认识大型网站架构。

那么从宏观的角度怎么去认识大型网站架构呢?正如前面几篇《细品架构系列》所描述对架构的认识,按照问题识别—>概念认知—>架构切分的思路,来分析大型网站架构的诞生:

  1. 问题识别:当前什么问题、谁的问题、问题边界;
  2. 概念认知:通过分析问题,会产生哪些概念,统一概念认知,达成沟通交流规范;
  3. 架构切分:根据概念来解决问题,如何架构切分,产生哪些架构,提出具体解决方案;

PS:上面的三个步骤具体如何识别、认知、切分,请详细参考前面几篇《细品架构系列》文章,可能使你会对架构有重新的认识。

在进行分析大型网站架构的演进之路前,首先我们要明确的两个价值观:

  1. 核心价值:随网站所需灵活应对;大型网站不是从无到有一步就搭建好一个大型网站,而是能够伴随小型网站业务的渐进发展,慢慢地演化成一个大型网站;
  2. 驱动力量:网站的业务发展—业务成就了技术,事业成就了人,而不是相反;

还有,大型网站架构演进必须避免的几个误区:

  1. 一味追随大公司的解决方案;
  2. 为了技术而技术–>常见问题;
  3. 企图用技术解决所有问题:技术是用来解决业务问题的,而业务的问题,也可以通过业务的手段去解决;

架构体系演进

单机时代

草根时期,快速开发网站并上线。当然,通常只是先试水,用户规模也没有形成,经济能力和投入也非常有限应用程序、数据库、文件等所有资源都集中在一台 Server上,典型案例:基于 LAMP 架构的 PHP 网站;

单机时代(纯依赖RDBMS)

优点:简单、快速迭代达成业务目标;
缺点:存在单点、谈不上高可用;
技术点:应用设计要保证可扩展;

缓存出场

有一定的业务量和用户规模了,想提升网站速度,于是,缓存出场了

单机时代+缓存出场

优点:简单有效、方便维护;
缺点:存在单点、谈不上高可用;
技术点:客户端(浏览器)缓存、前端页面缓存、页面片段缓存、本地数据缓存/数据库缓存、远程缓存;

如上图,缓存可以分为:

  1. 页面缓存:客户端缓存,减少对网站的访问;
  2. 本地缓存:访问速度快,但数据量有限,减少对DB查询;
  3. 远程缓存:远程访问,可以集群,因此容量不受限制;

数据服务与应用分离

市场反响还不错,用户量每天在增长,数据库疯狂读写,逐渐发现一台服务器快撑不住了。于是,决定把数据服务和APP做分离

数据服务与应用分离

优点:简单有效、方便维护、提高不同Server对硬件资源的利用率;
缺点:存在单点、谈不上高可用;
技术点:文件服务器部署、数据库服务器,扩展数据访问模块;

分离后三台 Server 对硬件资源的需求各不相同:

  1. 应用服务器:需要更快更强大的 CPU;
  2. 数据库服务器:需要更快的硬盘和更大的内存;
  3. 文件服务器:需要更大的硬盘;

数据库读写分离

单台数据库也感觉快撑不住了,一般都会尝试做“读写分离”。由于大部分互联网“读多写少”的特性所决定的。Salve的台数,取决于按业务评估的读写比例。

数据库读写分离

优点:简单有效、降低数据库单台压力;
缺点:读写分离,增加程序难度,架构变复杂,维护难度增加;
技术点:数据库主从同步部署,扩展数据访问模块,实现读写分离;

应用服务集群

数据库层面是缓解了,但是应用程序层面也出现了瓶颈,由于访问量增大,加上早期程序员水平有限写的代码也很烂,人员流动性也大,很难去维护和优化。所以,很常用的办法还是“堆机器”。

应用出现瓶颈 负载均衡集群

优点:增加服务器和HA机制,系统性能及可用性得到保证;
缺点:应用之间缓存、Session一致性问题;
技术点:负载均衡;

通过集群解决高并发、海量数据问题的常用手段,实现系统的可伸缩性。通过负载均衡调度器,可将用户访问分发到集群中的某台 Server 上,应用服务器的负载压力不再成为整个网站的瓶颈。

集中式缓存、Session集中存储

加机器谁都会加,关键是加完之后得有效果,加完之后可能会引发一些问题。例如非常常见的:集群应用之间页面输出缓存和本地缓存一致性的问题,Session保存的问题……

集中式缓存 Session集中存储

优点:应用之间缓存、Session一致,存储无限制,可以扩展;
缺点:不如本地缓存访问快,缓存服务器、Session服务器等仍存在单点问题;
技术点:缓存服务器部署、Session集中存储方案;

动静分离

动静分离也是提高网站响应速度的一种常用方式。将动态请求与静态请求分离开,尽量减少对应用服务器的压力。同时,可以再进一步对静态请求,进行缓存,以加快响应速度。可以需要开发人员配合(把静态资源放独立站点下),也可以不需要开发人员配合(利用7层反向代理来处理,根据后缀名等信息来判断资源类型)。

使用动静分离

优点:减轻应用负载压力,针对静态文件缓存;
缺点:静态文件缓存更新失效问题;
技术点:动静分离、静态文件缓存方案;

 

反向代理和CDN加速网站响应

使用反向代理和CDN加速网站响应:CDN 和反向代理的基本原理都是缓存,区别在于:

  1. CDN部署在网络提供商的机房;
  2. 反向代理则部署在网站的中心机房;

使用 CDN 和反向代理的目的都是尽早返回数据给用户,一方面加快用户访问速度,另一方面也减轻后端服务器的负载压力。

使用反向代理和 CDN 加速网站响应

优点:减轻应用负载压力,异地缓存有效解决不同地方用户访问过慢的问题;
缺点:成本大幅增加,架构进一步复杂化,也维护难度进一步增大,静态文件缓存更新失效问题;
技术点:CDN、反向代理方案;

使用NoSQL和搜索引擎

到这里,已经基本做到了DB层面和应用层面的横向扩展了,可以开始关注一些其它方面,例如:站内搜索的精准度,对DB的依赖,开始引入全文索引、NoSQL

NoSQL和搜索引擎都是源自互联网的技术手段,对可伸缩的分布式特性具有更好的支持。应用服务器则通过一个统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。

使用NoSQL和搜索引擎

优点:降低DB依赖;
缺点:单点问题,谈不上高可用;
技术点:NoSQL、搜索引擎、分布式;

到目前为止,一个能够承载日均百万级访问量的中型网站架构基本介绍完了。

如何保证高可用

在做扩展满足了基本的性能需求后,我们会逐渐关注“可用性”(也就是我们通常听别人吹牛时说的SLA、几个9)。如何保证真正“高可用”,也是个难题。

对关键应用/服务,做集群冗余负载,这也是保证高可用比较常用的手段:

  1. 文件系统、数据库系统集群;
  2. 静态内容服务器集群;
  3. CDN服务器集群;
  4. 反向代理服务器集群;
  5. 负载均衡调度器集群;
  6. 分布式NoSQL服务器集群;
  7. 搜索引擎服务器集群;
  8. 分布式缓存服务器集群;
  9. 分布式Session服务器集群;

使用集群冗余负载 保证高可用

优点:集群负载,保证高可用;
缺点:数据一致性、数据有状态问题;
技术点:负载调度器、集群方案;

截止目前为止,都没有怎么去改动应用程序的架构,或者说通俗点,都不怎么需要大面积的修改代码。

如果上面那些手段都用光了,还是支撑不住怎么办?不停的加机器也不是办法啊?

应用垂直拆分

随着业务越来越复杂,网站的功能越来越多,虽然部署层面是采用的集群,但是应用程序架构层面还是“集中式”的,这样会导致很多耦合,不便于开发、维护,而且容易“一荣俱损”。所以,通常会把网站拆分出不同的子站点来单独宿主。

通过分而治之的手段将整个网站业务分成不同的产品线,如首页、商铺、订单、卖家、买家等拆分成不同的产品线,分归不同的业务团队负责。各个应用之间可以通过建立一个超链接建立关系,也可以通过消息队列进行数据分发。

应用垂直拆分(分压,解耦)

优点:降低耦合、分压;
缺点:应用架构复杂;
技术点:业务抽取拆分;

业务垂直分库

应用都拆了,由于单个数据库的连接,QPS,TPS,I/O处理能力都非常有限,DB层面也可以去做垂直分库操作。

业务垂直分库 分压 解耦

优点:降低DB耦合、分压DB;
缺点:数据访问模块复杂;
技术点:业务抽取拆分;

分布式服务化

拆分应用和DB之后,其实还是会有很多问题。不同的站点,里面可能会有相同逻辑和功能的代码。当然,对于一些基础的功能我们可以封装DLL或者Jar包去到处提供引用,但是这种强依赖也很容易造成一些问题(版本问题、依赖关系等处理起来非常麻烦)。

既然每一个应用系统都需要执行许多相通的业务操作,比如用户管理、商品管理等,那么可以将这些共用的业务提取出来,独立部署。这样,传说中的SOA的价值就得到体现了。

分布式服务化(解耦,去重复)

优点:服务统一管理,提供重用度;
缺点:应用架构更复杂;
技术点:业务抽取拆分、服务化技术方案;

消息队列

应用、服务之间还是会出现一些依赖问题,这时候,高吞吐量的解耦利器出现了

消息队列(服务间异步解耦 高吞吐量)

优点:提高吞吐量、应用、服务之间解耦;
缺点:存在消息消费延迟问题;
技术点:消息队列技术方案;

分库分表

*后,再介绍一个大型互联网公司都用的绝技–分库分表。个人经验,不是业务发展和各方面非常迫切,不要轻易走这一步

因为分库分表谁都会干,关键是拆完之后怎么办。目前,市面上还没有完全开源免费的方案,能让你一劳永逸地解决数据库拆分问题。

分库分表:

  1. 横向拆分;
  2. 纵向拆分;
  3. 分布式数据库访问层;
  4. 数据库中间件(代理);

网站架构总结

上面讲述了在网站业务发展的不同阶段,会面临不同的问题,针对不同的问题,会选择不同的架构。大型网站架构就是在不同阶段时解决不同问题的过程中慢慢演进来的。

*后几句话,送给有缘的你:

  1. 一切以解决业务目标为首要任务;
  2. 没有以业务为目标的任何架构、技术,都是毫无意义的耍流氓;
  3. 再牛逼的架构、再牛逼的技术,不能够解决业务的问题,你也只能算是会架构、会技术的工匠,而不能算是真正意义上的架构师;
  4. 业务成就了技术,平台成就了人,事业成就了人,而不是相反;

本文思维导图,如下:

本文思维导图

转载于:https://www.cnblogs.com/ylcms/p/7261700.html

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

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

相关文章

最新软件外包网站平台排行榜

随着互联网的的快速发展,传统的中小型企业纷纷加入了这个潮流大军中,当然在这个大数据的时代,能用互联网就是一个出路。但是中小型企业不是说走上互联网就能跟上的,企业都需要有这方面专业领域的人来进行做市场和技术指导。避免企…

zblog纯静态化插件 html静态文件生成_搭建博客、自己的小窝?快来看看这些开源静态网站生成器...

作者:HelloGitHub-ChungZH相信很多人都想要搭建一个自己的博客或是给项目做文档网站。本文将要推荐的静态网站生成器(Static Site Generator, SSG),它做的事情就是把你的文档、内容(通常为 Markdown 文件)生成可发布成网站(html)的工具,这样你…

divcss布局模板代码_(带手机版数据同步)天花板循环扇类网站织梦模板 小家电电器类网站源码下载...

模板名称:(带手机版数据同步)天花板循环扇类网站织梦模板 小家电电器类网站源码下载本套织梦模板采用织梦最新内核开发的模板,这款模板使用范围广,不仅仅局限于一类型的企业,天花板循环扇、家电电器网站源码的网站都可以用该模板。…

备了安的网站换服务器,tipask网站更换服务器后 问答系统重新安装注意要点 - 小俊学习网...

记录一次更换服务器后的tipask程序的更换服务器,在原有的基础上安装网站程序。大致经历以下步骤。1、服务器操作系统安装,选择CENTOS。2、服务器的PHP环境搭建,选择lnmp。3、绑定网站根目录4、还原网站备份包和数据库问答系统问题解决如下:1、…

post python爬虫_400集大型Python学习视频,免费分享,用Python登录24个主流网站

2020最新Python零基础到精通资料教材,Python基础入门,Python小白书籍,Python学习路线,Python进阶,Python高级,Python爬虫等等一系列关于Python的文档和视频(包括hadoop,fink&#xf…

linux对比win10对硬件的要求,硬件兼容性 - Ubuntu 12.10击败Windows 8的十个理由_Linux新闻_Linux公社-Linux系统门户网站...

4. 硬件兼容性为了在自己的PC机上顺利运行Windows 8,大家需要一块主频至少为1GHz的处理器且必须支持PAE、NX以及SSE2。另外,大家还需要至少1GB(32位版本)或2GB内存(64位版本)以及16GB(32位版本)或20GB(62位版本)的硬盘存储空间。根据微软的说法&#xff…

服务器网页打开是什么原因,网站打开速度有哪些原因?

原标题:网站打开速度有哪些原因?假如企业的网站突然间出现了打开速度慢的情况,那么就要开始仔细检测了。经过专业的检测之后,排除那些临时网络波动等情况,如果还是打开速度一直很慢,那么就要确诊原因&#…

新建网站如何跟服务器连接,flashfxp怎么用(新建添加网站[站点]连接)

flashfxp 是一款 ftp 软件,实现本地计算机到远程服务器的文件上传和下载功能。做过网站的用户相信大多数都用过 ftp,因为架设网站前需要把所网站文件上传到购买的虚拟空间(远程服务器),常用的上传工具就 flashfxp。在用 flashfxp 上传网站文件…

网站证书ssl

为什么80%的码农都做不了架构师?>>> 方法一: https://www.sslforfree.com/ #DNS验证下载ssl证书 cat certificate.crt、ca_bundle.crt >> server.crt vi server.crt 没有换行符,第二个文件需要在第一个文件的下一行粘贴&am…

php可行性分析,福州美食网站分析与设计(PHP,MySQL)(含录像)

福州美食网站分析与设计(PHP,MySQL)(含录像)(任务书,毕业论文8000字,程序代码,MySQL数据库)摘要当代中国饮食文化研究热最初肇始于“烹饪研究”,这种“研究”是以20世纪70年代中叶以后开始的餐饮业流行和技工学校需要的美食的编写为前奏。20世纪80年代初以后&#x…

大型系统的java中间件实践_大型网站系统与Java中间件实践

中间件--软件胶水,起到桥梁的作用volatile读:不会有线程的本地副本,只会从主存读取写:只有一份主存的数据synchronized读:保证本地副本与主存的同步写:把当前线程修改的变量的本地副本同步给主存&#xff0…

二进制证书如何显示pem格式_在阿里云购买SSL证书,让网站支持HTTPS

SSL简介以下内容引用自:百度百科:SSLSSLSSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对…

如何解决网站首页老被黑客篡改并被百度安全中心拦截提示 该页面存在木马病毒的实战过程...

2018.6.19当天接到一位新客户反映自己的网站被黑了,网站首页也被黑客篡改了,网站首页被加了一些与网站不相符的内容与加密的代码,导致百度网址安全中心提醒您:该页面可能存在木马病毒!网站在百度的收录与快照也被劫持成什么世界杯投注&#x…

无法修改服务器名称_网站设计:WordPress网站搬家简要教程(修改)

一、背景1、我的axuretop.com(域名已经注销),是用的阿里云香港虚拟主机,访问速度太慢。使用阿里云主机管理控制台进行网站管理2、注册的jidong.tech(域名已经注销)是郑州景安网络备案,服务器是国内郑州的,访…

“双十一”、“双十二”大促期间,如何防止网站崩溃?

“双十一”、“双十二”期间是所有电商行业的流量高峰期,作为一个电商网站,如果不能保障流畅运行,将会对企业造成巨大的经济损失。回顾去年天猫“双十一”,当天日活跃用户到达峰值3.56亿,交易创建峰值32.5万笔/秒、支付…

基于RHEL6使用rsync构建镜像网站

概述1、rsync(Remote Sync远程同步)是一款开源的快速备份工具,可以在不同主机间镜像同步数据,支持本地复制,或与其他SSH、rsync主机同步,rsync应用广泛,大多数Linux都将其作为默认组件已安装。2…

百度网站优化:如何提高蜘蛛抓取量?

在SEO工作中,适当的增加百度蜘蛛对网站的抓取,有利于提升网站内容的收录量,从而进一步排名的提升。这是每个网站运营管理人员,必须要思考的问题,那么在提高网站百度蜘蛛抓取量之前,我们必须要考虑的一个问题…

查看网站服务器操作系统,查看网站的服务器操作系统

查看网站的服务器操作系统 内容精选换一换公网域名解析是基于Internet网络的域名解析过程,可以把人们常用的域名(如www.example.com)转换成用于计算机连接的IP地址(如1.2.3.4)。公网域名解析支持通过直接在浏览器中输入域名,访问网站或Web应用程序。云解…

使用Bootstrap 3开发响应式网站实践04,使用Panels展示内容

在Bootstrap页面中&#xff0c;通常用Panels来展示主要功能的内容。该部分Html为&#xff1a;<div class"row" id"featureHeading"><div class"col-md-12"><h2>更多信息</h2><p class"lead">广州恒大淘…

TLS 1.2协议现漏洞,近3000网站或受影响

雷锋网2月12日消息&#xff0c;Citrix发现SSL 3.0协议的后续版本TLS 1.2协议存在漏洞&#xff0c;该漏洞允许攻击者滥用Citrix的交付控制器(ADC)网络设备来解密TLS流量。 Tripwire漏洞挖掘研究小组的计算机安全研究员克雷格•杨(Craig Yang)称&#xff1a;“TLS 1.2存在漏洞的…