分布式部署

OceanBase分布式系统负载均衡案例学习

南楼画角 提交于 2019-12-19 17:11:02
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一个集群如果出现了负载不均衡问题,那么负载最大的机器往往将成为影响系统整体表现的瓶颈和短板。为了避免这种情况的发生,需要动态负载均衡机制,以达到实时的最大化资源利用率,从而提升系统整体的吞吐。 OceanBase架构介绍 OceanBase是一个具有 自治功能 的分布式存储系统,由 中心节点RootServer、静态数据节点ChunkServer、动态数据节点UpdateServer以及数据合并节点MergeServer四个Server构成 ,如下图所示。 Tablet:分片数据,最基本的存储单元,一般会存储多份,一个Table由多个tablet构成; RootServer:负责集群机器的管理、Tablet定位、数据负载均衡、Schema等元数据管理等。 UpdateServer:负责存储动态更新数据,存储介质为内存和SSD,对外提供写服务; ChunkServer:负责存储静态Tablet数据,存储介质为普通磁盘或者SSD。 MergeServer:负责对查询中涉及多个Tablet数据进行合并,对外提供读服务; 在一个集群中,Tablet的多个副本分别存储在不同的ChunkServer,每个ChunkServer负责一部分Tablet分片数据,MergeServer和ChunkServer一般会一起部署。

分布式锁的几种实现方式

落爺英雄遲暮 提交于 2019-12-19 09:52:44
目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证“最终一致性”,只要这个最终时间是在用户可以接受的范围内即可。 在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。有的时候,我们需要保证一个方法在同一时间内只能被同一个线程执行。在单机环境中, Java 中其实提供了很多并发处理相关的API,但是这些API在分布式场景中就无能为力了。也就是说单纯的 Java Api并不能提供分布式锁的能力。所以针对分布式锁的实现目前有多种方案。 针对分布式锁的实现,目前比较常用的有以下几种方案: 基于 数据库 实现分布式锁 基于缓存( Redis ,memcached,tair)实现分布式锁 基于Zookeeper实现分布式锁 在分析这几种实现方案之前我们先来想一下,我们需要的分布式锁应该是怎么样的?(这里以方法锁为例,资源锁同理) 可以保证在分布式部署的应用集群中

HDFS伪分布式环境搭建

前提是你 提交于 2019-12-19 00:05:17
HDFS概述及设计目标 什么是HDFS: 是Hadoop实现的一个分布式文件系统(Hadoop Distributed File System),简称HDFS 源自于Google的GFS论文 论文发表于2003年,HDFS是GFS的克隆版 HDFS的设计目标: 非常巨大的分布式文件系统 运行在普通廉价的硬件上 易扩展、为用户×××能不错的文件存储服务,也就是容错性 HDFS官方文档地址如下: https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html HDFS架构 HDFS是主/从式的架构。一个HDFS集群会有一个NameNode(简称NN),也就是命名节点,该节点作为主服务器存在(master server)。NameNode用于管理文件系统的命名空间以及调节客户访问文件。此外,还会有多个DataNode(简称DN),也就是数据节点,数据节点作为从节点存在(slave server)。通常每一个集群中的DataNode,都会被NameNode所管理,DataNode用于存储数据。 HDFS公开了文件系统名称空间,允许用户将数据存储在文件中,就好比我们平时使用操作系统中的文件系统一样,用户无需关心底层是如何存储数据的。而在底层,一个文件会被分成一个或多个数据块

Rides 高并发下分布式锁的处理

你离开我真会死。 提交于 2019-12-18 15:19:44
分布式环境下多个操作以原子的方式执行 单体操作可以加锁synchronized{ } 如果是分布式的环境 前端niginx部署多个端口,会有bug redis中文手册api setnx 将key的值设为values,当key不存在时,如果给定的key已经存在,则setnx不做任何动作 进入时setkey值, 处理逻辑, 结束时删除key值, 这样在处理逻辑时如果发生异常,直接凉凉,key值一直不会被删除 所以加异常吹trycatch 但是服务在处理逻辑时挂了怎么办, 加redis超时时间,保证原子性 然后多个服务配置不同的唯一id,保证锁唯一 集大成者直接用redission框架 lock 来源: CSDN 作者: 谁还不是个孩子 链接: https://blog.csdn.net/weixin_43991917/article/details/103596317

