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

💓博主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.rhkb.cn/news/298843.html

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

相关文章

uniapp:小程序腾讯地图程序文件qqmap-wx-jssdk.js 文件一直找不到无法导入

先看问题: 在使用腾讯地图api时无法导入到qqmap-wx-jssdk.js文件 解决方法:1、打开qqmap-wx-jssdk.js最后一行 然后导入:这里是我的路径位置,可以根据自己的路径位置进行更改导入 最后在生命周期函数中输出: 运行效果…

159 Linux C++ 通讯架构实战14,epoll 函数代码实战

ngx_epoll_init函数的调用 //(3.2)ngx_epoll_init函数的调用(要在子进程中执行) //四章,四节 project1.cpp:nginx中创建worker子进程; //nginx中创建worker子进程 //官方nginx ,一个…

为“自研”的KV数据库编写JDBC驱动

一觉醒来,受到梦的启发,自研了一套K/V数据库系统,因为"客户"一直催促我提供数据库的JDBC驱动,无奈之下,只好花费一个上午的时间为用户编写一个。 我们知道,JDBC只定义一系列的接口, 具体的实现需…

python 利用xpath 爬取一周天气

需求: 爬取 中国天气网指定城市一周的天气,以天津为例 实现: 1,先找到一周的数据位置。 divs html.xpath("//div[classhanml]") 2,再遍历每天。 trs div.xpath("./div/div[2]/table//tr[position…

springboot实战---5.最简单最高效的后台管理系统开发

🎈个人主页:靓仔很忙i 💻B 站主页:👉B站👈 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:SpringBoot 🤝希望本文对您有所裨益,如有不足之处&…

JS详解-设计模式

工厂模式: 单例模式: // 1、定义一个类class SingleTon{// 2、添加私有静态属性static #instance// 3、添加静态方法static getInstance(){// 4、判断实例是否存在if(!this.#instance){// 5、实例不存在,创建实例this.#instance new Single…

蓝桥备赛——前缀和

题干 我的 Code(50%样例) 对于上述题目的思路,我的想法是使用两个list存储对应的索引,一个存储头索引,一个存储结束索引。 然后使用全排列,计算所有列表元素之间的索引差,大于等于k的作为符合条件的,使用count计数器加一。 k=int(input()) s,c1,c2=map(str,input()…

FebHost:什么是土耳其.TR域名?

当前互联网高速发展,一个国家的顶级域名已成为其网络形象的重要标识。近期,土耳其国家顶级域名”.TR”引起了广泛关注,成为业界热议的话题。 作为代表土耳其共和国的国家顶级域名(ccTLD),.TR域名于1991年首次引入,由土耳其科技和信息技术部负责管理。除了常见的”.com.tr”、”…

服务器硬件构成与性能要点:CPU、内存、硬盘、RAID、网络接口卡等关键组件的基础知识总结

文章目录 服务器硬件基础知识CPU(中央处理器)内存(RAM)硬盘RAID(磁盘阵列)网络接口卡(NIC)电源散热器主板显卡光驱 服务器硬件基础知识 服务器是一种高性能计算机,用于在…

深度学习十大算法之深度Q网络(DQN)

一、简介 深度Q网络(DQN)是一种结合了深度学习和强化学习的算法,它在近年来成为了人工智能领域的一个热点。DQN首次被引入是在2013年,由DeepMind的研究人员开发。它标志着深度学习技术在解决高维度决策问题上的一大突破。 DQN的…

Netty源码分析一启动流程剖析

我们知道Netty框架是基于NIO网络编程模型实现的,本篇文章就基于NIO的启动流程来剖析Netty启动流程的源码 NIO启动流程 首先我们先来看一下NIO的启动流程 //1 netty 中使用 NioEventLoopGroup (简称 nio boss 线程)来封装线程和 selector S…

[C++初阶]初识C++(二)

建议先看完上篇:[C初阶]初识C(一)—————命名空间和缺省函数-CSDN博客 本篇部分代码和文案来源:百度文库,知乎,比特就业课 1.函数重载 自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真…

Linux目录结构知识

一、认识Linux目录 1) Linux目录结构知识 1) win: 目录顶点是盘符 C/D/E 。所有的目录结构都在不同的盘符下面,不同的盘之间不能沟通的。 2) Linux: 目录顶点是 / ,称为根。所有的目录结构都在根下面,他的目录之间都…

基于SpringBoot Vue养老院管理

一、📝功能介绍 基于SpringBoot Vue养老院管理 角色:管理员、企业、老人子女、老人 管理员:管理员登录进入养老院管理系统可以对系统首页、个人中心、服务人员管理、老人管理、老人子女管理、老人档案管理、社区活动管理、活动记录管理、床…

LogicFlow 在HTML中的引入与使用

LogicFlow 在HTML中的引入与使用 LogicFlow的引入与使用,相较于BPMNJS相对容易一些,更加灵活一些,但是扩展代码可能写得更多一些。 示例展示 使用方式 这个的使用方式就简单很多了,利用cdn把js下载下来,引入到HTML文…

【Linux】HTTP协议

HTTP协议 1.认识URL2.urlencode和urldecode3.HTTP协议格式4.HTTP协议基本工作流程5.HTTP的方法6.HTTP的状态码7.HTTP常见Header8.长连接9.cookie&&session会话保持10.基本工具(postman,fiddler) 喜欢的点赞,收藏,关注一下把! 目前基本…

JDK安全剖析之安全处理入门

0.前言 Java 安全包括大量 API、工具以及常用安全算法、机制和协议的实现。Java 安全 API 涵盖了广泛的领域,包括加密、公钥基础设施、安全通信、身份验证和访问控制。Java 安全技术为开发人员提供了编写应用程序的全面安全框架,还为用户或管理员提供了…

相对论中关于光速不变理解的补充

近几个月在物理直播间聊爱因斯坦相对论,发现好多人在理解爱因斯坦相对论关于基本假设,普遍认为光速是不变的,质能方程 中光速的光速不变的,在这里我对这个假设需要做一个补充,他是基于质能方程将光速C 在真是光速变化曲…

平衡二叉树,红黑树,B树和B+树的区别及其应用场景

平衡二叉树 基础数据结构左右平衡高度差大于1会自旋每个节点记录一个数据 平衡二叉树(AVL) AVL树全称G.M. Adelson-Velsky和E.M. Landis,这是两个人的人名。 平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree…

计算机视觉新巅峰,微软牛津联合提出MVSplat登顶3D重建

开篇:探索稀疏多视图图像的3D场景重建与新视角合成的挑战 3D场景重建和新视角合成是计算机视觉领域的一项基础挑战,尤其是当输入图像非常稀疏(例如,只有两张)时。尽管利用神经场景表示,例如场景表示网络&a…