当前位置: 首页 > news >正文

聊聊分布式集群的基本概念

在当前主流的分布式架构中,各种各样的集群技术几乎成了任何想要提升系统稳定性和处理能力的团队的必备技能。虽然各种中间件和系统都有让人看似眼花缭乱的集群实现方案,但其背后仍然逃不过一些核心的技术概念,我会结合几个我比较熟悉的中间件,简单聊一下我对集群的理解:

集群的类型

按照搭建集群的目标来划分,大致可以划分为三类集群

高可用集群

高可用性集群的主要目的是使集群的整体服务尽可能可用,在集群中任意一个节点失效的情况下,该节点上的所有任务会自动转移到其他正常的节点上。此过程并不影响整个集群的运行,能够有效的避免单点故障。高可用集群要求节点间可以进行任务和状态的迁移。我们通常所说的双机热备,也就是某种意义上的高可用集群。

负载均衡集群

负载均衡集群的主要是通过一个或多个负载均衡器,基于一定的算法将客户端集中的访问请求负载压力尽可能平均地分摊在集群中的各个节点进行处理,实现访问请求在各节点之间动态分配,以提升集群整体的吞吐量和性能,避免单个节点的网络,硬件资源等成为性能瓶颈,实现服务的横向扩展。这个例子就很多了,比如通过nginx反向代理多个后端的web服务器实例,实现多实例间的负载均衡。

高性能集群

主要用于大型任务的并行计算,将一个复杂问题拆分为多个可以并行执行的任务在多个节点同时进行计算,主要用于大数据领域,比如hadoop的mapreduce,flink,spark等等。

常用中间件的集群实现

Kafka集群

kafka的集群基于副本机制来实现了高可用,然后通过多broker,多分区来实现消息生产和消费的负载均衡,整个集群的架构图如下:
kafka集群

核心概念作用
Broker消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群
TopicKafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic
Partition分区,物理上的概念,一个topic可以分为多个partition,每个partition内部消息是有序的,一个分区可以简单的看作一个日志文件
Producer消息生产者,向Broker发送消息的客户端
Consumer消息消费者,从Broker读取消息的客户端
ConsumerGroup消费者组,每个Consumer属于一个特定的Consumer Group,一条消息可以被多个不同的Consumer Group消费,但是一个Consumer Group中只能有一个Consumer能够消费该消息Partition

Clickhouse集群

clickhouse集群有两个重要的概念:分片(shard)和 副本(replica),分片与分片间存储了不同的数据,而副本与副本之间数据是一致的(最终一致),一个分片可以有多个副本。从这里就可以看出它是通过分片实现负载均衡,而对分片创建副本来实现分片的高可用。一个典型的clickhouse集群主要由六个节点组成,分别为3个分片以及每个分片一个副本,:
在这里插入图片描述
这六个节点构成集群的配置如下:

<remote_servers><!-- User-specified clusters --><replicated><shard><internal_replication>true</internal_replication><replica><host>chi-clickhouse-replicated-0-0</host><port>9000</port>

相关文章:

  • AI工具对音乐的影响
  • 只有你相信,客户才会相信
  • Linux下调试代码——gdb的使用
  • 深入理解计算机系统 CSAPP 家庭作业6.34
  • 零基础入门学用Arduino 第四部分(三)
  • 【单片机毕业设计选题24003】-基于STM32和阿里云的家庭安全监测系统
  • ARM架构简明教程
  • 项目3:从0开始的RPC框架(扩展版)-3
  • STM32学习笔记(八)--DMA直接存储器存取详解
  • css display:grid布局,实现任意行、列合并后展示,自适应大小屏幕
  • VMR,支持30+种编程语言的SDK版本管理器,支持Windows/MacOS/Linux。
  • 手写实现call函数和应用场景
  • 刷题记录(240619)
  • JSON学习
  • .Net多线程Threading相关详解
  • 【笔记】你不知道的JS读书笔记——Promise
  • angular2开源库收集
  • gcc介绍及安装
  • HTML5新特性总结
  • JavaScript DOM 10 - 滚动
  • JS字符串转数字方法总结
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • pdf文件如何在线转换为jpg图片
  • ReactNativeweexDeviceOne对比
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 盘点那些不知名却常用的 Git 操作
  • 配置 PM2 实现代码自动发布
  • 浅谈web中前端模板引擎的使用
  • 收藏好这篇,别再只说“数据劫持”了
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 原生 js 实现移动端 Touch 滑动反弹
  • 再次简单明了总结flex布局,一看就懂...
  • 在Unity中实现一个简单的消息管理器
  • FaaS 的简单实践
  • ​queue --- 一个同步的队列类​
  • ​卜东波研究员:高观点下的少儿计算思维
  • # 安徽锐锋科技IDMS系统简介
  • #define 用法
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (六)激光线扫描-三维重建
  • (十七)Flink 容错机制
  • (四)软件性能测试
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .gitignore
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net core 外观者设计模式 实现,多种支付选择
  • .Net Core 微服务之Consul(二)-集群搭建
  • .NET 分布式技术比较
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET/C#⾯试题汇总系列:⾯向对象