分布式系统设计实践

简介: 分布式系统设计实践

前言

之前,我们了解了很多分布式系统的理论,也去分析了常见的分布式系统的设计策略。那么有了这些的铺垫,我们今天,来聊一下,常见的一些分布式系统设计的实践。周末让大家,过了个儿童节,颓废的生活不能有,学习走起!

我们主要讨论几个通用性问题:

  • 全局ID生成
  • 哈希取模分配
  • 路由表
  • 一致性哈希
  • 数据拆分


全局ID生成

我之前单独写了一篇文章,来介绍分布式系统环境中,系统唯一ID生成,有需要的,大家可以翻一下以前的文章。

首先呢,为何需要全局ID。在分布式系统环境中,由于使用了集群以及分布式应用形式,另外,数据库也存在着水平、垂直切分情况,必然需要有全局的ID,保证一致性。也满足CAP数据一致性要求。

分布式系统环境之前,单机时代,ID生成,往往通过以下几种方式:

Mysql 通过维护一张ID表

Oracle通过序列去生成ID

分布式系统环境中,数据库访问是高成本的操作,那么如何才能合理可用是大家需要了解的。

  1. UUID
    UUID有以下几部分构成:
    1) 当前日期和时间
    2) 时钟序列
    3) 全局唯一的IEEE机器识别号,如果有网卡,会从MAC地址获得,如果没有,则会以其他方式获得,感兴趣的同学,可以自己研究下
    优点:API简单,易用
UUID.randomKey().toString()

缺点:占用空间大,可读性不强,字符串无法定制

2.ID 生成表模式
目前一般来说,对于业务量不高的系统,达不到分库分表的需求的,一般主键ID都是通过Mysql的自增ID生成。

CREATE TABLE litigation_case_info (
id bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键id',
caseId varchar(30) NOT NULL COMMENT '案件申请唯一标识',
courtCode varchar(30) NULL COMMENT '法院代码',
courtName varchar(50) NULL COMMENT '法院名称',
 PRIMARY KEY (id)
) COMMENT = '诉讼险案件基本信息表';
  1. 从高可用角度考虑,需要调整自增初始值和步长,来让多台机器同时可以生成唯一的ID
    优点:简单,易用
    缺点:依赖mysql
  2. Twitter 的 SnowFlake
    github介绍,Snowflake is a network service for generating unique ID numbers at high scale with some simple guarantees.目前初始版本已被内部废弃使用,等待最新版本的开源。但是我们仍然可以学习,这么优秀的实现
    地址:https://github.com/twitter-archive/snowflake
    Snowflake生成64位的ID,包括:
    1) 41位的时间序列
    2) 10位的机器标识
    3) 12位的计数顺序号
    优点:高性能、低延迟、独立应用,时间有序
    缺点:需要独立开发部署
  3. 结合缓存方案
    采用缓存,提前缓存ID方式,高性能、低延迟,但是会造成,ID不连贯。

哈希取模分配

哈希是最常见的数据分布形式。实现方式是通过可以描述记录的业务id或者key,通过hash函数计算取余。余数则作为处理该数据的服务器索引编号

只需要通过计算,就可以映射数据和处理节点关系,问题在于,ID容易出现分布不均等情况

一致性哈希

一致性哈希算法,是一种分布式哈希(DHT)算法,主要解决了分布式哈希的单调性和分散性问题。

单调性,指的要对已经存在的内容能够正常映射,避免在节点增减过程中,无法命中,类似于上文说的哈希取模分配,如果几点不断增加,计算方式就会失去平衡。分散性,指的就是解决哈希取模分配的不平衡问题、

实现方式如下:

按照hash方法,将对应的key放入一个2^32空间内,首尾相连,形成一个环。

优点:可以任意动态添加、删除节点

路由表模式

路由表,是配置好一张表,按照权重,选择对应的存储路径。适合场景,有明确的路由目的与指向,比如抽奖后台。

对于抽奖后台的实现,可以采用路由表,按照抽奖权重,数据拆分,路由存储。

优点:简单明了

缺点:数据中央集权,存在单点风险。

数据拆分

