分布式系统架构

分布式系统定义

  • 分布式系统:硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。

为什么需要分布式系统

  • 提升系统吞吐量:集群协同解决单机性能瓶颈
  • 提高系统可用性 :冗余部署,各别服务宕机,不会影响系统可用性
  • 可扩展要求:系统需要具备快速扩展的能力

分布式系统架构

类型 描述 优点 缺点 备注
集中式架构 业务逻辑及数据访问功能全部集成在单体的模块中 开发成本低,性能高、运维成本低、架构简单 隔离性差、协同效率低
分体架构 面向服务、分层架构、微服务架构 迭代快、故障范围小、易扩展 开发成本高、基础设施依赖度高、维护复杂、延迟增加多
  • 面向服务:按照业务功能将模块垂直拆分成多个独立的服务
  • 分层架构:层级解耦,分为网关层,业务逻辑层,数据访问层。
  • 微服务架构:将单应用程序作为一套小型服务开发的方法,每种应用程序都在其自己的进程中
    运行,并与轻量级机制进行通信。这些服务是围绕业务功能构建的

分布式系统架构组成

分布式系统架构_第1张图片

  • 基础设施: DNS、CDN、Nginx、LVS
  • 业务模块: 网关模块、业务逻辑模块、 数据访问模块
  • 基础组件: 注册中心、配置中心、消息队列、 服务治理平台、分布式锁组件、分布式事务组件、性能分析平台、日志分析平台、发布系统、监控平台
  • 存储资源:关系数据库、分布式缓存、KV存储、对象存储、时序数据库、NoSQL、NewSQL

分布式架构中的三高:高并发、高性能、高可用

高可用设计

高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。通常,我们会通过设计冗余+自动故障转移来保证系统的高可用特性。

请求生命周期分析

分布式系统架构_第2张图片

  • 分布式系统中请求由前端发出,到达后端服务系统处理并返回前端,通常会经过 DNS->LVS->NGINX->网关→ 应用服务->DB集群

服务冗余

  • 保证在个别节点发生异常后其他正常节点承载异常节点的流量,保证业务请求得到正常处理
    处理方式:服务注册与服务发现,健康检查,节点探活,

存储冗余

  • 数据冗余可以尽量保证数据不丢失,同时还可以承载更多的查询流量,提高系统访问性能
    处理方式:
    • 一主一从或多从,从库扛线上流量
    • 主从切换:业务无感知的主从切换时保证数据高可靠的前提
    • 数据隔离:DB要按业务隔离,不同部门或不同业务不能使用同一DB,必须配合业务拆分,防止相互影响
    • 共用实例问题:数据量大影响性能、业务相互影响、连接资源紧张

模块拆分

  • 采用垂直拆分、水平拆分方法使模块功能单一,处理业务隔离,提高系统整体可靠性
  • 模块拆分的原则:职责单一、业务隔离、粒度合理、结合场景、适应组织架构、避免循环依赖

高并发设计

  • 有状态设计:是指进程在本地内存或磁盘上存储自己完成代码逻辑需要的数据,并且进程启动时需要将数据加载到内存或要求数据文件在本地磁盘上存在才能正常运行的服务。
  • 无状态设计:对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如说数据库),服务器本身不存储任何信息
    • 无状态设计的设计如果涉及到要存储信息,有两种方式可以选择:客户端保存、服务端保存

高性能设计

以用户为中心,提供快速的网页访问体验。主要参数有较短的响应时间、较大的并发处理能力、较高的吞吐量与稳定的性能参数。

  • 前端优化:网站业务逻辑之前的部分;
  • 浏览器优化:减少HTTP请求数,使用浏览器缓存,启用压缩,CSS JS位置,JS异步,减少Cookie传输;CDN加速,反向代理;
  • 应用层优化:处理网站业务的服务器。使用缓存,异步,集群
  • 代码优化:合理的架构,多线程,资源复用(对象池,线程池等),良好的数据结构,RPC异步调用,单例,Cache等;
  • 存储优化:缓存、固态硬盘、光纤传输、优化读写、磁盘冗余、分布式存储(HDFS)、NoSQL、索引优化、分库分表等。

分布式系统服务治理

服务注册、服务发现、负载均衡、流量削峰、版本兼容、服务熔断、服务降级、服务限流等方面的问题,都是因服务拆分所引发的一系列问题。如何解决这些问题,让服务更稳定地运行,就叫作服务治理。

  • 服务分组: 将同一集群的服务节点分组,分别向不同的调用方提供服务,隔离调用方之间的相互影响
  • 过载保护: 服务端高可用措施,必要情况下丢弃部分请求,保证服务柔性可用
    • 原因分析: 下游服务超时、自身资源不足
    • 现象: 请求队列堆积
    • 解决办法: 超时丢弃、限流
  • 熔断降级:调用方高可用措施,必要情况下丢弃调用,有损返回数据,防止系统雪崩,保证系统柔性可用
  • 权重支持:动态调整节点权重,结合线上流量和服务节点情况,合理利用服务器资源
  • 应用场景 :机器性能差异、机器流量差异、实现节点慢启动
  • 日常维护:线上系统常常处于不停的迭代中,时刻掌握线上系统运行状态,了解系统性能瓶颈也十分重要,这里需要重点做的其实是监控,用于发现系统异常,预判故障点

你可能感兴趣的:(架构设计,架构,java,数据库)