架构
架构的定义
架构又称为软件架构是一个软件整体结构与组件的抽象描述,指导系统软件的各个方面,我们在选择开发一个软件的时候,可以有多种的的实现方法,架构便能够给我们指导选择的方法
架构的重要性在于为软件的开发打下坚实的基础,软件的开发才能更加地容易成功,在前人地基础上进行软件地开发,我们开发维护地工作在日后更加容易。
蛋糕坊开张地问题,我们将要面临如何制作蛋糕(使用独家秘方还是亲自做),对于这个理解我是:我们是直接自己从零开始搭建软件,还是使用目前已有的软件的结构或者功能进行软件的开发,制作完蛋糕我们还需要将蛋糕进行售卖,这就涉及到我们将如何把蛋糕卖给客户,解决完成我们就可以开始着手工作了
单价架构
软件系统具备对外提供服务,把所有的功能实现在一个进程里面,并在一台机器上进行部署,这样的好处是简单,但我们可能面临一个服务瓶颈和其他的一些问题,如果服务出现运行的错误,我们可能就需要进行服务的停止或者服务进行升级的时候,我们就没法对外提供服务
单体、垂直应用 | 垂直切分
- 单体架构进行分布式部署
- 垂直应用结构 按应用垂直切分的单体
优点
- 水平扩容
- 运维的时候不需要进行停机
但也面临着
- 职责过多,开发的效率不高的
- 爆炸的范围半径过大
- 我们还需要面临者数据的一致性的问题
后面我们服务需要进行增加的时候,负责的功能范围也更加广,开发人员要更加多地关注业务的问题,毕竟一个人的精力有限,后面我们还需要进行功能的扩充的时候,可能就分身乏术了,也就无法更加地专注于业务地开发了
SOA、微服务 | 水平切分
SOA(Service-Oriented Architecture) 将应用分为不同地功能单元抽象为服务,在服务通信之间建立通信的协议
Note:服务作为一等公民
微服务架构: SOA 的去中心化演进方向,但我们可能会遇到
- 数据的一致性
- 装货台交付的蛋糕的数量
- 高可用
- 各个服务如何进行合作
- 服务的管理
- 某个服务出现问题,如何进行解决
- 解耦 VS 过微
- 运营的成本也增加了,是否值得
后端结构剖析
云计算
云计算是通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模分析的和存储的基石
基础
- 虚拟化技术(硬件/虚拟机、操作系统/容器、网络)
- 编排方案(虚拟机编排方案openstack 容器编排方案 kubernets)
架构
- Iass(Infrasturcture as a Service)
- Pass(Platform as a Service)
- Saas(Software as a Service)
- Fass(Function as a Service)
云原生
云原生(云原生计算,是元计算发展到现在的的一种形态)技术为公司或者组织在公有云 自由云 混合云等新型的动态环境中,用于构建和运行可弹性扩展的应用,构建出容错性好,易于管理、具备较好观测性的云服务
代表技术
- 容器化
- 服务网格
- 微服务
- 不可变基础架构
- 声明式api
云原生主的四个大方面
- 弹性资源 - 基于虚拟化容器以及灵活的编排调度机制,提供快速扩缩容能力,提高了物理资源的利用率(kubernetes)
- 微服务架构 - 微服务架构是云原生的重要基石之一。依托于功能单元解构,具备了快速迭代的可能,业务可以迅速发展
- DevOps - 设计->开发->测试->交付->开发->测试->交付,自动化的流程使得软件的工作流程更高效
- 服务网格 - 将业务逻辑与网络通信和治理解耦开来。业务不再需要关心异构系统中 RPC 中间件治理能力的不统一,也使得复杂的治理能力的落地成为可能
弹性计算资源
类型
- 服务资源调度
- 微服务
- 大服务
- 计算资源调度
- 在线
- 离线
- 消息队列
- 在线
- 离线
- 经典
- 对象
- 大数据
- 关系型数据库
- 元数据
- 服务发现
- NoSql
- KV
Note: 将存储资源当成服务