如何用AI技术降噪? QCon 广州“音视频架构实践”专场给你答案! 了解详情
写点什么

云监控背后的技术:Shared-nothing Architecture

  • 2020 年 4 月 01 日
  • 本文字数:2060 字

    阅读完需:约 7 分钟

云监控背后的技术:Shared-nothing Architecture

什么是 Shared-Nothing(SN)架构?

Shared-nothing 架构本来是一个比较古老的架构模式,最早出现于 1986 年的一篇 database 论文(MichaelStonebraker at the University of California, Berkeley),由于近些年 NoSQL 的大行其道,加上 Google,Amazon 等大厂在 big tabledata storage 领域的不断耕耘,SN 架构又被重新拿来定义超大规模的数据仓库,数据存储架构,并逐渐成为事实上大部分 NoSQL 数据库的架构基础。(例如:Cassandra,DynamoDB,BigTable,HBase 等)


SN 架构简介


如上图就是最简明的 Shared-nothing 图解,左图中,无论从 1,2,3,4 任意的节点访问数据,都能访问到全量的数据;而右图中,1 访问的数据只属于 1,2 访问到的只属于 2。这是因为在 SN 架构中引入了分区(partition)的概念:每一个 node 都应该具备属于自己的分区。


对于左图来说,一个非常大的数据存储集群,当有新数据写入时,必须要有分布式全局锁(distributedlock)来做全局的写控制,这样才能保证在有两个节点同时写入的时候不会出现 racecondition 或者 dead lock。而我们都知道,维护分布式锁的最大问题就是节点数目永远和锁复杂度是成正比的,因此左图中的非 SN 架构在线性扩展上是非常差的,即使扩展成功,每次的写入会给整个系统带来非常大的锁开销。


而 SN 系统在这方面就有先天优势:lockless 的数据 sharding,保证从 1 写入的数据永远只会到达 A,从 2 写入的数据永远只会达到 B 等等,永远不会出现 1 和 2 同时去 A 写的情况出现。这样 SN 架构下的数据库系统,性能是随着集群规模线性增长的,这也是为什么 Cassandra 等 NoSQL 数据库的吞吐量可以无限制增长的主要原因,下面我们来看看在云监控中的应用。


SN 在云监控系统中的应用场景

云监控是一个海量数据+海量并发的低延迟业务系统,每天 20 亿次以上的指标数据写入就已经直接反映了其对数据超高的消费与接纳能力,如果没有 SN 做基础的情况下,扩展起来将会成为灾难。因此,云监控系统中对 SN 的应用与实践反映在方方面面。


a. 基于 SN 的离线降维(聚合)服务 Blueflood


Blueflood 是一款开源的监控指标离线处理系统,云监控用 blueflood 做离线指标的聚合降维计算,在 blueflood 中,所有数据被用 Consistenthash 分成 0-127 个 shards,每个 shard 带有一定数量的指标:



由于 Blueflood 分为聚合集群,写入集群和查询集群,这样 Blueflood 在做聚合运算的时候,我们按照 shard 的数量,均匀分散在聚合节点上,比如有 4 个聚合节点,每个节点带 32 个 shards,如果每个 shard 有 10 个指标,每个 Blueflood 聚合节点就会负责 32 * 10 = 320 个指标的聚合任务。任何一个聚合节点都不会访问别的 shard 里的数据,扩容的时候只要重新将 shards 分配在新的集群上面就可以。


b.基于 SN 的站点监控轮训机制


站点监控是云监控的另一个核心模块,为用户提供网站的可用性,访问时延等指标的监控与告警。核心组件探针也是基于 SN 模型部署,每一个 Probe 节点被平均分配 N 个网站域名,Probe 只会负责相应网站的探测监控,同时加上冗余,最大限度增加整个系统的容量和可用性。


SN 在 Cassandra 上的应用

上一篇我们已经介绍了 Cassandra 的基本概念,以及它近乎变态的线性扩展能力和可靠性,那么是什么维持了它的这些特性呢? SN 在这里面扮演了很重要的角色:


a. 如何维持高吞吐量和线性扩展能力?


Cassandra 天然的设计就是遵循了 SN 架构:每个节点拿到整个数据集的一部分子集,并且利用 ConsistentHash 将每一个 range 的数据映射到不同的节点上,因此每个节点在理论上只会保存全量数据的一部分。在扩容的时候,由于 consistenthash 算法将新的 range 填入集群,并且会在后台逐渐将以前的 range ring 做 rebalance,这样在新节点加入完成以后,所有的节点又是独立且无干扰的,又符合 SN 架构。


