那么这里博主先安利一些干货满满的专栏了!
首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。
然后就是博主最近最花时间的一个专栏《Docker从认识到实践再到底层原理》希望大家多多关注!
博客参考:比特就业课
所有的服务都部署到一台服务器上。
简单来说,就是全部都放在一台服务器上。
在互联网初期,使用量有限,一个单机服务器架构就能够满足要求。
相关软件:
Web 服务器软件: Tomcat、Netty、Nginx、Apache 等
数据库软件:MySQL、Oracle、PostgreSQL、SQL Server 等
优势在于配置简便、开销较小,但劣势则在于会面临明显的性能限制,数据库和应用程序会相互争夺资源。
很简单,就是应用服务和数据库服务使用不同的服务器。
注意,数据库和应用之间多了一条线,这条线就是网络。
由于资源竞争激烈,单机情况下可能导致网站响应速度减缓。
DNS返回的是应用服务器的ip,然后应用服务器再去数据库服务里面去找。
优点:经济可控性较高,性能比单机模式好,在数据库独立隔离方面表现出色,应用故障不会对数据库造成影响,还具备一定的容错能力。
缺点:硬件投入增加,性能上存在限制,难以应对大规模高并发需求。
引入了负载均衡,应用是以集群方式运作的。
一台应用服务器,不能扛得住高并发,高并发的话容易崩。
如示意图所展示的情景,采用多个应用服务器的布局方案,以减轻高并发压力。
**负载均衡的意义:**为了解决将用户请求分配到哪个应用服务器的问题,需要引入专用的系统组件来进行流量分发。在实际应用中,负载均衡的范围不仅仅限于应用层,还可以涵盖其他网络层。
同时,负载均衡算法有多种类型,以下是几种常见的简要介绍:
这种布局的好处在于可以有效地应对高并发情况,确保系统的稳定性和响应速度。
DNS如何做负载均衡呢?
我们知道DNS可以通过域名返回ip地址。
比如我要访问www.taobao.com, 第一次我返回ip1,表示第一个LVS,第二次返回ip2,表示第二个LVS… 以此类推。DNS也可以完成负载均衡的工作了。
优势:
劣势:
通过将数据库的读写任务分配到不同的节点上,我们建立了数据库服务器的主从集群。在这个集群中,通常会配置一个主节点和一个或多个从节点,也可以是一个主节点和多个从节点。在这种架构中,主数据库负责处理写操作,而从数据库则专注于处理读操作。
数据库成为瓶颈的情况下,特别是在互联网应用中,读操作通常明显多于写操作。这种情况下,数据库因为处理大量读请求而承受巨大压力。因此,我们可以将读写操作分离,以应对这一挑战。
如果是写操作,就访问主数据库,然后更改完之后,将数据同步到所有的从数据库中。
如果是读操作,就访问从数据库即可。
这种中间组件常见的有:MyCat、TDDL、Amoeba、Cobar 等
优点:
缺点:
引入缓存,实行冷热分离,将热点数据放到缓存中快速响应
海量的请求导致数据库负载过高,站点响应再度变慢。
热点数据直接找缓存,不要去找数据库了。
写入的时候缓存和数据库都要写入!而且只能保证同时成功或者同时失败(软件可以做到)
读取的时候,如果缓存中有就直接在缓存中读,如果没有,就去数据库读。
优势:
缺陷:
数据库的数据被拆分,数据库数据分布式存储,分布式处理,分布式查询,也可以理解成分布式数据库架构。
上面提到的单机的写库会逐渐达到性能瓶颈,需要拆分数据库,数据表的数据量太大,处理压力太大,需要进行分表,为降低运维难度,业界逐渐研发了分布式数据库,库表天然支持分布式。
如图所示。
优点:
缺点:
微服务是一种架构风格,按照业务板块来划分应用代码,使单个应用的职责更加清晰,相互之间可以做到独立升级迭代。
优势:
劣势:
借助容器化技术(如docker)将服务/应用打包成镜像,通过容器编排工具(如k8s)来动态分发和部署镜像。服务以容器化方式运行。
优势:
劣势: