【鹅厂摸鱼日记(一)】(工作篇)认识八大技术架构

💓博主CSDN主页:杭电码农-NEO💓

⏩专栏分类:重生之我在鹅厂摸鱼⏪

🚚代码仓库:NEO的学习日记🚚

🌹关注我🫵带你学习更多知识
  🔝🔝


在这里插入图片描述


认识八大架构

  • 1. 前言
  • 2. 架构简介&单机架构
  • 3. 应用数据分离架构&集群架构
  • 4. 读写分离&冷热分离架构
  • 5. 垂直分库架构&微服务架构
  • 6. 容器编排架构&互联网实战
  • 7. 总结

1. 前言

这不是前几天刚拿到鹅厂的offer嘛,由于想表达我对工作的热情,于是我主动向我上司请缨想要提前了解一下公司的业务,不问不知道,一问吓一跳,我上司也是给我抛出了一堆概念,包括RPC,gRPC,k8s,docker还有open telemetry,我心里一惊,哥们我是听都没听过啊,不知从何下手,感觉以目前的知识储备直接去学习这些东西,属于是不自量力了,于是这几天我对前面的铺垫知识进行了恶补

在这里插入图片描述

本章重点:

本篇文章着重讲解八大架构的演化过程,以及它们的优缺点,并且会在其中介绍负载均衡,redis,docker,以及k8s它们的定位,最后会讲解什么是分布式系统,为后面的gRPC学习打下基础


2. 架构简介&单机架构

首先第一个问题,什么是架构?
为什么要有它?

架构是指系统或应用程序的整体结构或设计,包括不同组件之间的关系、功能模块的划分、数据流程、通信协议等方面。架构设计旨在确保系统具有良好的可扩展性、可维护性、安全性和性能。在软件开发中,架构设计是非常重要的步骤,它直接影响到系统的质量和效率

现在来了解一下最简单的架构:

单机架构
即应用服务和数据库服务都在一台服务器的架构

在这里插入图片描述

它属于最早期,最简单的架构
现在实战中基本已经不用了
可以适合初学者来写demo

在这里插入图片描述

由于单机架构的缺点十分致命,所以后来又出现了许多架构,而新出现的架构又有自己的缺陷,所以技术就不断的更新迭代!


3. 应用数据分离架构&集群架构

由于单机架构的缺陷非常致命
所以将应用和数据进行分离十分重要
于是衍生出了 应用数据分离架构

在这里插入图片描述

一些小公司或小网站,它的并发量不大,并且预算也有限,于是选择了将应用和数据分离的做法,可以最小代价的提升系统的承载能力

在这里插入图片描述


显而易见,上面的架构对于少量访问量来说,是可取的,但是并发量一旦起来,这个服务器必会崩溃!所以架构又向后演进了一级

应用服务集群架构
即我无法承担大并发量,就叫上我的兄弟一起

在这里插入图片描述
什么是负载均衡?

一个应用对应一个服务器,而集群架构会有多个应用,即多个服务器一起运行,那么当一个请求到来时,我怎么知道哪个服务器正在运行?哪个服务器处于空闲?甚至是哪个服务器接受的任务少,就用谁这种问题,正所谓没有什么问题是加一层软件层解决不了的,所以负载均衡的作用就是一个决策层

程序员的两句真言:

  1. 我自己做不到,那就叫上我的兄弟一起抗
  2. 没有什么是加一层软件层做不到的

同理,如果一个负载均衡(比如nginx,LVS等)不足以承受百万级甚至是亿级的并发请求,那么就多用几个负载均衡,或者使用并发性更好的负载均衡


4. 读写分离&冷热分离架构

对于集群架构而言,虽然说确实解决了应用层的并发问题,但是现在新的问题出现在了数据库服务,一旦上层频繁访问数据库(读或写)就会导致整个服务变得很慢,并且一般情况下,对于服务器资源都是读多而写少,所以进化出了新的架构

读写分离架构
即将数据库的读和写放在不同服务器

在这里插入图片描述
将数据服务一分为二后
会出现一个主服务器和从服务器
主服务器负责写入,而从服务器负责简单读取

在这里插入图片描述

