分布式

k神吹水之 聊聊分布式事务 转载

末鹿安然 提交于 2019-12-03 22:55:15
事务就是一个会话过程中,对上下文的影响是一致的,要么所有的更改都做了,要么所有的更变都撤销掉。就要么生,要么死。没有半死不死的中间不可预期状态。 参考下薛定谔的猫。 事务是为了保障业务数据的完整性和准确性的。 分布式事务,常见的两个处理办法就是两段式提交和补偿。 两段式提交典型的就是XA,有个事务协调器,告诉大家,来都准备好提交,大家回复,都准备好了,然后协调器告诉大家,一起提交,大家都提交了。 补偿比较好理解,先处理业务,然后定时或者回调里,检查状态是不是一致的,如果不一致采用某个策略,强制状态到某个结束状态(一般是失败状态),然后就世界太平了。典型的就是冲正操作。 准备好了以后,如果没有问题,收到提交,所有人都开始提交。 这个时候,比如对数据库来说,有redo日志的。 如果某个数据库这时候宕机了,那么它重启的时候,先执行检查,也会把上一次的这些操作都提交掉的。所以各个点的数据都是一致的。 问题 1:比如 一个业务要调用很多的服务都是写操作,如果有其中一个写的服务失败了,怎么办 ?假设 4个写的吧,有2个写失败了 。 kimmking:淘宝之类的网站一般的做法是,如果4个都成功才算成功,那么这次提交时4个写都设置成一个中间状态,先容许不一致。然后4个执行完成了以后,回调或是定时任务里检查这4个数据是不是一致的,如果一致就全部置为成功状态,如果不一致就全部置为失败。

搭建分布式架构2--CentOs下安装Tomcat7(环境准备)

家住魔仙堡 提交于 2019-12-03 21:10:20
声明:因为运行环境是基于linux系统的,在做此框架之前需要做一些前期的环境准备工作 CentOs下安装Tomcat7网上很多实例,因为博客后期作为框架的原生教程,故这边做详细的安装记录,我这边已经下载好了Tomcat7,通过ssh已经上传到指定的目录,这里直接讲解安装的过程。 1. 安装tomcat 通过ssh将apache-tomcat-7.0.61.tar.gz文件上传到/usr/local中执行以下操作: [root@cloud /] cd /usr/local [root@cloud /] tar -zxvf apache-tomcat-7.0.61.tar.gz [root@cloud /] mv apache-tomcat-7.0.61 tomcat 2. 启动Tomcat [root @cloud ~]# /usr/local/tomcat/bin/startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /home/java/jdk1.7/ Using CLASSPATH: /usr/local/tomcat/bin

Hadoop上路_02-hadoop介绍和环境准备

空扰寡人 提交于 2019-12-03 20:05:45
Hadoop 介绍: 1. Hadoop 项目组成: 1 ) hadoop Common : hadoop 的核心 。包括文件系统、远程调用 RPC 的序列化函数。 2 ) HDSF : 高吞吐量分布式文件系统。是 GFS 的开源实现。通过 hadoop fs命令来读取。 3 ) MapReduce : 大型分布式合并 / 计算数据处理模型 。Google MapReduce 的开源实现。 4 )其它 : Cassandra : 由 Facebook 开发分布式数据仓库。 apache 已经将 Cassandra 应用到各种云计算系统中。 Hbase : 结构化分部式数据库。 BigTable 的开源实现。 Hive : 提供摘要和查询功能的数据仓库。 2. Hadoop 系统构成: 每个节点都是一个 Java 进程。 namenode:主控节点 在一个hadoop系统中只有一个namenode。一旦主控服务器宕机,整个系统将无法运行。 namenode 是整个 hadoop系统的守护进程。 负责记录文件是如何分割成数据块。 管理数据块分别存储到哪些数据节点上。 对内存进行集中管理。 secondarynamenode:辅助节点 监控 HDFS 状态的辅助后台程序。如保存 namenode 的快照。 jobtracker:下发任务(拆分数据) 用户连接应用程序和 hadoop

Hadoop上路_01-手动制作hadoop-eclipse-plugin插件

