架构初探-谁动了我的蛋糕 | 青训营笔记

73 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记

什么是架构

单机架构

把所有功能部署到一个进程里,并部署在一台机器上。

优点: 简单

缺点: C10K problem; 运维需要停服

C10K problem 即 Client 10000 problem,指同时连接到服务器的客户端数量达到10000时,即使硬件性能足够,也无法正常提供服务。结合「最弱连接」概念去谈。PID由16位变为32位变为64位,但进程仍然不能无限制的去创建,因为内存有限,提出了虚拟内存去解决这个问题,但仍然不得行。

解决C10K problem思路:单个服务端进程或线程服务多个客户端,通过「异步编程」和「事件触发机制」替换轮询,IO采用非阻塞的方式,减少不必要的性能损耗等

单体、垂直应用 | 垂直切分

单体架构:分布式部署

垂直应用架构:按应用垂直切分的单体

(一类,知识垂直应用架构再进行了应用细分)

优点: 水平扩容;运维不需要停服

问题: 职责还是太多,开发效率不高;「爆炸半径」大(出问题要排查的范围大)

SOA、微服务 | 水平切分

SOA(Service-Oriented Architecture)

定义:

  1. 将应用的不同功能单元抽象为「服务」
  2. 定义服务之间的「通信标准」

微服务架构:SOA的去中心化演进方向

需要考虑的问题:

  • 数据一致性
  • 高可用(这么多服务,怎么合作)
  • 治理 (链路出现问题,怎么容灾)
  • 解耦 vs 过微 (运维成本搞了,值得么)

企业级后端架构剖析

云计算

概念:是指通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模熟悉分析和存储的基石。

基础:

  • 虚拟化技术
  • 编排方案

架构:

  • IaaS 买房子 vs 房屋租赁凭条
  • PaaS 清包 vs 装修公司全包
  • SaaS 从零培训 vs 雇佣培训过的师傅
  • FaaS 纯手工制作 vs 蛋糕机批量制作

云原生

为组织(公司)在公有云、自由云、混合云等新型的动态环境中,构建和运行可弹性拓展的应用提供了可能

弹性计算资源类型:

  • 服务资源调度
    • 微服务
    • 大服务
  • 计算资源调度
    • 在线:热销榜单
    • 离线:热点榜单更新(数据分析资源比较大,需要离线调度)
  • 消息队列
    • 在线:削峰、解耦
    • 离线:大数据分析

弹性存储资源

  • 经典存储
    • 对象存储:宣传视频
    • 大数据:用户消费记录
  • 关系型数据库
    • 收银记录
  • 元数据 (用于很多情景)
    • 服务发现:蛋糕店通讯录
  • NoSQL
    • KV

DevOps

是云原生时代软件交付的利器,贯穿整个软件开发周期

结合自动化流程,提高软件开发、交付效率

微服务架构

通信标准:

  • HTTP(Restful API)
  • RPC(Thrift、gRPC)

选哪个?

  • 性能 (RPC略胜一筹,有压缩的方案)
  • 服务治理 (RPC天生自带一些服务超时,)
  • 协议可解释性 ()

服务网格

如果不使用服务网格,则在RPC框架之间进行通信,使用的话进一步与「业务进程解耦」,而到了Service Mesh数据面上。

服务网格 Service Mesh:

  • 微服务之间通讯的中间层
  • 高性能网络代理
  • 业务代码与治理解耦

相较于RPC/HTTP 框架:

  • 异构系统治理统一性 (业务进程跑的是python还是java,不用关心)
  • 与业务进程解耦,生命周期易管理