b. SN 下 Cassandra 如何维持一致性以及可靠性?


这个问题是诸多 bigtable 类型 NoSQL 数据库都在努力解决的问题,在上一篇文章中我们介绍了可调的一致性是 Cassandra 的亮点,所以 Cassandra 实际上在 SN 和非 SN 中寻找了一种平衡,在可调一致性的情况下,副本数达到设置的一致性便会返回写成功;而 Cassandra 又允许用户设置副本数,(通常为 3),这就表示,即使一致性级别设置为 All 的情况下,也只是集群中只有三个节点返回写正确就可以表示一次写入正确,这样既保证了数据的可靠性(三副本),又保证了分区容忍度(Networkpartition),以及在前两者保证的情况下的相对 SN 架构符合程度(并非全局的 distributedlock)。


而在其他一致性情况下,比如 LocalOne 的情况下,就是标准的 SN 实现,只要返回一个写成功便会写成功,而对副本的同步会异步在写完成后才进行。总的来说,sharednothing 降低了竞争资源的等待时间,从而提高了性能。反过来,如果一个数据库应用系统要获得良好的可扩展的性能,它从设计和优化上就要考虑 sharednothing 体系结构,Share nothingmeans few contention。


本文转载自 华为云产品与解决方案 公众号。


原文链接:https://mp.weixin.qq.com/s/KmPpxDXngWP--3Xs72BQng


2020 年 4 月 01 日 14:54758

评论

发布
暂无评论
发现更多内容

Java 多线程上下文传递在复杂场景下的实践

vivo互联网技术

Java 架构 编程语言 多线程高并发

💻 一文读懂两台计算机之间是如何通信的

飞天小牛肉

面试 计算机网络 2月春节不断更

话题讨论 | 你现在还会推荐亲朋做程序员吗?

石云升

话题讨论 2月春节不断更

运动健身市场越来越大,你的客户却越来越少?

IoT云工坊

人工智能 App 物联网 健身房 智能健身房

软件架构模式之事件驱动架构

架构精进之路

软件架构 七日更 28天写作 2月春节不断更

面试杀手锏!2021最新Android常用开源库总结,Android校招面试指南

欢喜学安卓

android 程序员 面试 移动开发

CodeDay#5 全程回顾——一场关于动态化开发实践的技术探讨

蚂蚁集团移动开发平台 mPaaS

mPaaS Codeday 技术沙龙

博文视点算法书单|让算法学习不再难

博文视点Broadview

Elasticsearch 从 0 到千万级数据查询实践

📿

Java spring elasticsearch Spring Cloud spring data

领域的边界,一个小讨论

李小腾

领域驱动设计 DDD

勿让 Docker Volume 引发 Terminating Pod

黄久远

Docker 云计算 Kubernetes 容器 云原生

单例模式原来是这么简单?!

后台技术汇

28天写作 2月春节不断更

最基础的3道java面试题,你真的答得上来吗

田维常

面试

面试看这个就够了!6年菜鸟开发面试字节跳动安卓研发岗,学习路线+知识点梳理

欢喜学安卓

android 程序员 面试 移动开发

Java之五种遍历Map集合的方式

华为云开发者联盟

Java 对象 Iterator 内容合集

如何理解Linux系统SSH协议和原理

Changing Lin

Linux 2月春节不断更

GitHub星标数超4.2万的火爆之作!

博文视点Broadview

点赞系统软件开发

luluhulian

第二章作业二

LouisN

MySQL字段类型最全解析

Simon

MySQL 数据库数据类型

字节面试太刁钻了:不加机器,怎么提升系统并发100倍

Java架构师迁哥

两个高频设计类面试题:如何设计HashMap和线程池

yes

面试 hashmap 线程池

谁再把IDEA的Project比作Eclipse的Workspace,我就跟谁急

YourBatman

eclipse IntelliJ IDEA Project Workspace

DIY一款能随周围环境变化的智能灯泡,求婚必备!

IoT云工坊

人工智能 物联网 人脸识别 sdk IoT App

k8s-client-go源码剖析(三)

远鹏

Kubernetes Kubernetes源码 Go 语言

第三周

ALone

一款基于 WEB 的通用数据管控工具 - CloudQuery

侯林捷

开发工具 运维工程师 dba 数据库管理工具

LeetCode题解:69. x 的平方根,二分查找,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

new的过程是怎样的?看完这一篇就懂了

codevald

Java JVM原理 面向对象编程 类对象

「云智公开课」百度沧海·存储

「云智公开课」百度沧海·存储

云监控背后的技术:Shared-nothing Architecture_新基建_华为云产品与解决方案_InfoQ精选文章