南笙酒味 提交于 2019-12-03 20:05:24
一.环境准备: 1.VirtualBox 虚拟机: VirtualBox-4.2.8-83876-Win.exe 1 )安装扩展: Oracle_VM_VirtualBox_Extension_Pack-4.2.8-83876.vbox-extpack 2 )开启网络(必需连接到互联网): 3 )安装 Ubuntu : ubuntu-10.04-desktop-i386.iso (1)安装: ( 2 )启用粘贴板共享和拖放支持: ( 3 )安装增强功能: ( 4 )初始化 root 用户: sudo passwd root 2. 安装 jdk ,配置环境变量: jdk-6u24-linux-i586.bin sudo chmod u+x jdk-6u24-linux-i586.bin sudo -s ./jdk-6u24-linux-i586.bin sudo gedit /etc/profile export JAVA_HOME=%JDK% export CLASSPATH=$JAVA_HOME/lib export PATH=$JAVA_HOME/bin:$PATH source /etc/profile 或 jdk-7u17-linux-i586.tar.gz ( 本例使用 ) sudo tar -xzvf jdk-7u17-linux-i586.tar.gz sudo

Hadoop上路_06-在Ubuntu中使用eclipse操作HDFS

别说谁变了你拦得住时间么 提交于 2019-12-03 20:05:09
1. 解压 eclipse : eclipse-SDK-4.2-linux-gtk.tar.gz ( 1 )解压程序文件: hm@hm-ubuntu:/usr$ sudo tar eclipse.tar.gz ( 2 )在 Ubuntu 桌面点鼠标右键, 创建启动器: ( 3 )在“命令”选择 eclipse 执行文件: 2. 安装 hadoop 开发插件: hadoop-eclipse-plugin-*.jar 插件须符合此 eclipse 版本。 ( 1 )手动制作 hadoop-eclipse-plugin 插件 见《Hadoop上路_01-手动制作hadoop-eclipse-plugin插件 》 ( 2 )把插件放入 %eclipse%/dropins/hadoop/plugins 目录 首先在 %eclipse%/dropins/ 中创建 hadoop/plugins 层级目录 3. 执行快捷方式: 错误: 重新配置了环境变量中的 jdk 路径, eclipse 不能检测到新路径 解决: 更新环境变量后重启系统 4. 配置 Hadoop 视图: 1 ) window -> preferences -> Hadoop Map/Reduce , 配置任意 hadoop 解压目录(仅在创建 Map/Reduce Project 项目时供自动加载 jar 包用;如果创建

Hadoop上路_10-分布式Hadoop集群搭建

拥有回忆 提交于 2019-12-03 19:47:31
1. 创建模板系统: 参照前文。本例使用 ubuntu10.10 。初始化用户 hadoop ,密码 dg ,主机名 hadoop-dg 。 1 )解压 jdk 、 hadoop ,配置 bin 到环境变量: jdk1.7.0_17 hadoop-1.1.2 2 )配置 %hadoop%/conf/hadoop-env.sh : export JAVA_HOME=/jdk目录 3 )安装 openssh ,尚不配置无密码登陆: openssh-client openssh-service openssh-all 4 )配置网卡静态 IP 、 hostname 、 hosts : #查看网卡名称 ifconfig #配置网卡参数 sudo gedit /etc/network/interfaces auto eth0 iface eth0 inet static address 192.168.1.251 gateway 192.168.1.1 netmask 255.255.255.0 #重启网卡 sudo /etc/init.d/networking restart #修改hostname sudo gedit /etc/hostname hadoop-dg #修改hosts sudo gedit /etc/hosts 127.0.0.1 hadoop-dg 192.168.1

使用 RMI + ZooKeeper 实现远程调用框架

旧时模样 提交于 2019-12-03 19:20:32
在 Java 世界里,有一种技术可以实现“跨虚拟机”的调用,它就是 RMI (Remote Method Invocation,远程方法调用)。例如,服务A 在 JVM1 中运行,服务B 在 JVM2 中运行,服务A 与 服务B 可相互进行远程调用,就像调用本地方法一样,这就是 RMI。在分布式系统中,我们使用 RMI 技术可轻松将 服务提供者 (Service Provider)与 服务消费者 (Service Consumer)进行分离,充分体现组件之间的弱耦合,系统架构更易于扩展。 本文先从通过一个最简单的 RMI 服务与调用示例,让读者快速掌握 RMI 的使用方法,然后指出 RMI 的局限性,最后笔者对此问题提供了一种简单的解决方案,即使用 ZooKeeper 轻松解决 RMI 调用过程中所涉及的问题。 下面我们就从一个最简单的 RMI 示例开始吧! 1 发布 RMI 服务 发布一个 RMI 服务,我们只需做三件事情: 定义一个 RMI 接口 编写 RMI 接口的实现类 通过 JNDI 发布 RMI 服务 1.1 定义一个 RMI 接口 RMI 接口实际上还是一个普通的 Java 接口,只是 RMI 接口必须继承 java.rmi.Remote ,此外,每个 RMI 接口的方法必须声明抛出一个 java.rmi.RemoteException 异常,就像下面这样: <!--