如果能够找到一个合理的方式,去采用路由表模式,也会很好的解决数据问题,那么就出现了,数据拆分的形式。

举例说明:

Cobar,是alibaba开源的分布式数据库中间件,可以按照配置的路由规则,完成数据拆分。可以自定义拆分路由规则。具体内容,后续,我们会写代码详细说明

Sharding-jdbc,当当开源的分布式数据库中间件,也是完成对于数据的拆分、切片,具体内容,后续,我们会写代码详细说明

Mycat,分布式数据库中间件实现了分库分表,具体内容,后续,我们会写代码详细说明


目录
相关文章
|
7月前
|
人工智能 安全 Java
分布式 Multi Agent 安全高可用探索与实践
在人工智能加速发展的今天,AI Agent 正在成为推动“人工智能+”战略落地的核心引擎。无论是技术趋势还是政策导向,都预示着一场深刻的变革正在发生。如果你也在探索 Agent 的应用场景,欢迎关注 AgentScope 项目,或尝试使用阿里云 MSE + Higress + Nacos 构建属于你的 AI 原生应用。一起,走进智能体的新世界。
1498 94
|
7月前
|
关系型数据库 Apache 微服务
《聊聊分布式》分布式系统基石:深入理解CAP理论及其工程实践
CAP理论指出分布式系统中一致性、可用性、分区容错性三者不可兼得,必须根据业务需求进行权衡。实际应用中,不同场景选择不同策略:金融系统重一致(CP),社交应用重可用(AP),内网系统可选CA。现代架构更趋向动态调整与混合策略,灵活应对复杂需求。
|
9月前
|
数据采集 消息中间件 监控
单机与分布式:社交媒体热点采集的实践经验
在舆情监控与数据分析中,单机脚本适合小规模采集如微博热榜,而小红书等大规模、高时效性需求则需分布式架构。通过Redis队列、代理IP与多节点协作,可提升采集效率与稳定性,适应数据规模与变化速度。架构选择应根据实际需求,兼顾扩展性与维护成本。
347 2
|
人工智能 安全 应用服务中间件
阿里巴巴 MCP 分布式落地实践:快速转换 HSF 到 MCP server
本文分享了阿里巴巴内部将大规模HSF服务快速转换为MCP Server的实践经验,通过Higress网关实现MCP协议卸载,无需修改代码即可接入MCP生态。文章分析了MCP生态面临的挑战,如协议快速迭代和SDK不稳定性,并详细介绍了操作步骤及组件功能。强调MCP虽非终极解决方案,但作为AI业务工程化的起点具有重要意义。最后总结指出,MCP只是AI原生应用发展的第一步,未来还有更多可能性值得探索。
1615 49
|
8月前
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的"神经网络",强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
3854 57
|
12月前
|
安全 JavaScript 前端开发
HarmonyOS NEXT~HarmonyOS 语言仓颉:下一代分布式开发语言的技术解析与应用实践
HarmonyOS语言仓颉是华为专为HarmonyOS生态系统设计的新型编程语言,旨在解决分布式环境下的开发挑战。它以“编码创造”为理念,具备分布式原生、高性能与高效率、安全可靠三大核心特性。仓颉语言通过内置分布式能力简化跨设备开发,提供统一的编程模型和开发体验。文章从语言基础、关键特性、开发实践及未来展望四个方面剖析其技术优势,助力开发者掌握这一新兴工具,构建全场景分布式应用。
1068 35
|
并行计算 PyTorch 算法框架/工具
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
1341 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
|
存储 负载均衡 测试技术
ACK Gateway with Inference Extension:优化多机分布式大模型推理服务实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with Inference Extension组件,在Kubernetes环境中为多机分布式部署的LLM推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
人工智能 运维 监控
领先AI企业经验谈:探究AI分布式推理网络架构实践
当前,AI行业正处于快速发展的关键时期。继DeepSeek大放异彩之后,又一款备受瞩目的AI智能体产品Manus横空出世。Manus具备独立思考、规划和执行复杂任务的能力,其多智能体架构能够自主调用工具。在GAIA基准测试中,Manus的性能超越了OpenAI同层次的大模型,展现出卓越的技术实力。