还是程序员两句真言,应用并不知道用户要读还是要写,所以在应用和数据间加一层软件层(例如mycat)来解决这个问题,所以实际上读写分离架构是这样的

在这里插入图片描述


虽然读写分离架构确实能解决数据库承载压力大的问题,但是一旦某个数据频繁的被用户读取,那么这个架构也会导致数据库的负载很高,所以推出了新的架构

冷热分离架构
即把热点数据放在缓存中
请求到来时直接去缓存中取,速度很快
把冷数据继续放在数据库磁盘

在这里插入图片描述

常见的缓存软件有大家熟知的redis,冷热分离架构虽然说会进一步增加服务器的成本,但是确实突破了之前的瓶颈

在这里插入图片描述


5. 垂直分库架构&微服务架构

由于应用层可以通过不断喊上兄弟来一起抗,所以到目前为止,整个服务的效率瓶颈都在数据库方面,而垂直分库结构就是将一个数据库分为多个库甚至多个表

分库分表:

在这里插入图片描述
垂直分库架构,又叫分布式数据库架构
到底什么是分布式?

系统中的多个模块被部署于不同服务器之上,即可以将该系统称为分布式系统。如 Web 服务器与数据库分别工作在不同的服务器上,或者多台 Web 服务器被分别部署在不同服务器上。生活例子类比:为了更好的满足现实需要,一个在同一个办公场地的工作小组被分散到多个城市的不同工作场地中进行远程配合工作完成目标。跨主机之间的模块之间的通信基本要借助网络支撑完成

在这里插入图片描述

并且进行了分库分表后,前面的冷热分离,以及读写分离也能套用在这个架构中

在这里插入图片描述


垂直分库架构的缺陷页十分明显,虽然数据库现在可无限拓展,但是代码的运维成本太高了,修改一行代码就需要整体将服务重新发布,于是又有新的架构来代替它

微服务架构
即按照业务板块来划分业务代码
使之相互之间可独立进行更新迭代

在这里插入图片描述
微服务架构和前面的结构的最大的区别就是,前面的架构中,每个服务器都对应用户,商品,交易三个整体的应用服务,而微服务架构则是将每个用户当作一个微服务放在一个服务器中,用户和商品要进行交互就是服务器之间进行交互

在这里插入图片描述


6. 容器编排架构&互联网实战

容器编排架构是目前比较成熟的架构,由于微服务拆分巨细,服务多部署时工作量大,并且容易出错,所以容器编排架构本质就是借助容器化技术(比如docker)将应用或服务打包成为镜像,然后通过容器编排工具(比如k8s)来快速的发布和部署镜像

在这里插入图片描述

可以将这个架构类比于发快递,你分别向北京和上海寄一件衣服一件裤子一双鞋子,一共是六件物品,那么在寄东西前你肯定需要将这六件物品两两分组,每组都有衣服裤子鞋子,然后再用顺丰发送到不同的地点,这里的分组就类似于docker,而发送快递就类似于k8s

在这里插入图片描述

一台服务器可以部署多个容器,而这些容器可相互交流数据,并且又相互不影响

在这里插入图片描述


在实际的互联网实战中,情况可能比我们学习的架构要复杂的多,但是万变不离其宗,掌握了基本的架构原理后,它再怎么拓展应用,再怎样细分数据库服务,我们都能快速掌握它的核心,下面是一些公司常用的服务,大家可以了解一下:

在这里插入图片描述

显而易见,统一数据服务层出现的原因就是因为下层的数据库服务很多,并且每个服务都有自己的API接口,要是程序员自己要去了解所有的数据库服务就十分的麻烦,所以增加了一层来辅助完成这一个工作


7. 总结

其实我发现,做C/C++开发的话,并不是单纯的了解语言和操作系统就可以稳住脚跟,掌握不同的架构思想以及像redis,docker,k8s,protobuf这种工具也十分重要,毕竟只是单纯写代码完成任务的时代早就过去了,公司的整个架构和业务才是重心啊


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

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

相关文章

golang和Java的简单介绍和对比

一、golang 1、Golang简介 Golang,也称为Go,是由Google公司在2009年推出的开源编程语言,由罗伯特格瑞史莫(Rob Pike)、肯汤普逊(Ken Thompson)、罗勃派克(Robert Griesemer)等人设计。Go语言的目标是在保持简单高效的编程模型的同时&#xf…