memcached全面剖析–4. memcached的分布式算法

可紊 提交于 2019-12-03 00:16:57
版权声明 :可以任意转载,但转载时必须标明原作者charlee、原始链接 http://tech.idv2.com/2008/07/24/memcached-004/ 以及本声明. 之前介绍了memcached的内部情况。本次不再介绍memcached的内部结构, 开始介绍memcached的分布式。 memcached的分布式 正如 第1次 中介绍的那样, memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能。 服务器端仅包括 第2次 、 第3次 前坂介绍的内存存储功能,其实现非常简单。 至于memcached的分布式,则是完全由客户端程序库实现的。 这种分布式是memcached的最大特点。 memcached的分布式是什么意思? 这里多次使用了“分布式”这个词,但并未做详细解释。 现在开始简单地介绍一下其原理,各个客户端的实现基本相同。 下面假设memcached服务器有node1~node3三台, 应用程序要保存键名为“tokyo”“kanagawa”“chiba”“saitama”“gunma” 的数据。 图1 分布式简介:准备 首先向memcached中添加“tokyo”。将“tokyo”传给客户端程序库后, 客户端实现的算法就会根据“键”来决定保存数据的memcached服务器。 服务器选定后,即命令它保存“tokyo”及其值。 图2

分布式设计与开发(三)------高一致性服务ZooKeeper

别等时光非礼了梦想. 提交于 2019-12-02 21:12:47
分布式环境中大多数服务是允许部分失败,也允许数据不一致,但有些最基础的服务是需要高可靠性,高一致性的,这些服务是其他分布式服务运转的基础,比如naming service、分布式lock等,这些分布式的基础服务有以下要求: 高可用性 高一致性 高性能 对于这种有些挑战 CAP原则 的服务该如何设计,是一个挑战,也是一个不错的研究课题,Apache的ZooKeeper也许给了我们一个不错的答案。ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务, 它暴露了一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。关于ZooKeeper更多信息可以参见 官方文档 ZooKeeper的基本使用 搭一个分布式的ZooKeeper环境比较简单,基本步骤如下: 1)在各服务器安装 ZooKeeper 下载ZooKeeper后在各服务器上进行解压即可 tar -xzf zookeeper-3.2.2.tar.gz 2)配置集群环境 分别各服务器的zookeeper安装目录下创建名为zoo.cfg的配置文件,内容填写如下: # The number of milliseconds of each tick tickTime = 2000 # The number of ticks that the initial # synchronization phase

Build self-healing distributed systems with Spring

≡放荡痞女 提交于 2019-12-02 19:48:26
原文链接: http://www.infoworld.com/article/2925047/application-development/build-self-healing-distributed-systems-with-spring-cloud.html 这篇文章介绍了如何 Spring Cloud 是如何帮助构建一个高可用的分布式系统的。在同类文章算是介绍的很不错的,感觉比 Spring Blog 里面的文章还要更全面易懂。 文章开始先介绍了构建分布式系统时会遇到的各种需要解决的问题,然后分别由这些问题引出 Spring Cloud 中的各种技术。 Spring Cloud Config Server Spring Cloud Config Server 以 Git、SVN 等 VCS 系统存储 properties、yml 等格式的配置文件,构建了一个可横向伸缩的配置服务器。且不说使用效果怎么样,这个思想还是很有启发性的。配置文件通常是文本文件,用 VCS 存储是顺理成章的,同时还具备了版本控制功能,使得配置的变化被记录了下来。再在这个基础之上,加上横向伸缩的能力,便成为了一个很不错的配置服务器。 Spring Cloud Bus Spring Cloud Bus 为 Spring 应用提供了 Message Broker 的功能。目前的唯一实现是基于 AMQP 的