1. 前言
这不是前几天刚拿到鹅厂的offer嘛,由于想表达我对工作的热情,于是我主动向我上司请缨想要提前了解一下公司的业务,不问不知道,一问吓一跳,我上司也是给我抛出了一堆概念,包括RPC,gRPC,k8s,docker还有open telemetry,我心里一惊,哥们我是听都没听过啊,不知从何下手,感觉以目前的知识储备直接去学习这些东西,属于是不自量力了,于是这几天我对前面的铺垫知识进行了恶补
本章重点:
本篇文章着重讲解八大架构的演化过程,以及它们的优缺点,并且会在其中介绍负载均衡,redis,docker,以及k8s它们的定位,最后会讲解什么是分布式系统,为后面的gRPC学习打下基础
2. 架构简介&单机架构
首先第一个问题,什么是架构?
为什么要有它?
架构是指系统或应用程序的整体结构或设计,包括不同组件之间的关系、功能模块的划分、数据流程、通信协议等方面。架构设计旨在确保系统具有良好的可扩展性、可维护性、安全性和性能。在软件开发中,架构设计是非常重要的步骤,它直接影响到系统的质量和效率
现在来了解一下最简单的架构:
单机架构
即应用服务和数据库服务都在一台服务器的架构
它属于最早期,最简单的架构
现在实战中基本已经不用了
可以适合初学者来写demo
由于单机架构的缺点十分致命,所以后来又出现了许多架构,而新出现的架构又有自己的缺陷,所以技术就不断的更新迭代!
3. 应用数据分离架构&集群架构
由于单机架构的缺陷非常致命
所以将应用和数据进行分离十分重要
于是衍生出了 应用数据分离架构
一些小公司或小网站,它的并发量不大,并且预算也有限,于是选择了将应用和数据分离的做法,可以最小代价的提升系统的承载能力
显而易见,上面的架构对于少量访问量来说,是可取的,但是并发量一旦起来,这个服务器必会崩溃!所以架构又向后演进了一级
应用服务集群架构
即我无法承担大并发量,就叫上我的兄弟一起
什么是负载均衡?
一个应用对应一个服务器,而集群架构会有多个应用,即多个服务器一起运行,那么当一个请求到来时,我怎么知道哪个服务器正在运行?哪个服务器处于空闲?甚至是哪个服务器接受的任务少,就用谁这种问题,正所谓没有什么问题是加一层软件层解决不了的,所以负载均衡的作用就是一个决策层
程序员的两句真言:
- 我自己做不到,那就叫上我的兄弟一起抗
- 没有什么是加一层软件层做不到的
同理,如果一个负载均衡(比如nginx,LVS等)不足以承受百万级甚至是亿级的并发请求,那么就多用几个负载均衡,或者使用并发性更好的负载均衡
4. 读写分离&冷热分离架构
对于集群架构而言,虽然说确实解决了应用层的并发问题,但是现在新的问题出现在了数据库服务,一旦上层频繁访问数据库(读或写)就会导致整个服务变得很慢,并且一般情况下,对于服务器资源都是读多而写少,所以进化出了新的架构
读写分离架构
即将数据库的读和写放在不同服务器
将数据服务一分为二后
会出现一个主服务器和从服务器
主服务器负责写入,而从服务器负责简单读取
还是程序员两句真言,应用并不知道用户要读还是要写,所以在应用和数据间加一层软件层(例如mycat)来解决这个问题,所以实际上读写分离架构是这样的
虽然读写分离架构确实能解决数据库承载压力大的问题,但是一旦某个数据频繁的被用户读取,那么这个架构也会导致数据库的负载很高,所以推出了新的架构
冷热分离架构
即把热点数据放在缓存中
请求到来时直接去缓存中取,速度很快
把冷数据继续放在数据库磁盘
常见的缓存软件有大家熟知的redis,冷热分离架构虽然说会进一步增加服务器的成本,但是确实突破了之前的瓶颈
5. 垂直分库架构&微服务架构
由于应用层可以通过不断喊上兄弟来一起抗,所以到目前为止,整个服务的效率瓶颈都在数据库方面,而垂直分库结构就是将一个数据库分为多个库甚至多个表
分库分表:
垂直分库架构,又叫分布式数据库架构
到底什么是分布式?
系统中的多个模块被部署于不同服务器之上,即可以将该系统称为分布式系统。如 Web 服务器与数据库分别工作在不同的服务器上,或者多台 Web 服务器被分别部署在不同服务器上。生活例子类比:为了更好的满足现实需要,一个在同一个办公场地的工作小组被分散到多个城市的不同工作场地中进行远程配合工作完成目标。跨主机之间的模块之间的通信基本要借助网络支撑完成
并且进行了分库分表后,前面的冷热分离,以及读写分离也能套用在这个架构中
垂直分库架构的缺陷页十分明显,虽然数据库现在可无限拓展,但是代码的运维成本太高了,修改一行代码就需要整体将服务重新发布,于是又有新的架构来代替它
微服务架构
即按照业务板块来划分业务代码
使之相互之间可独立进行更新迭代
学习路线:
这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!