课程目录
01.什么是架构
->了解抽象概念。
02.企业级后端架构解析
->对企业中(后端)架构能有浅的认知。
03.企业级后端架构挑战
->企业面临的(后端)架构挑战是什么?工作中如何解决?
04.后端架构实战
->用一个例子说明:架构中一个问题的产生到解决,的实践过程。
01.什么是架构?
1.0 架构的定义
- 概念(架构:软件架构)
- 有关 软件整体结构与组件 的抽象描述 (一个东西,是怎么组建在一起,它的结构是怎么样的......我们把它称之为一个“架构”)
- 指导 软件系统各个方面 的设计 (其用处,在于指导这个软件系统该怎样去设计)
- 通俗阐述(相关联系)
Q:定义还是太抽象哩,能不能再通俗一点?
A:实现一个软件有很多种方法,架构会在方法选择上起至关重要的作用
- 架构的重要性(3个层面/角度)
- 基本建设层面:地基(架构)->大厦(软件)
- 直接收益层面:地基牢(架构好)->大厦高(软件才有实力)
- 长远层面:(当架构已经好了)->站在巨人的肩膀上(才能创新走得更远)
1.1 什么是架构-举例
- 前情提要:我会做蛋糕,我要开一个蛋糕店。
- 要考虑的问题:
Q1:如何做蛋糕?
A1:我会做,这是我的独家秘方,所以我亲自来做
Q2:如何卖蛋糕?
A2:刚开店客流量不大,边做边卖
(解决以上问题,则前期问题解决)
1.2 什么是架构-单机
- 软件系统需要对外提供服务
- “单机”:把所有功能 都实现在一个进程里,并部署在一台机器上
- 优劣:
优点:
- 简单
缺点:
- “C10K problem” =>处理的能力有限(客流量有限,用户排队)
- “运维需要停服” =>紧急情况会停摆(->客户不被服务了->容易流失)
- 演进:(30s可以停下来思考一下如何处理)
Q:如何卖更多的蛋糕?
A:多雇几个蛋糕师傅(更多师傅既能有更多口味的厨艺拓展,又能服务更多的顾客)
1.3 什么是架构-单体、垂直应用/垂直切分
- 单体架构:分布式部署(“|”->“巾”)
(从单机架构->变成单体架构,完成分布式部署)
(=>与单机结构相比,单体结构如同给师傅做了切分,把师傅分身)
(=>相当于多雇了几个师傅。每个师傅可能还是原来一样的职能,但是需要“巾”中间那一个交点的一个“大堂经理”职位做客户的引流,谁少了就把客户分给谁)
- 垂直应用架构:按应用垂直切分的单体(“巾”->“木”=“杰”)
(在单体架构基础上,把卖不同蛋糕的师傅做了区分。这样有口味偏好的用户不用和其他用户挤在一起。假如某个卖蛋糕的师傅病了,卖其他蛋糕的师傅不会受到影响)
(用 垂直应用的理念 把垂直架构 做了区分)
- 优劣:
优点:
- 水平扩容(接待的用户上限变多了)
- 运维不需要停服(至少还有能用的)
缺点:
- 责任太多,开发效率不高(每个师傅责任还是很重,要做 做好一份蛋糕的 所有程序)
- 爆炸半径大(如果一个师傅 在做蛋糕的链条上 一个环节出了什么问题,他这一条链都做不了蛋糕了)
- 演进:如何提高做蛋糕效率?
A:分工协作(只专注于自己那一块分工任务,把做蛋糕分成不同步骤)
1.4 什么是架构-SOA、微服务/水平切分
- SOA:Service-Oriented Architecture
(单机架构 有个“进程” 的概念,垂直应用 有个“应用” 的概念) (把应用的 不同功能单元 做一个抽象,称之为“服务”)
- 将应用的 不同功能单元 抽象为 服务
(SOA所有架构以服务为中心,所有面向于服务)
(eg.“-E”->“-E>·<;” / “-E>:<;>:<;-;”)
- 定义 服务之间的 通信标准
(是所有服务都要去交互的一个地方,所有师傅都要有这样的沟通技巧才能相互有效融洽地沟通,这个沟通技巧可能会因此孕育成一个中心化的单点,也是这个体系有点复杂的挑战。很多公司有对这处解决技巧有SOA架构的解决方案,比如问题的处理方式,标准化的解决方案等等。)
(而在微服务架构中,各服务之间拆分得更加细致,提倡服务与服务之间自由地建立沟通方式,从而避免中心化的点存在,使运作更加高效。拆分更细腻、服务也变多了,部署也变得更多了)
-
微服务架构:SOA的去中心化演进方向(是SOA更演进的一种架构,或是它的一部分)
-
问题:
-
数据一致性
- 装货台共交付了多少蛋糕?
- =>不同的服务可能有自己的中间状态和数据,如何使这些数据保持一致性?
-
高可用
- 这么多师傅,如何合作?
- 我们有这么多师傅,他们之间可能会产生非常复杂地调用或沟通,他们沟通之间肯定需要好的合作方式。如果其中某个链路出现问题,那么该如何尽可能地保持整个服务通畅?
-
治理
- 烤箱坏了,怎么容灾?
- 在许多师傅之间复杂调用、合作关系的情况下,如何做容灾?
-
解耦VS过微
- 运维成本太高了,值当吗?
- 我们这个程序从一开始只有一个进程,到开通成有这么多服务,成本应该是提高了(你看我们因为分得很细的服务雇了更多的师傅),那么这样的拆分是否合理?
-
1.5 什么是架构-小结
架构的演进初衷:(更好地完成任务)eg.做蛋糕
- 需求量越来越大,终归要增加人手
- 越做越复杂,终归要分工合作
架构的演进思路:(如何演进?)eg.切蛋糕(蛋糕越来越大,一口吃不下,终归要切分)
- 竖着切(垂直切分)
- 横着切(水平切分)