[架构学习|青训营笔记]
这是我参加「第五届青训营」伴学笔记创作活动的第三天
前言
记录青训营后端专场学习过程,有不足的地方还请大佬指正。 由于本人基础较为薄弱,所以笔记尽可能详细。
一、简述架构
该篇幅将用面包店的例子来简述架构
架构的定义:
- 是有关软件整体结构和组件的抽象描述
- 用于指导软件系统各个方面的设计
实现一个软件的方法有很多种,架构在方法选择上起着至关重要的指导作用。
通过对面包店的设计迭代过程来简述架构
单机架构 :
单机:单机就是把所有的功能都实现在一个进程里,并部署在一台机器上。
用面包店来解释单机架构就是蛋糕店里的兰师傅包揽了所有活,如售卖面包、制作面包等。
单机架构的优点:
- 简单
缺点:
- 如果需要运维,则需要停止该服务器,即需要停服。
随着用户量的增加,单机架构会出现应付不过来的情况。在10K个客户同时访问服务器的情况下,随着epoll、kueue等技术的不断发展,高性能网络编程逐渐回答了C10K的问题。但是随着互联网快速发展,终端用户的极速增加,我们会面临C10M、C10B等问题。也就是说,单体服务是有架构瓶颈的。
形象地说,面包店的例子中,仅靠兰师傅一个人自己卖蛋糕、做蛋糕等。无论兰师傅怎么磨练手速,每天能卖出去的量也是有上限的。
单体、垂直应用架构|垂直切分
单体架构:分布式部署 垂直应用架构:按应用垂直切分的单体
优点:
- 水平扩容
- 运维不需要停服
问题:
- 职责太多,开发效率不高
- 爆炸半径大
解释局限:随着业务场景越来越复杂,服务的职责也越来越多。开发者不但要关心web后端的业务逻辑,还要关心缓存、持久化存储,甚至跟机器打交道。长此以往,开发者很难分出精力专注于业务逻辑的开发。
SOA、微服务架构|水平切分
SOA(Service-oriented Architecture):
1、将应用的不同功能单元抽象为服务。
2、定义服务之间的通信标准
微服务架构:SOA的去中心化发展
服务:是根据功能抽象出来的概念,比如说,处理用户登录信息的passwd的服务,负责持久化存储的数据库服务,为了加快查询速度的的缓存服务。
通信标准:是服务之间通信的基石。没有定义好的通信标准,就好比多个做蛋糕的师傅语言不通,难以协作。
在该架构下,我们获得了如下好处:
- 不同模块的开发人员可以专心于自己的业务逻辑了,开发迭代效率得到了显著提升。
- 各个服务独立运维,变更操作的影响面可控,应用整体的稳定性得到了提高。
需解决经过水平切分、竖直切分所产生的一系列问题:
1、由单机部署演进来的分布式架构,如何解决数据一致性问题?
2、服务越来越多,依赖越来越复杂,如何做到高可用?
3、一个团队甚至一个人可能同时管理多个微服务,如何运维?
4、微服务的目标是强化单一职责,控制爆炸半径,如何在解耦和「过微」之间取舍?
架构总结:
架构的演进初衷:好比做蛋糕。
- 需求量越来越大,终归要增加人手。
- 越多越复杂,终归要分工合作。
架构的演进思路:就像切蛋糕。蛋糕越来越大,一口吃不下终归要切分。
- 竖着切(垂直切分)
- 横着切(水平切分)