这是我参加「第五届青训营 」伴学笔记创作活动的第 7 天。今天学习的内容为软件架构的基础知识。
重点内容
- 架构的基本概念
- 架构的具体结构
- 企业级后端架构的挑战
主要知识点
一、架构的基本概念
1、架构的定义
架构即软件架构,是有关软件的整体结构与组件的抽象描述,用于指导软件系统各方面的设计。更具体地,结合实际地说,架构在软件开发方法的选择上又巨大的指导作用。
2、架构分类
-
单机架构
定义:将软件对外提供的服务全部实现在一个进程里并部署在一台机器上的架构方式。
优点:结构简单
缺点:单机架构提供服务的能力有瓶颈,即10K问题;运维需要停止服务。
-
单体架构、垂直切分架构
定义:在单机架构的基础上进行分布式部署,垂直切分架构则是在单体架构的基础上按应用垂直切分单体。
优点:水平扩容,能承载更多服务;运维不需停服。
缺点:架构职责过多,开发效率不高;当出现bug影响的范围大。
-
微服务架构
定义:将应用的不同功能单元抽象为服务并制定服务之间的通信标准,各个服务实现功能,产生响应后通过标准确定的方式进行通信,将响应进行组合后实现总的功能。
优点:解决了上面两种架构的缺点,能够承担高并发的服务请求,服务模块化使得运维难度大大降低。
缺点(或者说需要解决的问题):
1.如何保证各个服务的数据一致
2.如何确定一个合理的通信标准
3.服务划分到什么程度比较合适
二、企业级后端架构剖析
1、云计算
定义:通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模数据分析和存储与的基石。
技术基础:
- 虚拟化技术
- 编排方案
机构:
- IaaS:指基础设施即服务。指把IT基础设施作为一种服务通过网络对外提供,并根据用户对资源的实际使用量或占用量进行计费的一种服务模式。
- PaaS:指平台即服务。 把服务器平台作为一种服务提供的商业模式
- SaaS:指软件运营服务。它不需要用户将软件产品安装在自己的电脑或服务器上
- FaaS:指功能服务化。使用FaaS只需要关注业务代码逻辑,无需关注服务器资源
2、云原生
定义:根据Microsoft文档中的内容,云原生体系结构和技术是一种方法,用于设计、构造和操作在云中构建并充分利用云计算模型的工作负载。这项技术使组织能够在新式动态环境(如公有云、私有云和混合云)中构建和运行可缩放的应用程序。
-
弹性计算资源:弹性计算资源指的是在云服务体系下,服务运营商可以根据需求提供可以放大或缩小的计算资源。弹性计算资源包括服务资源调度,计算资源调度,消息队列。
-
弹性存储资源:与计算资源类似的,可以引申出弹性存储的概念。简单来说就是将存储资源也视作一种服务,根据用户需求提供不同的存储资源,如对收银记录提供关系型数据库存储资源,为服务发现提供元数据存储资源。
-
DevOps:DevOps是云原生体系下的软件交付流程。DevOps结合了自动化流程,提高了软件开发、交付效率,整个流程概况如下
- 微服务架构:在介绍基本概念时已经介绍过微服务架构的基本概念,这里不再重复。云原生场景下,微服务的通信标准由框架确定,用户无需花费大量时间去调试服务间通信。
-服务网格:服务网格是微服务之间通讯的中间层,其具备高性能的网络代理,同时将业务代码与治理解耦,降低了运维成本,提高了程序管理效率。
三、企业级后端架构的挑战
1、存在的问题
-
基础设施层面
物理资源是有限的
资源利用率受制于部署服务
-
用户层面
网络通信开销较大
网络抖动导致运维成本提高
不同实例资源水位不均
2、解决思路
-
离在线资源并池:离线服务与在线服务往往是采取分池的方式存储,但两类服务实际上存在可区分的不同点。因此为了降低物理资源成本,提高弹性资源容量,可以考虑将两个资源池合并,通过离在线服务的特点(如潮汐性)区分两类服务。
-
自动扩缩容:根据离线服务与在线服务的特点,我们同样可以利用在线服务的潮汐性去实现自动扩缩容,从而降低业务成本。
-
微服务亲和性部署:在企业级架构中,我们可以将满足亲和性条件的容器调度至同一台宿主机中,从而降低业务成本,提高服务可用性。
-
流量治理:在架构中实现流量治理,提高微服务调用容错,提升容灾能力,进一步提高开发效率。
总结
此次课程主要在老师的讲解下了解了当前后端服务架构的基本概念与结构,在日后的工作中掌握软件架构对于一个合格的软件开发工程师而言是十分重要的,同时课程中讲解的关于当前架构存在问题的解决思路也可以应用于项目开发中。