这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
本节课重点内容
架构初探 - 谁动了我的蛋糕
- 什么是架构
- 企业级后端架构的形态
- 企业级后端架构的挑战
- 后端架构的实战
课前学习内容
常见软件架构
单机架构
单机,就是把所有功能都实现在一个进程里,并部署在一台机器上
优点:简单
缺点:服务承载的流量优先,会产生C10K问题,运维需要停服
C10K问题的本质:创建的线程、进程过多,频繁拷贝数据,进程线程上下文频繁切换,导致操作系统崩溃
解决C0K问题的关键:尽可能减少CPU等核心资源消耗,突破C10K问题所描述的瓶颈。
单体架构、垂直应用架构
单体架构:分布式部署
垂直应用架构:按应用垂直切分
优点:支持水平扩容、运维不需要停服
问题:责任太多,开发效率不高,爆炸半径大。单体架构在一个业务出现问题时会导致其他业务出现问题,而垂直应用架构一定程度解决了这个问题,一个业务出现问题的只局限在这个业务中。
SOA架构、微服务架构
将应用的不同功能单元抽象为服务
定义服务之间的通信标准
微服务架构:soa的去中心化演进方向
优点: 职责更为清晰,爆炸半径进一步减小。
比如肉松师傅的肉松没了:
- 在单体架构中可能会导致肉松师傅的兼职:蛋糕也做不了了,
- 在垂直应用架构中这个师傅干不了活了
- 在微服务架构中,这个师傅只是没有了肉松,它还可以做没有肉松的面包,等待肉松的到来
缺点:
- 运维成本的提高
- 数据一致性问题
- 多机器的治理问题
- 可能导致的过耦合问题
架构的定义是什么
架构,又称软件架构,是关于软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。
实现一个软件有很多方法,架构在方法选择上起着至关重要的指导作用
架构的初衷是什么
满足软件迭代诉求,提高迭代效率
架构演进的思路:
垂直切分——分布式,水平切分——分层/模块化
企业级后端架构的剖析
云计算的基础技术
-
虚拟化技术
- 硬件层面(VM 虚拟机)- KVM/Xen/VMware
- 操作系统层面(Container 容器)- LCX/Docker/Kata Container
- 网络层面 - Linux Bridge/Open v Switch
-
编排方案
- VM - OpenStack/VMWare Workstation
- Container - Kubernetes/Docker Swarm
云计算的架构
-
云服务
- IaaS - 云基础设施,对底层硬件资源池的抽象(基础设施是自己来买还是找人租?对应房屋租赁平台)
- PaaS - 基于资源池抽象,对上层提供的弹性资源平台(装修的话是自己来还是找装修公司?)
- SaaS - 基于弹性资源平台构建的云服务(师傅是自己培养还是直接找培训班的?)
- FaaS - 更轻量级的函数服务。好比 LeetCode 等 OJ,刷题时只需要实现函数,不需要关注输入输出流。(直接用机器做蛋糕还是自己手工做?)
-
云部署模式
- 私有云 - 企业自用
- 公有云 - AWS/Azure/Google Cloud/Huawei
- 混合云
云原生
云原生,实际是云原生(计算)的简称,它是元计算发展到现在的一种形态。
云原生技术为组织(公司)在公有云、自由云、混合云等新型的动态环境中,构建和运行可弹性拓展的应用提供了可能。 它的代表技术:
- 弹性资源
- 微服务架构
- DevOps
- 服务网格