`
臻是二哥
  • 浏览: 188528 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
Group-logo
Java技术分享
浏览量:0
社区版块
存档分类
最新评论

大规模分布式系统架构与设计实战笔记3

阅读更多
千峰老师的《大规模分布式系统架构与设计实战》的第三章讲的是分布式协调的实现,在工头-职介所-工人的模型中,分布式协调实际上就是职介所相关的一些内容,包括领导(职介所)怎么产生的,当前领导宕机了怎么办,领导如何管理各个员工(工人)等等一系列问题。

在fourinone中,选取领导并不像paxos算法一样实行基于抢占的少数服从多数的策略,而是一种谦让的策略,相当领导的人在发出当领导的申请之前先问问别人想不想当领导,如果想,他自己就先忍着,如果没有其他人他才出头。这样就避免了冲突。

当领导确定后,有领导统一发号施令,同步各个机器。

而领导又是如何同步各个机器的呢?fourinone框架通过park进行配置信息管理,park提供创建和修改信息的方法,并支持轮训和监听两种方式获取变化的对象,进步保持分布式系统的配置的一致性。

import com.fourinone.BeanContext;
import com.fourinone.ParkLocal;
import com.fourinone.ObjectBean;

public class GetConfigA
{
	public static void main(String[] args)
	{
        ParkLocal pl=BeanContext.getPark();
		ObjectBean oldob=null;
		while(true)
		{
			ObjectBean newob=pl.getLastest("zhejiang","hangzhou",oldob);
			if(newob!=null)
			{
				System.out.println(newob);
				oldob=newob;
			}
		}
	}
}

import com.fourinone.BeanContext;
import com.fourinone.ParkLocal;
import com.fourinone.LastestListener;
import com.fourinone.LastestEvent;
import com.fourinone.ObjectBean;

public class GetConfigB implements LastestListener
{
	public boolean happenLastest(LastestEvent le)
	{
		ObjectBean ob = (ObjectBean)le.getSource();
		System.out.println(ob);
		return false;
	}
	
	public static void main(String[] args)
	{
		ParkLocal pl = BeanContext.getPark();
		pl.addLastestListener("zhejiang", "hangzhou", null, new GetConfigB());
	}
}

import com.fourinone.*;

public class SetConfig
{
	public static void main(String[] args)
	{
		ParkLocal pl = BeanContext.getPark();
		ObjectBean xihu = pl.create("zhejiang", "hangzhou", "xihu",AuthPolicy.OP_ALL);
		try{Thread.sleep(8000);}catch(Exception e){}
		ObjectBean yuhang = pl.update("zhejiang", "hangzhou","xihu");
		
	
	}
}

可以看到,应用程序只需要在ParkLocal中做改动,其他的机器就会感知这种变化进而使整个分布式系统保持一致。

同时,fourinone又提供了处理宕机的情况:
import com.fourinone.BeanContext;

public class ParkMasterSlave
{
	public static void main(String[] args)
	{
		String[][] master = new String[][]{{"localhost","1888"},{"localhost","1889"}};
		String[][] slave = new String[][]{{"localhost","1889"},{"localhost","1888"}};
		
		String[][] server = null;
		if(args[0].equals("M"))
			server = master;
		else if(args[0].equals("S"))
			server = slave;
		
		BeanContext.startPark(server[0][0],Integer.parseInt(server[0][1]), server);
	}
}

只需要启动一个领导和多个备用领导就可以了,当领导宕机就会有备用的领导顶上去。
0
3
分享到:
评论

相关推荐

    大规模分布式系统架构与设计实战笔记8

    《大规模分布式系统架构与设计实战笔记8》是关于构建和优化大规模分布式系统的宝贵资源,它涵盖了从基础概念到实际操作的广泛知识。这篇博文通过一个名为`GenerateData.java`的源码示例,深入探讨了分布式系统的核心...

    构建JAVA大型分布式电商项目实战高并发集群分布式系统架构PDF+视频.rar

    本项目实战教程涵盖了高并发、集群以及分布式系统架构等关键知识点,旨在帮助Java架构师提升技能,实现高性能、高可用和可扩展的电商系统。 1. **Java基础与高级特性** - Java的基础语法、面向对象编程、异常处理...

    大规模分布式存储系统 : 原理解析与架构实战

    原来的PDF版有85M,过大。这个是epud版,只有6M,方便阅读和摘抄笔记。

    千锋《锋迷商城》项目学习笔记2-分布式与微服务

    本篇笔记将着重讨论分布式系统的概念、微服务架构的特点、分布式与微服务的关联,以及在Java环境下如何实践这一架构。 首先,分布式系统是由多个通过网络连接协同工作的计算机组成的系统,它们可以跨越多个物理位置...

    etcd实战及其原理分析.pdf

    etcd是一个基于Go语言构建的开源分布式键值存储系统,设计目标是为分布式系统提供强一致性的、高可用的配置共享和服务发现功能。它专注于提供可靠的分布式键值存储,使得在分布式环境中管理和共享关键数据变得简单。...

    redis3分布式集群部署

    ### Redis 3 分布式集群部署详解 #### 一、Redis 概述 Redis (Remote Dictionary Server) 是一...通过这种方式,不仅可以有效提升 Redis 的性能和可用性,还能满足大规模应用的需求。希望本文能为读者提供参考价值。

    基于golang的分布式百万级即时通讯系统.zip

    Go语言以其简洁的语法、高效的内存管理和强大的并发能力,特别适合构建高并发、高性能的分布式系统,如即时通讯系统。 在即时通讯系统中,主要涉及到以下几个关键技术点: 1. **并发处理**:Go语言的goroutine和...

    Kubernetes(k8s)2020版入门笔记和资料(尚).zip

    总之,Kubernetes是现代云原生架构的重要组成部分,它提供了强大的容器编排能力,帮助开发者和运维人员更高效地管理大规模分布式应用。通过深入学习和实践提供的资料,你将能够掌握这一关键技术,并在实际工作中发挥...

    Doris实战笔记-be依赖包

    在IT行业中,数据库管理系统起着至关重要的作用,而Doris是一款高性能、分布式的数据仓库系统,专为在线分析处理(OLAP)设计。本篇将深入探讨Doris实战中的"BE"部分,以及与之相关的依赖包,特别是C++编程语言在...

    项目讲义 SaaS平台.rar

    标题中的“项目讲义 SaaS平台.rar”表明这是一个关于SaaS(Software as a Service)平台的项目学习资料,其中可能涵盖了构建和管理SaaS...通过深入学习和实践,可以提升在构建大规模分布式系统和SaaS平台方面的技能。

    hadoop实战——初级部分学习笔记 2

    3. **生态系统架构** - **Pig**:一种高级语言,用于简化MapReduce任务的编写过程。 - **Hive**:一种数据仓库工具,提供类似SQL的查询语言来访问Hadoop数据。 - **HBase**:一种分布式的、面向列的数据库系统。 ...

    Dubbo入门到精通架构高级课程(视频+课件+源码)

    【Dubbo入门到精通架构高级课程】是一门深入解析Dubbo框架...通过这个全面的课程,无论你是初涉分布式系统的开发者还是寻求提升的Java工程师,都将能够熟练掌握Dubbo的使用,并具备构建和维护大规模分布式服务的能力。

    hadoopprocessing-ma开发笔记

    Hadoop是一个开源框架,专为分布式存储和处理大规模数据集而设计。这个开发笔记可能深入探讨了Hadoop的核心组件,包括HDFS(Hadoop分布式文件系统)和MapReduce编程模型。 【描述】虽然描述简洁,但我们可以推测这...

    华为工程师总结的笔记.docx

    3. **CentOS Linux系统管理**:涵盖CentOS的日常管理,包括系统启动与关机、用户环境设置、文件系统管理等。 4. **Linux必备命令**:这是Linux操作的核心,学习如cd、ls、mkdir、rm等基本命令,以及管道、重定向等...

    SSM实战项目——Java高并发秒杀API,详细流程+学习笔记

    5. **读写分离与分库分表**:对于大规模的秒杀系统,可能需要对数据库进行读写分离和水平扩展,通过分库分表策略减轻单库压力。 6. **数据库优化**:使用索引优化查询效率,设计合理的数据模型,减少join操作,避免...

    hadoop学习笔记

    2. MapReduce:并行计算模型,将大规模数据处理任务分解为“映射”(map)和“化简”(reduce)两个阶段,实现数据的分布式处理。 二、Hadoop架构 Hadoop架构包含NameNode、DataNode、JobTracker和TaskTracker等关键...

Global site tag (gtag.js) - Google Analytics