互联网系统架构的演进过程

随着网站访问量的增长,网站架构从单服务器逐步演进至分布式集群,包括应用与数据服务分离、缓存使用、数据库读写分离、CDN加速、分布式文件与数据库系统、NoSql与搜索引擎、消息队列、服务化等,以提升性能与用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以一个网站为例:

网站一开始就是大型的吗?

我们应该一开始就设计一个大型网站吗?

①不知名小网站 -> 低访问量,一台服务器满足需求。

快速推出这个小网站,让人们认识到这个很有价值。

最快速的技术LAMP:Linux+Apache+MySQL+PHP

②随着网站的发展,越来越多的用户访问,面临问题:

性能越来越差

越来越多的数据导致存储空间不足

选择解决方式:应用服务与数据服务分离

原来一台服务器做全部事情,现在三台服务器分别做不同模块的事。

能带来什么好处嘞?

服务器对应的硬件需求不同:

应用服务器:更快更强大的cup(处理大量的业务逻辑)

数据库服务器:需要更快的硬盘和更大的内存(快速磁盘检索和数据缓存)

文件服务器:需要更大的硬盘(存储大量用户上传的文件)

③随着用户逐渐增多,网站再次面临挑战:

数据库压力太大导致访问延迟,进而影响整个网站的性能,用户体验受到影响

解决办法:使用缓存改善性能

缓存:

本地缓存:速度快、只能缓存少量数据、和应用程序争内存,从而降低应用程序性能

远程分布式缓存:按需去取、访问需要一次网络连接,需要用时间代价换得更大空间

常用缓存组件:

memcache

redis

④随着用户逐渐增多,单一应用服务器面临新的问题:

能处理的请求连接有限,网站访问高峰期,应用服务器成为整个网站的瓶颈。

tomcat7 可以做到700-800并发量,tomcat8以上可以做到3-4千并发。再往上就是瓶颈了。

在网站访问高峰期会出现拒绝服务,访问时间过长等问题。

解决方法:

应用服务器集群:改善网站的并发处理能力

这就是分流,相当于多个人工作干一件事,提高并发访问速度。

为什么不用更强的服务器呢?

再强的服务器越往上也是有瓶颈的,如果使用集群的方式,可以按需扩展,可以不断增加集群服务器数量,用廉价的服务器来组成集群,成本大大减少,按需扩展可以慢慢的投入其中,不需要一下投入很多。

负载均衡的实现方式有哪些?

 现在需要负载均衡调度服务器来分发任务,则要求该服务器并发处理能力一定要强。

三种方式:

Nginx:性能优异,消耗的资源少,中小型公司一般采用它。

LVS:并发量超过Nginx之后,使用它

F5:中小型很少使用,大公司常用,它的能力优于软件方式,需要花钱

DNS负载均衡:利用域名解析过程,我的域名对应多个ip地址,当机器发送域名到域名解析器上,域名解析的时候,可以返回不同的ip地址给你,实现负载均衡。

⑤使用缓存后,虽然大大减轻了数据库的读压力,但是面临新的问题:

有一部分读操作(缓存访问不命中,缓存过期)和全部的写操作需要访问数据库,当用户达到一定规模后,数据库里因为负载压力过高成为整个系统的瓶颈。

常用解决方式:

数据库读写分离

数据库集群方式:

数据访问模块

应用程序不关心它主从数据库,照常编写代码,让数据访问模块来处理对数据库的读和写。

⑥用户规模越来越大,发布地域越来越广,地域网络环境差别很大,面临问题:

如何保证用户的访问体验,不至于因访问慢而流失客户?

不同地区的网络状态不同。

解决办法:

反向代理和CDN加速

CDN:内容分发网络,必须部署在运营商的服务器里。适用于静态资源,把静态资源提前缓存到各地运营商服务器里,当用户通过网络发送请求时,请求一定会走到运营商服务器中 ,进来后由CDN服务器来路由分发,如果该CDN服务器缓存上有,直接返回资源,不用去其他地方找了。

反向代理:

部署在我们的数据服务中心的,最外层的。反向代理和负载均衡可能是同一个

他们的方法就是提前缓存,避免访问到我们的应用服务器上。减轻我们的应用服务器负担。

反向代理和CDN加速带来的好处:

①加快用户访问的响应速度

②减轻后端服务器的负载压力

一个网页 包含的资源文件很多,样式文件、js等。这些都是可以把他们提前缓存起来的。

⑦发展问题: 

单文件服务器、单数据库服务器,面临问题:

存不下日益 增长的数据

分布式文件系统和分布式数据库系统(分库分表)

分布式文件系统 是一个集群,可以按需扩展,一个两个甚至更多。每个读取分离服务器都是相同的copy数据,数据量太大 就存不下来。

接下来就是分库分表,分布式数据库系统服务器

分布式系统怎么做 ?

分库分表怎么做?

减轻数据库读写压力。

 

⑧随着业务的发展,数据储存需求和检索需求越来越复杂,面临问题:

存储字段差异较大,骷髅表。

复杂的文本检索

模糊查询,数据量大,性能很差。

使用NoSql和搜索引擎

分布式搜索引擎:解决存储多样化,各种模式。

搜索引擎:

搜索引擎:

lunce:apache开源的搜索引擎开发工具包,有搜索需要的项目,可以集成到自己的系统中,就是一个jar包,通过api来完成数据的索引与搜索。

solr:就是lunce下的子项目,它是一个开发好的搜索平台,人家做好的搜索系统,直接拿下来,部署就能用。搜索引擎基本功能都有。

elastisearch:也是基于lunce开发的,现成的、直接拿来就能用的,搜索平台。api差不多。

NoSql:

mongodb:一定要学好,

搜索和nosql,把elastisearch学好。提高身价。

⑨网站越来越好,业务不断扩大,越来越复杂。面临问题:

应用程序将变得务必庞大,迭代周期越来越快,牵一发而动全身, 怎么应对快速的业务发展需要?

消息队列服务器:来做解耦操作,应用服务器之间的通信服务

消息队列MQ

⑩业务规模不断增大,应用拆分越来越小,越来越多,面临问题:

应用间的关系越来越复杂,应用中存在大量相同的业务操作。

后端的数据库要被成千上万台应用服务器连接,数据库连接资源部不足。

分布式服务(服务化)

分布式服务器把公用模块独立出来,由它来连接数据库服务器。

如何做服务化?

如何做配置中心?

服务化的两种架构方式:SOA、微服务

齿轮代表一个服务提供者或者是服务的调用者,SOA关键是Enterprise Services Bus—ESB企业级消息总线

微服务架构没有总线,你需要调用谁,就和谁连接。彼此之间可以互连

SOA缺点是,都得通过总线服务中心点来处理,好处 可以统一管理。

微服务:想比较与SOA好处是没有中心点,服务之间可以彼此互调,治理过程有点难度

到这里已经是完全的分布式集群架构。 

11、再往后需要什么呢?

数据挖掘、分析、推荐等业务需求,庞大系统的监控、问题分析等需求。

 

 

12、架构设计思想总结

1、分而治之

2、随网站所需灵活应对

3、业务发展驱动技术发展,技术发展反哺业务

4、软件系统的价值在于它能为用户提供什么价值,在于网站能做什么,而不在于它是怎么做的

 

 

 

 

 

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值