`
骑猪逛街666
  • 浏览: 141029 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

淘宝Diamond架构分析

阅读更多
阅读原文请点击:http://click.aliyun.com/m/23323/
摘要: 花了两天的时间研究了下Diamond,因为写得比较急,而且并没有使用过,只是单纯的做逆向建模,所以难免会有细节缺失,后面会时不时过来看看,然后做些补充。 背景知识 早期的应用都是单体的,配置修改后,只要通过预留的管理界面刷新reload即可。后来,应用开始拆分,从单一系统拆分成多个子系统,每个子系统还会对应多个运行实例,就开始面临一些问题: 1. 配置分散在多个业务

花了两天的时间研究了下Diamond,因为写得比较急,而且并没有使用过,只是单纯的做逆向建模,所以难免会有细节缺失,后面会时不时过来看看,然后做些补充。

背景知识
早期的应用都是单体的,配置修改后,只要通过预留的管理界面刷新reload即可。后来,应用开始拆分,从单一系统拆分成多个子系统,每个子系统还会对应多个运行实例,就开始面临一些问题:
1. 配置分散在多个业务子系统里,对同一配置的翻译在多个子系统里经常不一致。比如订单和购物车都有货币类型的配置,如果购物车上了一种新的货币类型而订单却没有相应同步增加配置项就会造成程序错误。
2. 将配置收敛成一个公有服务,可以有效改善,但是又会带来其他问题。在复杂应用里,修改一个配置项,无法确切的知道需要刷新哪些相关子系统。最终只能做全量刷新,甚至是停机发布。这对于一些停机敏感的应用例如电商几乎是无法接受的。
3. 配置收敛后,配置中心成了应用中的单点,配置如果挂了,应用也会跟着产生异常甚至挂掉。

Diamond就是为了解决这些问题,它是个高可用的配置中心。

Diamond的配置类型
配置是Diamond的核心域,也是Diamond致力于去解决的问题。Diamond有两个主要配置类型– single和aggr。二者结构如下:
配置结构
Aggr和single相比,少md5多datumId。DatumId是aggr的逻辑主键,aggr下dataId和datumId是1对多的关系,也就是说多条aggr会聚合成一条single,diamond通过merge任务对aggr合并最终生成一条single。

Md5是对content md5编码生成的字符串,用于判断缓存数据相比数据库数据是否不同,缓存数据必须严格与数据库数据一致,diamond并没有数据版本,默认数据库数据是最新的,也就是说如果数据库数据发生回退,即使缓存数据更新也会跟着回退。

Single才有md5,aggr其实并不算是完整的配置(多条aggr一起才是一个完整的配置),所以不需要校验数据是否改变。

整体架构设计
下图是Diamond的组件视图。Diamond主要有ops, sdk, client和server 4个组件。Ops是运维用的配置工具,主要用于下发以及查询配置等;server则是Diamond的后台,处理配置的一些逻辑;sdk则是提供给ops或者其他第三方应用的开发工具包;client则是编程api,它和sdk乍看有点像,其实差别很大,sdk是用于构建前台运维配置程序的,本质是对数据的维护,所有的访问和操作都是直接面向数据库的;而client则是这些数据的消费者,事实上准确的说是diamond的消费者们(各子系统)都是通过client组件对server访问。
进程视图

Diamond server是无中心节点的逻辑集群,读请求都是访问local file,而写请求则会先进入数据库,接着再更新各节点缓存。注意:ops或者其他第三方运维系统(其实就是sdk模块)读取和写入的都是数据库,这很容易理解,缓存会有lag,配置系统必须面向的是实时数据。

Diamond的数据库是单点的,这就可以利用数据库特性保证数据的原子性,一致性和持久性,也就不需要实现类似zk的集群协议,也就不存在leader/follower以及observer等节点角色,它是去中心化的,所有节点都可以接受任意请求。Diamond是典型的读多写少,写一般都来自运维系统例如ops,这种请求量会很小,即使峰值期对数据库的冲击也不会太大。实际上它就是数据库之上的一个保护壳,数据库的数据通过它透出来,也通过它渗进去。

Diamond的同质节点之间会相互通信以保证数据的一致性,每个节点都有其它节点的地址信息,其中一个节点收到变更请求后,首先写入数据库,再通知所有同质节点更新缓存,保证数据的一致性。

为了保证高可用,client会在app端以本地文件形式缓存数据的snapshot,保证即使server不可用时app也可用,这一点和dubbo很相似,所以也完全可以使用diamond搭建dubbo注册中心。

内存缓存
Client端使用的内存cache是一个AtomicReference

它并不是通常理解的内存缓存,而只是一个事件源,只有被监听的配置才会有cache。Cache内聚了group,dataId,md5,content和listener等。
客户端的长轮询任务(下一节将会重点介绍)只轮询被监听的配置,也就是cache的数据。客户端在pull到新数据后首先会更新snapshot,再更新cache,接着全量对比所有cache和它关联的listener的md5信息从而知道配置更新有没有被通知,没有则以cache中的内容作为消息载体通知,通知完成后更新listener的md5。
没被监听的数据不需要轮询,因为diamond提供的读数据api默认会先从服务节点获取实时数据。
在客户端发起长轮询或者服务节点做dump时,都需要对比md5信息以确定是否要推送或者dump。Server端缓存全量缓存了所有配置的md5信息,并会第一时间得到更新,得到更新同时还会推送LocalDataChangeEvent。

无论客户端还是服务端,内存缓存仅仅是为了满足某种功能需求,并不作为读的数据源(客户端只缓存部分数据,服务端不缓存配置内容)。这是基于产品本身定位而来的,产品定位本身就是牺牲一部分速度以降低成本,并且同时提供长轮询机制为时效性要求高的配置做到准实时的变更推送。但在客户端,每个应用的兴趣点都是分散的,平均下来每个应用感兴趣的配置数据并不大。
阅读原文请点击:http://click.aliyun.com/m/23323/
分享到:
评论

相关推荐

    来自淘宝diamond:http:__code.taobao.org_p_diamond_src_.zip

    淘宝Diamond项目是一个专门为淘宝平台开发的分布式配置管理系统。它旨在解决大规模分布式系统中配置管理的难题,提供了一...对于学习和研究分布式系统、微服务架构的开发者来说,深入研究淘宝Diamond的源码将大有裨益。

    淘宝diamond源码

    通过分析淘宝Diamond的源代码,开发者可以深入理解其内部工作原理,学习如何实现一个高可用、高性能的配置中心,这对于构建大规模分布式系统具有很高的参考价值。同时,这也为其他开源项目提供了一个优秀的学习案例...

    diamond 中文版 lattice软件

    4. **时序分析**:内置的时序分析工具能帮助用户评估设计性能,确保满足速度要求。 5. **IP核库**:提供丰富的预定义IP核,如串行接口、时钟管理、数字信号处理模块等,大大加速了设计进程。 6. **配置和烧录**:...

    diamond3_读取_micaps_diamond3_气象_3类数据_

    在IT行业中,尤其是在气象数据分析领域,Micaps(气象信息综合处理系统)是一个广泛使用的平台,用于管理和处理气象观测数据。标题中的“diamond3_读取_micaps_diamond3_气象_3类数据_”表明我们要讨论的是如何利用...

    DIAMON_matlab模态_friend5ac_模态分析_多自由度模态_Diamond_

    【标题】"DIAMON_matlab模态_friend5ac_模态分析_多自由度模态_Diamond_" 提供的信息表明,这是一个与机械结构或工程系统模态分析相关的项目,利用MATLAB软件进行操作,并结合了名为"FRIEND5AC"的专业工具。"Diamond...

    taobao Diamond 部分maven jar包

    **淘宝Diamond Maven Jar包详解** 淘宝Diamond是一款由阿里巴巴开源的分布式配置中心,它主要用于解决大规模分布式系统中的配置管理问题。在大型互联网企业中,随着系统的复杂度增加,配置的管理和更新变得越来越...

    Diamond软件

    在数据分析方面,Diamond不仅提供了诸如空间群识别、晶面指数计算等基础功能,还能进行复杂的电子密度图、Bader电荷分析等高级操作。这对于深入理解晶体的电子结构、键合性质等具有重要意义。同时,软件的报告生成...

    Lattice Diamond 3.12 Reveal User Guide

    该基于触发单元和触发表达式的触发架构,与其他系统有一些不同,但为内部逻辑分析器提供了更高的功能和灵活性。 Reveal Analyzer 部分包含关于如何使用和将软件连接到在目标硬件上运行的设计的信息。用户可以使用 ...

    diamond源代码

    二、Diamond系统架构 1. **配置服务器**:作为Diamond的核心,配置服务器负责存储所有系统的配置信息,并提供配置的增删改查接口。配置数据通常存储在数据库中,如MySQL,以保证数据的持久化和一致性。 2. **钻石...

    diamond picture.c

    diamond

    Lattice厂家开发软件Diamond安装文件 License

    首先,Lattice Diamond 是一个综合性的 FPGA 设计工具,它集成了逻辑编译、布局布线、时序分析、引脚分配、仿真等多个功能,使得用户能够高效地完成设计流程。此软件支持 Lattice 全系列 FPGA 和 CPLD 芯片,包括 ...

    Lattice Diamond 3.1 User Guide

    Lattice Diamond 3.1是一款由Lattice Semiconductor Corporation开发的FPGA设计软件工具。Lattice Semiconductor是专门从事可编程逻辑器件的半导体制造商,它提供从低功耗移动设备到高性能通信系统的多种产品线。在...

    diamond客户端使用方法.docx

    - **Diamond服务端**:提供配置存储、查询等功能的服务端应用,是Diamond架构的核心组成部分。 - **配置中心**:通常指Diamond服务端,用于集中存储和管理所有应用程序的配置信息。 - **配置刷新**:当配置发生变化...

    diamond:来自淘宝diamond:http

    diamond来自淘宝diamond:diamond设计上的一些问题?com.taobao.diamond.common.Constants.CONFIG_HTTP_URI_FILE,获取ServerAddress的值,当前没实现他们的,所以必须自己配置目前必须在:~/diamond/ServerAddress...

    Diamond 软件.rar

    《XRD数据分析利器——Diamond软件详解》 X射线衍射(XRD)技术是材料科学、地质学、化学和物理学等领域中广泛采用的一种实验手段,用于研究物质的晶体结构和成分。在处理XRD数据时,选择合适的分析软件至关重要。...

    Diamond 3.9 lisence万能版.zip

    《Lattice Diamond 3.9 License 万能版解析与应用》 在电子设计自动化(EDA)领域,Lattice Diamond 是一款广泛使用的 FPGA 设计工具,由 Lattice Semiconductor 公司提供。它集成了逻辑综合、布局布线、仿真、硬件...

    diamond软件

    5. 分析工具:内置的分析工具可以帮助用户计算键长、键角、对称性、堆积密度等物理参数,辅助科学研究。 此外,"Diamond"软件还具有扩展性和兼容性,可以与其他科学软件如Vesta、Gaussian、Materials Studio等无缝...

    lattice Diamond多种解密方法

    lattice diamond 的license 多种解密方法,让你在lattice diamond芯片开发上,大展身手!

Global site tag (gtag.js) - Google Analytics