435.无重叠区间

// 定义一个名为Solution的类 class Solution {// 定义公共方法eraseOverlapIntervals,输入为二维整数数组intervals,返回值类型为整数public int eraseOverlapIntervals(int[][] intervals) {// 首先,按照区间的起始位置对区间进行升序排序A…

Hive-事务

一、什么是ACID?为什么要使用它 ACID代表数据库事务的四个特征: 1、原子性(一个操作要么完全成功,要么失败,它不会留下部分数据)、 2、一致性(一旦应用程序执行了一个操作,该操作的…

基于Springboot + vue实现的智能菜谱系统设计与实现+毕业论文+搭建视频+答辩PPT(包运行调试)

介绍 系统主要包括两个角色:用户、管理员 用户:登录、注册、查询公告信息、菜谱信息推荐、菜谱信息详情、菜谱评论、菜谱收藏、留言信息、个人中心、我的收藏等功能 管理员:登录、管理员主页、个人中心、用户信息管理、菜式类型管理、菜谱信…

Vue项目引入字体文件无效

这是原来的,没有生效 font-face {font-family: BebasNeue;src: url(./font/BebasNeue.otf);font-weight: normal;font-style: normal; }这是修改后的(多了个空格) font-face {font-family: Bebas Neue;src: url(./font/BebasNeue.otf);font-…

卫星导航低噪声放大器芯片(LNA)-AT2659

AT2659 是一款专门针对中国 BDS(北斗卫星导航系统),美国的 GPS,俄罗斯的 GLONASS 和欧盟的 GALILEO 导航系统应用而设计的高增益、低噪声系数射频放大器。 AT2659 具有 23dB 高增益和 0.71dB 的低噪声系数。芯片支持 1.4V 至 3.…

幕后匠心:配器师菲利波·兰迪与《熊出没·逆转时空》

《熊出没逆转时空》是一部上映于2024年大年初一的喜剧动画电影,讲述了光头强等主角穿越后面对时间规则,勇敢保护生态、拯救朋友的冒险故事。制作方华强方特(深圳)动漫有限公司,是一家集影视制作、动漫创作于一体的专业…

Windows安装EMBY服务端

官网下载Windows版的EMBY服务端 下载地址:Emby Server for Windows,可选择下面的压缩包 解压目录,放入程序文件夹中 下载插件 下载地址:HX共享文件索引 (jiawei.xin) 查看刚刚下载的EMBY服务端的版本,找到对应的目…

[蓝桥杯练习]通电

kruskal做法(加边) #include <bits/stdc.h> using namespace std; int x[10005],y[10005],z[10005];//存储i点的x与y坐标 int bcj[10005];//并查集 struct Edge{//边 int v1,v2; double w; }edge[2000005]; int cmp(Edge a, Edge b){return a.w < b.w;} int find(i…

ubuntu22.04@Jetson Orin Nano安装配置VNC服务端

ubuntu22.04Jetson Orin Nano安装&配置VNC服务端 1. 源由2. 环境3. VNC安装Step 1: update and install xserver-xorg-video-dummyStep 2: Create config for dummy virtual displayStep3: Add the following contents in xorg.conf.dummyStep 4: Update /etc/X11/xorg.con…

朗之万方程,机器学习与液体中的粒子运动

目录 一、说明二、朗之万方程的诞生2.1 牛顿力学2.2 流体中的随机运动 三、小质量物体布朗运动方程四、布朗运动的Python代码五、稳定性讨论5.1 波尔兹曼分布5.2 梯度下降算法 六、随机梯度下降&#xff08;SGD&#xff09;和小批量梯度下降七、机器学习与物理&#xff0c;作为…

如何在比特币上验证ZK Proofs

1. 引言 前序博客有&#xff1a; 基于BitVM的乐观 BTC bridgeBitVM&#xff1a;Bitcoin的链下合约Bitcoin Bridge&#xff1a;治愈还是诅咒&#xff1f;BitVM2&#xff1a;比特币上的无需许可验证以比特币脚本来实现SNARK VerifierClementine&#xff1a;Citrea的基于BitVM的…