最近常常看到分布式这个词,好记性不如烂键盘,简单记录记录,并没有深入研究。

分布式服务器架构

分布式服务器架构是一种将服务和计算任务分散到多个服务器或节点上来处理的系统架构。

目的或者功能

  1. 提高系统的性能、可用性和扩展性。
  2. 适合应对高并发访问和海量数据处理的需求。
  3. 分布式架构的核心理念是将负载分摊到多个服务器上,避免单点故障(SPOF),并根据需求动态扩展。

分布式服务器架构的主要组成和常见设计模式

主要组成

1. 负载均衡层

  • 功能:将用户请求分发到多个服务器节点,避免单个服务器过载。
  • 实现方式:常用的负载均衡工具有硬件负载均衡(如 F5)和软件负载均衡(如 Nginx、HAProxy)。
  • 常见策略:轮询、加权轮询、最小连接、IP 哈希等,选择最佳策略分发流量。

2. 应用服务层

  • 功能:部署核心应用逻辑,如 Web 应用、API 服务、后端管理系统等。

  • 架构模式

    :微服务架构和单体架构。

    • 微服务架构:将应用拆分为多个独立服务,每个服务独立部署和管理,便于扩展和更新。
    • 单体架构:应用服务集中于一台服务器或一个容器内,适合小型系统。
  • 技术栈:可以选择基于 Spring Boot、Flask、Django、Node.js 等的框架。

3. 缓存层

  • 功能:减少数据库压力,加快响应速度,存储经常访问的数据。
  • 常用缓存技术:Redis、Memcached 等。
  • 缓存策略:设置缓存过期时间(TTL)、缓存更新策略(LRU、LFU)等来优化缓存使用。

4. 数据库层

  • 功能:持久化存储系统的数据,支持查询和事务处理。
  • 数据库分布:分库分表、读写分离、主从同步。
  • 常见数据库:MySQL、PostgreSQL(关系型数据库),MongoDB、Cassandra(非关系型数据库)。
  • 数据同步:使用主从复制、分片(Sharding)等技术提高数据访问性能和可用性。

5. 消息队列层

  • 功能:在系统内部传递消息,解耦不同服务模块,适合高并发需求。
  • 常用消息队列:RabbitMQ、Kafka、ActiveMQ 等。
  • 应用场景:订单处理、消息通知、日志存储等高并发场景。

6. 文件存储层

  • 功能:存储文件、图片、视频等大数据文件。
  • 常用技术:分布式文件系统(如 HDFS)、对象存储(如 AWS S3、阿里云 OSS)。
  • 适用场景:大文件上传、图片存储、备份数据等。

7. 监控和日志系统

  • 功能:实时监控系统的状态、日志记录,便于发现故障和优化系统。
  • 常用工具:Prometheus、Grafana、ELK(Elasticsearch、Logstash、Kibana)等。
  • 功能:监控 CPU、内存、网络流量,分析错误日志等,确保系统稳定。

常见设计模式

  1. 微服务架构:将单体应用拆分为多个独立的服务,每个服务独立开发和部署,易于扩展。
  2. 服务网格:通常用于管理微服务间的通信,确保服务间通信的安全性、可靠性和可观测性。
  3. CQRS 和事件溯源:使用不同模型处理读写请求,并记录系统的每次状态变更以支持回溯。

缺点

系统复杂性增加

  • 分布式架构涉及多个模块和服务的协调工作,相比单体架构,系统设计和开发变得更复杂。
  • 服务之间的通信、数据同步、容错等都需要精细的设计和测试,开发成本和时间显著增加。
  • 开发人员需要掌握分布式系统的知识,如一致性算法、分布式锁等,增加了技术要求。

数据一致性难以保障

  • 在分布式系统中,数据可能分散在不同的节点上,维护一致性变得困难。
  • CAP 理论(Consistency, Availability, Partition tolerance)指出分布式系统无法同时满足一致性、可用性和分区容错性,这导致设计时需在一致性和可用性之间进行权衡。
  • 常用的一致性方案,如最终一致性、强一致性等,都有各自的复杂性和延迟问题。

网络通信开销

  • 分布式架构中,各个节点通过网络通信相互协作,网络延迟、带宽限制等因素会影响系统性能。
  • 网络故障会导致部分节点不可用,甚至造成服务的暂时中断。
  • 额外的通信开销还可能增加系统的成本,如需要负载均衡器、API 网关等组件来优化网络流量。

部署和运维成本高

  • 分布式架构通常需要更多的硬件和软件资源,以及专业的运维团队来支持系统的运行。
  • 部署需要对多个节点和服务进行管理,更新和回滚复杂,尤其是在微服务架构中。
  • 持续集成、持续交付(CI/CD)流程的复杂度增加,需要额外的工具和策略来确保部署的稳定性。

案例

分布式mqtt服务器

分布式 MQTT 服务器架构设计是为了实现 MQTT 消息的高可用性、高扩展性和高并发处理。分布式 MQTT 服务器可以承载大量物联网设备的连接,同时能够保证消息的快速分发和数据的一致性。在设计和实现分布式 MQTT 服务器时,通常会使用负载均衡、集群、数据分片、消息持久化等技术。

微服务架构

Spring Cloud、Kubernetes、Docker、Istio。将应用拆分为多个独立的服务,每个服务独立开发、部署和扩展,适合大型企业系统的开发。分布式服务独立运作,降低单个服务出错影响,全栈服务自主扩展,可快速响应不同功能模块的需求。

区块链

Bitcoin、Ethereum、Hyperledger Fabric、Polkadot。构建去中心化系统,支持加密货币交易、智能合约、数据安全和隐私保护。采用分布式账本、共识算法、加密技术,数据公开透明且难以篡改,适用于去中心化应用(DApp)和数据溯源等。