什么是架构

架构和框架的区别

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

架构:
在意于基础的结构

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

从业务逻辑角度出发:
订单和物流模块都需要用户登录/注册以后才能使用
在这里插入图片描述

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

在这里插入图片描述

从开发规范出发(MVC):

在这里插入图片描述

为什么要做架构

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

复杂度来源

对高性能的追求

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

单机复杂度

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

集群复杂度

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

在这里插入图片描述

任务分解复杂度

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

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

对高可用的追求
计算高可用的复杂度

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

存储高可用

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

对可扩展的追求
预测变化

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

应对变化

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

在这里插入图片描述

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

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

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

对低成本的追求

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

安全
功能安全

复杂度在于:

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

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

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

规模

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值