Java分布式锁

纵饮孤独 提交于 2019-12-18 15:02:20
分布式锁简述 在单机时代,虽然不存在分布式锁,但也会面临资源互斥的情况,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制,即当某个线程获取到这个资源后,就需要对这个资源进行加锁,当使用完资源之后,再解锁,其它线程就可以接着使用了。例如,在JAVA中,甚至专门提供了一些处理锁机制的一些API(synchronize/Lock等)。 但是到了分布式系统的时代,这种线程之间的锁机制,就没作用了,系统可能会有多份并且部署在不同的机器上,这些资源已经不是在线程之间共享了,而是属于进程之间共享的资源。因此,为了解决这个问题,「分布式锁」就强势登场了。 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。 在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,这个时候,便需要使用到分布式锁。 分布式锁要满足哪些要求呢? 排他性:在同一时间只会有一个客户端能获取到锁,其它客户端无法同时获取 避免死锁:这把锁在一段有限的时间之后

Zookeeper系列一:Zookeeper介绍、Zookeeper安装配置、ZK Shell的使用

☆樱花仙子☆ 提交于 2019-12-17 09:08:06
https://www.cnblogs.com/leeSmall/p/9563547.html 一、Zookeeper介绍 1. 介绍Zookeeper之前先来介绍一下分布式 1.1 分布式主要是下面两个方面: 1) 任务拆分   任务拆分指的是把传统的单节点服务拆分成多个节点服务部署到不同的机器上对外提供服务。比如一个传统服务有订单+支付+物流等3个模块,拆分成订单系统、支付系统、物流系统3个服务。 2) 节点分工   如上面的服务拆分后,订单系统、支付系统、物流系统各司其职 说明: 分布式解决高可用,高并发的。 集群解决的是高可用。 集群从物理上来定义,分布式一种工作方式。 例如:一个工作任务需要10个小时(单节点) 分布式:10台机器,任务只需要1个小时就能够完成 集群:10台机器,任务还是10个小时。 1.2 分布式协作中的难点: 如果让你设计一个分布式系统,你预见到什么问题? 1) 保证节点高可用(节点故障) 2) 数据的一致性 3) 通讯异常 4) 网络分区 ....... 2. Zookeeper简介 Zookeeper就是用来解决分布式协作中的难点的 zookeeper是google的chubby项目开源实现。最早是hadoop的子项目 Zookeeper的使用场景: 小米米聊、淘宝Taokeeper其实是类zookeeper。 Kafka使用zookeeper

一篇读懂分布式架构下的负载均衡技术:分类、原理、算法、常见方案等

核能气质少年 提交于 2019-12-17 07:52:48
1、引言 关于“负载均衡”的解释,百度词条里:负载均衡,英文叫Load Balance,意思就是将请求或者数据分摊到多个操作单元上进行执行,共同完成工作任务。 负载均衡(Load Balance)建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 负载均衡有两方面的含义: 1)首先,大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间; 2)其次,单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高。 简单来说就是: 1)其一是将大量的并发处理转发给后端多个节点处理,减少工作响应时间; 2)其二是将单个繁重的工作转发给后端多个节点处理,处理完再返回给负载均衡中心,再返回给用户。 目前负载均衡技术大多数是用于提高诸如在Web服务器、FTP服务器和其它关键任务服务器上的Internet服务器程序的可用性和可伸缩性。 总之,它的目的就通过调度集群,达到最佳化资源使用,最大化吞吐率,最小化响应时间,避免单点过载的问题。 内容概述:本文将从负载均衡技术的分类、技术原理、常见实现算法、常用方案等入手,为您详细讲解负载均衡技术的方方面面。这其中,四层和七层负载均衡技术最为常用,它们也是本文介绍的重点。 内容点评

分布式唯一ID生成服务

