后端架构剖析 | 青训营笔记

374 阅读6分钟

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

架构是什么

架构,又称软件架构

  • 是有关软件整体结构与组件的抽象描述
  • 用于指导软件系统各个方面的设计

为什么需要架构

  • 需求量越来越大,需要更多人手完成任务
  • 业务场景越来越复杂,需要分工配合

架构演进

单机架构

单机架构即把所有的功能都实现在一个进程里,并部署在一台机器上。

单机架构优点是简单,但是会带来很多问题

一个很经典的问题就是 C10K 问题,即单机处理 10K 个并发连接问题。随着epoll,kqueue等技术的不断发展,高性能网络编程逐渐回答了C10K问题,但我们一定要明白,单体服务一定是有架构瓶颈的。

另外一个问题是运维需要停服。只有一个单体服务,有用户使用的时间点没有办法运维。

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

面对单机架构的问题,我们可以考虑将服务进行垂直切分,将不同服务进行分割并部署在多个机器上,并引人负载均衡。

什么是垂直切分呢,例如蛋糕店,单机架构就是一个蛋糕师父负责所有的蛋糕制作,垂直应用架构则是不同蛋糕师父负责一种蛋糕的制作。

优点:

  • 水平扩容
  • 运维不需要停服

虽然单体和垂直应用架构有一些优点,但是还是会有很多问题:

随着业务场景越来越复杂,服务的职责也越来越多。开发者不仅要关心Web后端业务逻辑,还要关系缓存、持久化存储。这样很难进行业务逻辑的开发。简单来说,就是职责划分不明显。

SOA、微服务 | 水平切分

SOA

SOA(Service Oriented Architecture)面向服务架构,有两个特点

  • 将应用的不同功能单元抽象为服务
  • 定义服务之间的通信标准

SOA需要一个统一的服务治理和服务发现平台管理每个服务的运行。能够带来一些优点:

  • 提高开发效率
  • 降低系统耦合
  • 易于扩展

虽然SOA架构对应用的功能做了一定的分割,但还是会有很多功能的耦合,同时因为SOA需要有一个中心化的管理平台,这不能保证服务的高可用性。

微服务

微服务架构,即SOA的去中心化演进

微服务架构在SOA的基础上进行了去中心化演进,使得提高了服务的可用性也保留了SOA架构的一些优点

但还是带来很多问题:

  • 开发人员需要面对分布式系统的复杂性。使得测试更为困难、需要保证服务通信、需要分布式的事务管理等
  • 部署比较复杂
  • 增大内存开销

企业级后端架构

云计算

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

基础:

  • 虚拟化技术

    • 硬件层面(VM虚拟机): KVM 、 Xen 、 VMware
    • 操作系统层面(Container容器): LCX 、 Docker 、 Kata Container
    • 网络层面 : Linux Bridge 、 Open v Switch
  • 编排方案

    • 虚拟机编排方案:OpenStack
    • 容器编排方案:Kubernetes

云计算架构:

  • laaS (lnfrastructure as a Service) 基础设施即服务,即底层的基础设施资源
  • PaaS (Platfrom as a Service) 平台即服务,处于中间层,提供基础设施底层服务,类似于操作系统
  • SaaS (Software as a Service) 软件即服务,处于最上层的基于软件的服务,用于满足客户需求
  • FaaS (Function as a Service)函数即服务,即提供平台,允许客户开发、运行和管理应用程序功能,而无需构建和维护程序相关的基础架构的复杂性。

云原生

云原生,实际是云原生(计算)的简称,它是元计算发展到现在的一种形态。

image.png

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

云原生,实际是云原生(计算)的简称,它是元计算发展到现在的一种形态。

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

  • 弹性资源

弹性资源是基于虚拟化容器以及灵活的编排调度机制,可以为云服务提供快速扩容缩容能力,而且极大程序地提高了物理资源的利用率

  • 微服务架构

微服务架构依托于功能单元解构,使得云服务具备了快速迭代的功能,业务得以迅速发展;统一的通信标准能够帮助更多组件加入云原生,也使得各组件之间交互变得更容易

  • DevOps

DevOps是一组过程、方法与系统的统称,用于促进开发。表现为:设计 -> 开发 -> 测试 -> 交付 -> 开发 -> 测试 -> 交付,这套自动化的流程使得软件工作更为高效

  • 服务网格

服务网络将业务逻辑与网络通信和治理解耦开来。业务不再需要关心异构系统中RPC中间件治理能力的不统—,也使得复杂的治理能力的落地成为可能

弹性资源

基于虚拟化技术,提供的可以快速扩缩容的能力。可以分为弹性计算资源和弹性存储资源。

弹性计算资源

弹性计算资源类型:

  • 在线计算 - Spark Stream
  • 离线计算 - MapReduce 消息队列
  • 在线队列 :作用是削峰、解耦
  • 离线队列:结合数据分析的方案,如ELK

弹性存储资源

  • 经典存储

    • 对象存储 :视频、图片等
    • 大数据存储:应用日志、用户数据等
  • 关系型存储

  • 元数据

  • NoSQL

    • KV存储 : 如Redis
    • 文档存储 : 如MongoDB

服务架构

通信标准:

  • HTTP - (RESful API)
  • RPC - (Thrift , gRPC)

如何在 HTTP 和 RPC 之间选择?

  • 性能 - RPC 协议往往具备较好的压缩率,性能较高。如 Thrift, Protocol Buffers

  • 服务治理 - RPC 中间件往往集成了丰富的服务治理能力。如 熔断、降级、超时等

  • 可解释性 - HTTP 通信的协议往往首选 JSON,可解释性、可调试性更好

DevOps

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

image.png

服务网络

服务网络是:

  • 微服务之间通讯的中间层

  • 一个高性能的 4 层网络代理

  • 将流量层面的逻辑与业务进程解耦

没有什么是加一层代理解决不了的问题,服务网格相比较于 RPC/HTTP 框架:

  • 实现了异构系统治理体验的统一化

  • 服务网格的数据平面代理与业务进程采取进程间通信的模式,使得流量相关的逻辑(包含治理)与业务进程解耦,生命周期也更容易管理