架构初探课程笔记
本文是基于字节课程《架构初探-谁动了我的蛋糕》的课程笔记,下面将根据课程内容,对架构展开介绍。
架构的定义
架构,又称软件架构,
• 是有关软件整体结构与组件的抽象描述
• 用于指导软件系统各个方面的设计
具体一点说,架构就是在软件的开发过程中,指导我们如何去实现这个软件、用什么方法去实现这个软件的。架构在软件的实现过程是极其重要的,如果没有架构,就好比盖房子不打地基也不画图纸,盖一点是一点,盖出来的房子不稳固,并且质量也肯定是不好的。
常见架构
-
单机架构:软件系统需要具备对外提供服务,单机,就是把所有功能都实现在一个进程里,并部署在一台机器上。这样做最明显的优点是简单,因为这是最简洁直接的方法。但同时这也是缺点,因为没有复杂的设计,运维需要停服,运维期间用户可能就无法正常使用软件了。
-
单体架构、垂直应用架构:单体架构与单机架构类似,就是多了一层分布式部署。而垂直应用架构则是按应用垂直切分。这两种架构的优点相比于单机架构,达到了水平扩容的效果,并且运维时也不需要停服,最大程度满足用户需求。但问题就是职责太多,开发效率不高,且爆炸半径大。
-
SOA、微服务|水平切分:SOA,即Service-Oriented Architecture,它将应用的不同功能单元抽象为服务,定义服务之间的通信标准。而我们经常听到的微服务架构,就是 SOA 的去中心化演进方向。这两种结构解决了前面几种架构的大部分问题。但是人无完人,架无完构,这两种架构在实际的开发和运维工作中,仍然面临着一些需要解决或者需要均衡考虑的问题,比如:数据一致性如何保证?如何保证高可用性?如何做好服务治理?如何平衡解耦和过微之间的关系?
云计算与云原生
在课程中,对企业级后端架构进行了剖析,深入讲解了云计算和云云原生两个概念。
云计算
是指通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模数据分析和存储的基石。云计算的基础主要是虚拟化技术和编排方案两个方面。架构有IaaS (Infrastructure as a Service)、PaaS (Platform as a Service)、SaaS (Software as a Service)和FaaS (Function as a Service),这里不深入展开,网上关于这几个架构的资料也很多。
云原生
云原生这个概念由以下四个要素构成:弹性资源、微服务架构、DevOps和服务网格。
弹性资源
弹性资源,即将存储资源当成服务一样
弹性计算资源类型:
- 服务资源调度
- 计算资源调度
- 消息队列
弹性存储资源类型:
- 经典
- 对象
- 大数据
- 关系型数据库
- 元数据
- NoSQL
DevOps
DevOps 是云原生时代软件交付的利器,贯穿整个软件开发周期,结合自动化流程,提高软件开发、交付效率。下图为DevOps示意图:
微服务架构
通信标准: 云原生场景下,微服务大可不必在业务逻辑中实现符合通信标准的交互逻辑,而是交给框架来做。就好比在本次的青训营项目中,我们团队就使用了Kitex框架生成代码,从而实现各个服务之间的RPC通信,注重业务逻辑的实现。
服务网格
服务网格 (Service Mesh):
- 微服务之间通讯的中间层
- 高性能网络代理
- 业务代码与治理解耦
服务网格相比较于 RPC/HTTP 框架,主要有以下两个方面的优势:
- 异构系统治理统一化
- 与业务进程解耦,生命周期易管理
结语
永远记住一句话:没有最好的架构,只有最合适的架构!!!
想要做好架构设计,我们需要做好以下四个方面:需求先行、业界调研、技术选型、考虑异常情况。