【从0开始学架构】

李运华老师(从0开始学架构)学习笔记

什么是架构

架构的定义可以按不同的角度去诠释:

  1. 从业务角度 :erp的采购模块、发票模块、商品模块
  2. 从物理部署角度 :nginx;mysql;web服务器
  3. 从开发规范角度:MVC框架:model、view、controller

架构设计的目的

解决软件系统复杂度带来的问题 :分析系统的复杂度在哪,并通过架构设计来解决

复杂度的来源

高性能

单机高性能

要实现单机的高性能通常要考虑的是多线程并发技术,保证cpu的运行效率

多机高性能
任务分配

多台机器实现高性能,第一个复杂度就是怎么实现任务分配
在这里插入图片描述
任务分配器比如是nginx。
要考虑的点:任务分配的算法;任务分配器和业务服务器断开连接了怎么办。
在这里插入图片描述
业务请求再次增加,任务分配器也需要增多,采用DNS轮询(将相同域名映射到不同ip地址)将请求打到不同的任务分配器。复杂度再次增加。

任务分解

光靠扩充机器,来实现高性能是不够的,业务越复杂,单台机器的性能就越差。需要将系统的功能变简单进而提升性能。复杂系统变简单系统就需要任务分解,任务分解就会带来复杂度。
任务分解的复杂度主要体现在,改怎么分?分的越细越好么?

高可用

高可用是指,不管发生什么事情,系统都能够对外提供服务,要做到这点,就需要冗余

复杂度来源
计算高可用

在这里插入图片描述

  1. 选什么任务分配器
  2. 连接断开怎么处理(任务分配器和计算服务器)
  3. 分配算法是什么
存储高可用

存储高可用的主要复杂度体现在:如何减少或者规避数据不一致对业务造成的影响
在这里插入图片描述

可扩展

复杂度来源一:预测变化

现在用的mysql,预测以后要用Oracle,这种是不好预测出来的

复杂度来源二:应对变化

即使能够预测到变化,应对变化也是复杂的。

  1. 需要划分出哪个是稳定层,哪个是变化层
  2. 需要设计稳定层和变化层之间的接口。(采用设计模式)

架构设计三原则

合适原则

架构设计要适合自己的业务需求,规模小就不要做什么抗住亿级并发的系统

简单原则

演化原则

演化优于一步到位

架构设计流程

识别复杂度

切入点是高性能、高可用、可扩展,然后按优先级排序,优先级最高的最先去解决

设计备选方案

针对识别出的复杂度,设计多个备选方案,但不需要详细设计,从中选择一个合适的

详细方案设计

选择出合适的方案后,针对这个方案进行详细设计

架构设计流程

高性能解决方案

高性能数据库集群

读写分离
复制延迟
  1. 写操作后的读操作指定主机(不建议,新来的程序员可能不知道)
  2. 读从机没有则去主机读(主机可能禁受不住而崩溃)
  3. 关键业务全部指向主机
分配机制
  1. 代码分配:采用shardingsphere来分库分表
  2. 中间件封装
    在这里插入图片描述
分库分表

高性能缓存

关系型数据库不能存储数据结构,并且IO效率差,查询速度慢,采用缓存来解决

高性能负载均衡

在这里插入图片描述

  1. DNS负载均衡
  2. F5负载均衡
  3. nginx负载均衡

高可用解决方案

存储高可用

主备复制

优点:简单 缺点:备机只是备份作用,比较浪费;主机故障需要人工干预设置备机为主机

主从复制

优点:简单 缺点:需要人工干预设置从机为主机

双机切换

解决上述架构都需要人工干预的问题

互联式

在这里插入图片描述
主机同步数据的同时,同步状态,状态同步失败,则备机自动提升为主机

中介式

在这里插入图片描述

模拟式

备机模拟成客户端向主机发送请求
在这里插入图片描述

主主复制

在这里插入图片描述
适合于那些临时性、可丢失、可覆盖的数据场景。例如,用户登录产生的 session 数据(可以重新登录生成)、用户行为的日志数据(可以丢失)、论坛的草稿数据(可以丢失)等

数据分区
集中式

在这里插入图片描述

互备式

在这里插入图片描述

独立式

在这里插入图片描述

计算高可用

本质上还是通过冗余来实现高可用,并利用负载均衡算法,将请求打到不同的机器上

业务高可用

采用异地多活,洲、国、区、城(敏感数据不异地多活,方式数据不一致导致出现问题)

可扩展解决方案

拆!

面向流程拆

在这里插入图片描述

面向服务拆

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值