天大地大妈咪最大 提交于 2019-12-16 15:22:17
SNService是一款基于分布式的唯一ID生成服务,主要用于提供大数量业务数据建立唯一ID的需要;服务提供最低10K/s的唯一ID请求处理.如果你部署服务的CPU资源达到4核的情况下那该服务最低可以提供100K/s的请求处理能力.服务支持部署到Linux mono 3.2.3和Windows .Net4. 0 ID生成规则 服务生成的ID是64位无符号长整型,其中48位是现有时间和2013年1月1日时间差的毫秒数,另外16位则是针对当前毫秒的递增值.即每毫秒支持6万多个唯一ID生成,每秒则支持多达6千万个ID生成.这个数量级足可以满足大部份的需要. 为了保证所有服务器上的业务数据获取得全局唯一ID,所以通过服务的方式提供.如果考虑更大的获取量和服务的可靠性,可以部署两台ID生成服务,分别生成序列为奇和偶数,应用端通过虚拟IP指向即可. 可以通过修改以下配置项来确定递增值的起始和步增长值 <sNServiceSection xmlns="urn:IKende.com.SNService"> <sequence start="1" step="1"/> </sNServiceSection> 如果生成规则不满足需要,则可以自行修改ID生成方式 部署服务 服务是通过TCP的方式提供访问,分别提供Console和windows service两种方式来加载服务

jmeter分布式压测

血红的双手。 提交于 2019-12-16 14:17:25
JMeter5.0 分布式操作部署笔记 当JMeter处理高并发,当一台机器调了JVM还不够测试时,就可以使用分布式的形式来进行分压,分布式简单的说就是由一台 控制机 去启动JMeter配置相关参数后,通过java的RMI( Remote Method Invocation )远程到其他机器( 执行机 )进行负载。 当在处理高并发总是卡住的时候,可先尝试设置JVM(如果还没法解决,就搞个分布式) 打开jmeter.bat 搜set heap 根据自身机器内存来设置虚拟内存即可:(一般别设置太大) set HEAP=-Xms2g -Xmx8g -XX:MaxMetaspaceSize=8g 分布式部署步骤: 1. 控制机和执行机的JMeter和jdk版本尽量保持一致,环境配置得配好(JMeter5.0,jdk1.8.0) 2. 双击打开控制机中bin目录下的create-rmi-keystore.bat 填写完相关信息后,回车: 回车后,会在bin目录下产生以下文件: 把已生产的 rmi_keystore.jks 文件拷贝到执行机的bin目录下 3. 找到执行机中bin目录下的jmeter.properties,打开jmeter.properties 搜remote_host,取消注释,把后面的IP改为本机IP 搜server_port,默认端口号为1099(在端口没冲突的情况下

分布式和集群的区别是什么?

蓝咒 提交于 2019-12-16 11:06:33
作者:大闲人柴毛毛 链接:https://www.zhihu.com/question/20004877/answer/282033178 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 画了一上午,麻烦点个赞~ 下面就正经解释下三种结构的区别吧~ 单机结构 我想大家最最最熟悉的就是单机结构,一个系统业务量很小的时候所有的代码都放在一个项目中就好了,然后这个项目部署在一台服务器上就好了。整个项目所有的服务都由这台服务器提供。这就是单机结构。那么,单机结构有啥缺点呢?我想缺点是显而易见的,单机的处理能力毕竟是有限的,当你的业务增长到一定程度的时候,单机的硬件资源将无法满足你的业务需求。此时便出现了集群模式,往下接着看。 集群结构 集群模式在程序猿界有各种装逼解释,有的让你根本无法理解,其实就是一个很简单的玩意儿,且听我一一道来。 单机处理到达瓶颈的时候,你就把单机复制几份,这样就构成了一个“集群”。集群中每台服务器就叫做这个集群的一个“节点”,所有节点构成了一个集群。每个节点都提供相同的服务,那么这样系统的处理能力就相当于提升了好几倍(有几个节点就相当于提升了这么多倍)。但问题是用户的请求究竟由哪个节点来处理呢?最好能够让此时此刻负载较小的节点来处理,这样使得每个节点的压力都比较平均。要实现这个功能,就需要在所有节点之前增加一个“调度者”的角色