软件架构 | 青训营笔记

103 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第18天。今天的课程围绕软件架构进行了讲解,主要介绍了架构的定义和演进、企业级后端架构的剖析、目前后端架构所面临的挑战以及相应的解决方案。

架构的演化过程

架构可以理解成为一种设计并实现软件的方法,从软件开发兴起至今,软件架构大体经历了如下阶段:

单体->垂直应用->SOA->微服务

所谓单体指的是单个进程实现所有功能,这样的话实现起来虽然简单,但是对代码进行调整就需要关闭所有服务,为了提高可用性,将单个进程按照应用垂直拆分成多个单体就是垂直应用,但这样每个应用的职责还是太多开发起来困难,且一旦某一细节出现问题,影响到的面积也很大,为了解决这个问题,继续将进程单体拆分,按照应用的不同功能单元抽象成服务并定义服务之间的通信标准,便是所说的SOA(Service-Oriented Architecture)架构,为了让服务之间更好的进行通信,一种去中心化的发展方向逐步演化成了如今所说的微服务架构,这种架构下每个微服务独立开发提高了效率,独立运维降低了影响面提高了系统稳定性。同时,将单体拆分成多个服务也带来了不少问题:

  • 如何保证数据一致性
  • 服务之间的依赖越来越复杂,如何做到高可用
  • 如何治理
  • 解耦/过微如何平衡

云计算和云原生

云计算

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

云计算的两大基础:

  • 虚拟化技术:硬件(虚拟机)、操作系统(容器)、网络
  • 编排方案:虚拟机编排方案、容器编排方案

其架构为如下四层

  • IaaS(Infrastructure as a Service)
  • PaaS(Platform as a Service)
  • SaaS(Softwate as a Service)
  • FaaS(Function as a Service)

云原生

云原生是云计算发展到现在的一种形态,该技术为组织在各种云的动态环境中构建和运行可弹性拓展的应用提供了可能,代表的技术有:

  • 容器化
  • 服务网络
  • 微服务
  • 不可变基础架构
  • 声明式API 云原生主要涉及四大方面:
  • 弹性资源:虚拟化容器、快速扩缩容,有存储资源和计算资源
  • 微服务架构:业务功能解耦、通信标准,使用微服务框架开发业务
  • DevOps:自动化的开发流程提高开发效率
  • 服务网格:将业务逻辑和网络通信与治理解耦,将异构系统的治理统一化,使复杂的治理能力的落地成为可能

微服务架构面临的挑战与解决方案

物理资源有限解决思路: 离线业务多为计算密集型任务,不要求实时性,在线业务多为IO密集型任务,具有潮汐性和实时性,可以将离线在线资源并池,核心问题在于如何在同一台机器上做到离线在线隔离。 降低业务成本解决方案: 利用在线业务的潮汐性自动扩缩容,核心在于依据什么指标来扩缩容。