初探架构 | 青训营笔记

121 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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
  • 服务网格