【笔记向】后端入门--开发与迭代--4.架构定义与解析(流水账式)(代听课系列) | 青训营

114 阅读5分钟

课程目录

01.什么是架构

->了解抽象概念。

02.企业级后端架构解析

->对企业中(后端)架构能有浅的认知。

03.企业级后端架构挑战

->企业面临的(后端)架构挑战是什么?工作中如何解决?

04.后端架构实战

->用一个例子说明:架构中一个问题的产生到解决,的实践过程。

01.什么是架构?

1.0 架构的定义

  • 概念(架构:软件架构)
  1. 有关 软件整体结构与组件 的抽象描述 (一个东西,是怎么组建在一起,它的结构是怎么样的......我们把它称之为一个“架构”)
  2. 指导 软件系统各个方面 的设计 (其用处,在于指导这个软件系统该怎样去设计)
  • 通俗阐述(相关联系)

Q:定义还是太抽象哩,能不能再通俗一点?

A:实现一个软件有很多种方法,架构会在方法选择上起至关重要的作用

  • 架构的重要性(3个层面/角度)
  1. 基本建设层面:地基(架构)->大厦(软件)
  2. 直接收益层面:地基牢(架构好)->大厦高(软件才有实力)
  3. 长远层面:(当架构已经好了)->站在巨人的肩膀上(才能创新走得更远)

1.1 什么是架构-举例

  • 前情提要:我会做蛋糕,我要开一个蛋糕店。
  • 要考虑的问题:

Q1:如何做蛋糕?

A1:我会做,这是我的独家秘方,所以我亲自来做

Q2:如何卖蛋糕?

A2:刚开店客流量不大,边做边卖

(解决以上问题,则前期问题解决)

1.2 什么是架构-单机

  • 软件系统需要对外提供服务
  • “单机”:把所有功能 都实现在一个进程里,并部署在一台机器上
  • 优劣:

优点:

  1. 简单

缺点:

  1. “C10K problem” =>处理的能力有限(客流量有限,用户排队)
  2. “运维需要停服” =>紧急情况会停摆(->客户不被服务了->容易流失)
  • 演进:(30s可以停下来思考一下如何处理)

Q:如何卖更多的蛋糕?

A:多雇几个蛋糕师傅(更多师傅既能有更多口味的厨艺拓展,又能服务更多的顾客)

1.3 什么是架构-单体、垂直应用/垂直切分

  • 单体架构:分布式部署(“|”->“巾”)

(从单机架构->变成单体架构,完成分布式部署)

(=>与单机结构相比,单体结构如同给师傅做了切分,把师傅分身)

(=>相当于多雇了几个师傅。每个师傅可能还是原来一样的职能,但是需要“巾”中间那一个交点的一个“大堂经理”职位做客户的引流,谁少了就把客户分给谁)

  • 垂直应用架构:按应用垂直切分的单体(“巾”->“木”=“杰”)

(在单体架构基础上,把卖不同蛋糕的师傅做了区分。这样有口味偏好的用户不用和其他用户挤在一起。假如某个卖蛋糕的师傅病了,卖其他蛋糕的师傅不会受到影响)

(用 垂直应用的理念 把垂直架构 做了区分)

  • 优劣:

优点:

  1. 水平扩容(接待的用户上限变多了)
  2. 运维不需要停服(至少还有能用的)

缺点:

  1. 责任太多,开发效率不高(每个师傅责任还是很重,要做 做好一份蛋糕的 所有程序)
  2. 爆炸半径大(如果一个师傅 在做蛋糕的链条上 一个环节出了什么问题,他这一条链都做不了蛋糕了)
  • 演进:如何提高做蛋糕效率?

A:分工协作(只专注于自己那一块分工任务,把做蛋糕分成不同步骤)

1.4 什么是架构-SOA、微服务/水平切分

  • SOA:Service-Oriented Architecture

(单机架构 有个“进程” 的概念,垂直应用 有个“应用” 的概念) (把应用的 不同功能单元 做一个抽象,称之为“服务”)

  1. 将应用的 不同功能单元 抽象为 服务

(SOA所有架构以服务为中心,所有面向于服务)

(eg.“-E”->“-E>·<;” / “-E>:<;>:<;-;”)

  1. 定义 服务之间的 通信标准

(是所有服务都要去交互的一个地方,所有师傅都要有这样的沟通技巧才能相互有效融洽地沟通,这个沟通技巧可能会因此孕育成一个中心化的单点,也是这个体系有点复杂的挑战。很多公司有对这处解决技巧有SOA架构的解决方案,比如问题的处理方式,标准化的解决方案等等。)

(而在微服务架构中,各服务之间拆分得更加细致,提倡服务与服务之间自由地建立沟通方式,从而避免中心化的点存在,使运作更加高效。拆分更细腻、服务也变多了,部署也变得更多了)

  • 微服务架构:SOA的去中心化演进方向(是SOA更演进的一种架构,或是它的一部分)

  • 问题:

    • 数据一致性

      • 装货台共交付了多少蛋糕?
      • =>不同的服务可能有自己的中间状态和数据,如何使这些数据保持一致性?
    • 高可用

      • 这么多师傅,如何合作?
      • 我们有这么多师傅,他们之间可能会产生非常复杂地调用或沟通,他们沟通之间肯定需要好的合作方式。如果其中某个链路出现问题,那么该如何尽可能地保持整个服务通畅?
    • 治理

      • 烤箱坏了,怎么容灾?
      • 在许多师傅之间复杂调用、合作关系的情况下,如何做容灾?
    • 解耦VS过微

      • 运维成本太高了,值当吗?
      • 我们这个程序从一开始只有一个进程,到开通成有这么多服务,成本应该是提高了(你看我们因为分得很细的服务雇了更多的师傅),那么这样的拆分是否合理?

1.5 什么是架构-小结

架构的演进初衷:(更好地完成任务)eg.做蛋糕

  1. 需求量越来越大,终归要增加人手
  2. 越做越复杂,终归要分工合作

架构的演进思路:(如何演进?)eg.切蛋糕(蛋糕越来越大,一口吃不下,终归要切分)

  1. 竖着切(垂直切分)
  2. 横着切(水平切分)