什么是架构

文章目录

      • 架构和框架的区别
      • 为什么要做架构
      • 复杂度来源
        • 对高性能的追求
          • 单机复杂度
          • 集群复杂度
          • 任务分解复杂度
        • 对高可用的追求
          • 计算高可用的复杂度
          • 存储高可用
        • 对可扩展的追求
          • 预测变化
          • 应对变化
        • 对低成本的追求
        • 安全
          • 功能安全
          • 架构安全
        • 规模

架构和框架的区别

框架:
1.提供了组件的开发规范,比如为laravel开发组件,就要遵循其发布包的规范
2.提供了基础的开发功能,能够快速开发项目
3.更加在意规范

架构:
在意于基础的结构

从不同的角度出发,其机构不同
下面从三个角度出发说明,其它角度请搜索架构的"4+1视图"

从业务逻辑角度出发:
订单和物流模块都需要用户登录/注册以后才能使用
什么是架构_第1张图片

从部署角度出发:
可能业务比较简单,单机就搞定了

什么是架构_第2张图片

从开发规范出发(MVC):

什么是架构_第3张图片

为什么要做架构

为了解决复杂度带来的系统问题。

复杂度来源

对高性能的追求

对高性能的追求会带来复杂度,分为单机复杂度,和集群复杂度,任务分解复杂度

单机复杂度

单机的复杂度主要体现在2方面:
1.操作系统的抉择
2.进程,线程,协程之间的抉择

集群复杂度

在于引入了任务分配机制,要将任务分配到单机上去。复杂度体现在四个方面
1.用户的请求要怎么到达分配器上(DNS轮询,智能DNS等)
2.使用什么充当任务分配器。(nginx,LVS,还是自己写一个)。
3.分配器要和多台单机服务器连接,如何进行连接的管理。
4.分配器要使用什么算法去分配(轮询,随机,还是权重?)

什么是架构_第4张图片

任务分解复杂度

任务分解,可以理解为微服务,那么怎么分也是个复杂度:
1.分的多造成调用链路变长反而影响系统性能。
2.分的少,性能提升不大。

为啥拆分后性能能够提升呢?
1.单个服务变得简单,影响性能的点变少,更容易进行针对性优化。
2.复杂的系统,很难找到哪里影响了性能。还有可能优化了A点,不经意造成B点的性能下降(可能变成负优化)。
3.更容易进行修改。只需要修改要改的服务即可。不需要改动整个系统。
4.更容易进行扩容提升性能(如计算密集型服务:增加cpu强的服务器)

对高可用的追求

计算高可用的复杂度

指的是相同的数据,经过不同的服务器处理后,结果是相同的。
这个不是问题。问题在于高可用状态的决策: 高可用状态决策方式

存储高可用

如mysql的主从,存储高可用的复杂度在于:
如何减少和规避数据不一致对业务造成的影响。
例如:对实时性要求高的服务直接从主库读取数据。

对可扩展的追求

预测变化

复杂性有3方面:
1.不能对所有的点都考虑可扩展性
2.又不能不考虑可扩展性
3.考虑了,还有可能是错的

应对变化

我们知道应对变化,就是将不变的和会变的分层。分为:变化层,稳定层
但是谁在上,谁在下也是个问题。要根据实际情况来划分。

什么是架构_第5张图片

第一种常见于:
原先支持http请求,后来要求变成rpc或grpc这种情况

第二种常见于:
原先支持mysql,后来要求支持sqlserver或oracle这种情况

变化层和稳定层按照某种规则进行调用(接口约束)
这个接口的设计也有复杂度:
1.如何定义接口,23种设计模式使用哪几种,怎么用
2.接口一经定义,就很难再修改。设计的不好,影响后续扩展

对低成本的追求

对低成本的追求并不是架构的首要目标,而是作为架构的附带约束。
大公司通过创造技术来降低成本,小公司通过引入新技术降低成本,复杂度在于:
1.哪些技术适合现在的公司
2.引入和创造技术本身就具备复杂性

安全

功能安全

复杂度在于:

  1. 如对(xss,csrf,sql注入的处理)
  2. 框架,组件自带的bug(如:log4j漏洞)
架构安全

1.是否使用防火墙,怎么使用

当前对DDOS攻击(耗尽出口带宽)没有什么比较好的方法,主要还是依靠运营商强大的带宽和流量清洗能力。

规模

复杂度在于:
1.当功能变多后,其交互程密集的网状结构。需要考虑进行拆分
2.当数据量上来以后,需要对数据库进行分库,分表(怎么分也是个问题)

你可能感兴趣的:(架构,架构)