这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
写在开头
本人是一个第一次参加字节青训营的学生,主要是简单记录一下自己学习的过程以及复习(详细的需要自己去看每天对应的课程),每天会发前一天课程的笔记以及自己的思考(对项目)
架构初探
什么是架构
简单的讲,架构就是软件架构,有关软件整体结构的抽象描述,指导软件系统各个方面设计。
常见软件架构:
- 单机
- 单体
- 垂直应用
- SOA (Service Oriented Architecture)
- 微服务 (Microservice)
比如刘师傅要开蛋糕店,他要考虑如何做蛋糕,用秘方还是自己做,如何卖蛋糕,流量不大边做边卖还是怎么,想好了就可以开张。
单机
把所有功能放到一个进程一个机子上,优点是简单,但是如果要运维的话就需要停服。
单体
分布式部署,部署到多个机子上,也不需要停服运维,比如蛋糕就是有一个经理,然后有三个师傅,买蛋糕问经理就可以,经理给师傅说,属于水平扩容。缺点是效率不高,爆炸半径大。
垂直应用架构
在单机架构基础上,将进程按照某种依据切分开。比如,A 软件和 B 软件的后端原先采用单机架构部署,那就是一个进程部署在多个机器上;如果用垂直应用架构,可以将 A 和 B 的后端拆分为 A、B 两个进程,然后再按照单体模式的思路,部署在多个机器上。
SOA (面向服务架构)
把应用抽象为服务,定义服务之间的通信标准。
微服务
微服务也就是SOA去中心化演进方向,在 SOA 架构中,ESB 起到了至关重要的作用。但从架构拓扑来看,它更像是一个集中式的模块。有一个 SOA 分布式演进的分支,最终的形态便是微服务。
架构的进化初衷是为了满足软件迭代诉求,提高效率
企业级架构解析
云计算:指通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模熟悉分析和存储的基石。
和蛋糕店概念相合:虚拟化就是合租,因为虚拟出很多虚拟机用。
编排方案就是业主和租赁平台,这个平台上挂很多房子租出去。
IaaS:租房子(不租就要自己买,很麻烦)
PaaS:材料是自己买再装修还是自己出钱让专门的公司去帮忙买和装修。
SaaS:从零培训一个师傅还是直接用培训过的师傅
FaaS:纯手工制作和蛋糕机批量
云原生
云原生,实际是云原生(计算)的简称,它是云计算发展到现在的一种形态。
云原生技术为组织(公司)在公有云、自由云、混合云等新型的动态环境中,构建和运行可弹性拓展的应用提供了可能。 它的代表技术:
- 弹性资源
- 微服务架构
- DevOps
- 服务网格
弹性资源
基于虚拟化技术,提供的可以快速扩缩容的能力。可以分为弹性计算资源和弹性存储资源两个方面。
微服务(和面,雕花)大服务(烤箱)
弹性计算资源:
-
计算资源调度
- 在线计算 - 互联网后端服务(热销榜单)
- 离线计算 - 大数据分析。Map-Reduce/Spark/Flinnk(热销榜单更新)
-
消息队列
- 在线队列 - 削峰、解耦
- 离线队列 - 结合数据分析的一整套方案,如 ELK
弹性存储资源:
-
经典存储
- 对象存储 - 视频、图片等。结合 CDN 等技术,可以为应用提供丰富的多媒体能力(宣传视频)
- 大数据存储 - 应用日志、用户数据等。结合数据挖掘、机器学习等技术,提高应用的体验(用户消费记录)
-
关系型数据库(收银记录)
-
元数据
- 服务发现(蛋糕店通讯录)
-
NoSQL
- KV 存储 - Redis(来几个蛋糕)
- 文档存储 - Mongo
在云原生的大背景下,不论是计算资源还是存储资源,他们都像是服务一样供用户使用。
微服务架构
微服务架构下,服务之间的通讯标准是基于协议而不是 ESB 的。
- HTTP - H1/H2
- RPC - Apache Thrift/gRPC
如何在 HTTP 和 RPC 之间选择?
- 性能 - RPC 协议往往具备较好的压缩率,性能较高。如 Thrift, Protocol Buffers
- 服务治理 - RPC 中间件往往集成了丰富的服务治理能力。如 熔断、降级、超时等
- 可解释性 - HTTP 通信的协议往往首选 JSON,可解释性、可调试性更好
微服务大可不必在业务逻辑中实现符合通信标准的交互逻辑,而是交给框架来做。
服务网格
什么是服务网格?
- 微服务之间通讯的中间层
- 一个高性能的 4 层网络代理
- 将流量层面的逻辑与业务进程解耦
没有什么是加一层代理解决不了的问题,服务网格相比较于 RPC/HTTP 框架:
- 实现了异构系统治理体验的统一化
- 服务网格的数据平面代理与业务进程采取进程间通信的模式,使得流量相关的逻辑(包含治理)与业务进程解耦,生命周期也更容易管理