初识-后端架构 | 青训营笔记

91 阅读6分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 13 天

下面相关内容仅供本人回顾使用。如有错误,烦请评论反馈,感激不尽!!!

什么是架构?用来干什么?

A:架构是非常重要的基石,其全称是软件架构

  • 是有关软件整体结构与组件的抽象描述
  • 用于指导软件系统各个方面的设计

单机架构

Q:举个例子呗?

A:软件系统一定是要对外提供服务的,单机架构就是最基本的架构。

Q:单机又是什么?

A:单机就是把所有需要的功能集成在一个进程里,并部署在一台机器上。

Q:哦,那我懂了,这种架构有什么优缺点吗?

A:问得好,单机服务的模式,除了简单之外没有任何优点,甚至运维的时候还需要停服,所以说这个模式只适合出现在项目的预研初创阶段,但凡业务有进一步发展的诉求就需要做结构迭代。

单体架构与垂直应用架构

Q:怎么样让架构更优秀呀?

A:把进程部署到多个机器上,并引入负载均衡层,经过垂直切分,就变成了单体架构

Q:等会儿等会儿,整不明白了,把进程部署到多个机器上,相当于是分治了吗?

A:你说的很对,就相当于切蛋糕,然后负载均衡层负责引导用户去吃哪块蛋糕。

Q:负载均衡层...?能不能整点接地气的名字?

A:负载均衡是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。说白了,可以理解成一个分配任务的leader。

Q:你这么说我就明白了,那垂直切分又是什么捏?

A:垂直切分是根据业务来拆分数据库,同一类业务的数据表拆分到一个独立的数据库,另一类的数据表拆分到其他数据库。垂直切分可以降低单节点数据库的负载。原来所有数据表都放在一个数据库节点上,无疑所有的读写请求也都发到这个MySQL上面,所以数据库的负载太高。如果把一个节点的数据库拆分成多个MySQL数据库,这样就可以有效的降低每个MySQL数据库的负载。

Q:写的真啰嗦,不过差不多看明白了,这玩意有什么缺点吗?

A:垂直切分不能解决的是缩表,比如说商品表无论划分给哪个数据库节点,商品表的记录还是那么多,不管你把数据库垂直拆分的有多细致,每个数据表里面的数据量是没有变化的。

Q:那垂直应用架构是什么?

A:在单体架构的基础上,进一步拆分,按应用拆分进程,就是垂直应用架构。优点是可以水平扩容,以及不停服运维,但是也有问题是职责太多,开发效率并不高,而且爆炸半径太大。

SOA 微服务与水平切分

Q:既然有垂直切分,那么是不是也有水平切分?

A:真聪明,不过我们先来了解一下什么是SOA (Service-Oriented Architecture),也就是面向服务的架构;

  1. 将应用的不同功能单元抽象为服务(服务是根据功能抽象出来的概念)
  2. 定义服务之间的通信标准(通信标准是服务之间通信的基石)

Q:真高级,那微服务又是什么?

A:微服务架构是SOA的去中心化演进方向,当然也有中心化的发展方向,但是太臃肿了,拓展性和普及性都不咋地。微服务架构的效果:

  1. 不同模块的RD可以专心于自己的业务逻辑了,开发迭代效率得到了显著提高
  2. 各个服务独立运维,变更操作的影响面可控,应用整体的稳定性得到了提高

Q:差不多明白了,有没有图示?

A:那我们就用课程里的一张图来解释吧:(水印是讲师PPT自带的)

image.png

Q:好好好,那水平切分是什么?

A:水平切分是按照某个字段的某种规则,把数据切分到多张数据表。一张数据表化整为零,拆分成多张数据表,这样就可以起到缩表的效果了。

A:总结一下,架构的演进如同做蛋糕(借用课件的比喻,笔者实在是想象力匮乏):

  • 需求量越来越大,终归要增加人手
  • 越做越复杂,终归要分工合作
  • 有时需要横着切,有时需要竖着切,蛋糕做大了(架构复杂了)就需要横竖都切(水平切分+垂直切分)

云计算

Q:云计算云计算,总是听到这个词,但是具体是什么呢?

A:云计算是指通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模分析和存储的基石。

Q:云计算的基础是什么?

A:一个是虚拟化技术,一个是编排方案;

  • 虚拟化技术:硬件(虚拟机)、操作系统(容器)、网络
  • 编排方案:虚拟机编排方案(OpenStack)、容器编排方案(Kubernetes)

A:还有架构方面:

  • IaaS(Infrastructure as a Service)
  • PaaS(Platform as a Service)
  • SaaS(Software as a Service)
  • FaaS(Function as a Service)

云原生

Q:云原生,emmm好像听过,但是这个就比较陌生了,可以解释一下吗?

A:云原生技术为组织在公有云、自由云、混合云等新型的动态环境中,构建和运行可弹性拓展的应用提供了可能,全称是云原生计算,是元计算发展到现在的一种形态,有如下几种代表技术:

  • 容器化
  • 服务网格
  • 微服务
  • 不可变基础架构
  • 声明式API

A:可以说,云原生的四个要点就是DevOps + 持续交付 + 微服务 + 容器

Q:等等,DevOps是什么?能吃吗?

A:很遗憾,不能吃,DevOps 是开发 (Dev) 和运营 (Ops) 的复合词,它将人、流程和技术结合起来,不断地为客户提供价值。

Q:DevOps 对团队意味着什么?

A: DevOps 使以前孤立的角色(开发、IT 运营、质量工程和安全)可以协调和协作,以生产更好、更可靠的产品。通过采用 DevOps 文化、做法和工具,团队能够更好地响应客户需求,增强对所构建应用程序的信心,更快地实现业务目标。一图以释之:

image.png Q:那云原生是怎么和微服务扯上关系的呢,刚才不是在架构里面提到了吗?

A:在云原生场景下,微服务大可不必在业务逻辑中实现符合通信标准的交互逻辑,而是交给框架的微服务中间件来做,其中通信标准是有HTTP(Rustful API)和RPC(Thrift gRPC)两个。

image.png

A:还有一点要补充的是,服务网格也是云原生的很重要的一部分,我们直接来看一张图:

image.png