使用Fourinone可以完成大部分分布式并行计算需求, 但是计算过程中的故障和容灾处理是怎么进行的呢, 这里详细分析一下:
总的来说,Fourinone框架不会在设计中抛弃错误不处理或者容忍错误导致框架崩溃,框架通常会捕获所有的错误反馈给开发者去处理,但是框架本身不自作主张,替开发者考虑处理方案,只有这样框架才能从特定场景中抽象出来,给开发者更灵活的发挥和去满足各种更复杂业务容错情况。
那么框架究竟关注和不关注哪个层面的故障呢?
并行计算过程中,通常有两种类型的故障:一种是系统故障引起的计算中断(宕机和网络故障), 一种是业务逻辑意义上的错误数据。前者是框架关注的,后者是业务逻辑开发者关注的。
系统故障导致网络断掉或者宕机,框架会捕获故障信息并通告,工头在检验工人执行状态时会获知,并进行相应的业务上的故障处理,比如重发或者单独记录日志。业务逻辑意义上的错误数据,通常在工人的业务实现逻辑里去判断,比如计算结果的金额为负数是一个不符合业务要求的错误数据,这个是由开发者去控制,框架不做业务逻辑上的错误处理。
针对故障,框架又是怎样容灾的呢?
通常一个典型的分布式计算结构,由工头、工人、职介所组成,我们详细分析一下这几个角色在故障时各自如何容灾:
工头是嵌入式的,他不是一个服务程序,由嵌入他的系统new工头类并管理他的生命周期,工头不存在恢复或者容灾的概念,就好比我们写一个helloworld的main函数,很少考虑程序运行到hello, world没有输出时就宕机了。但是如果嵌入工头的系统是一个定时执行的计算任务时,也许要考虑容灾,因为涉及单点问题,可以让两个工头竞争一个分布式锁实现(
详细参考分布式锁demo)。
工人和职介所是服务程序,如果工人节点故障,职介所会实时感知,工头分配计算时会获取到最新活跃工人数量,如果是职介所节点故障,Fourinone实现了领导者选举机制,会实时切换到备份职介所上(
详细参考统一配置管理主备领导者切换)。
换句话说,如果一个工人节点在计算开始前发生故障不可用,工头通过getWaitingWorkers获取可用工人时不会包括该工人节点,因为职介所会感知每个工人的可用状态。
如果工人在计算过程中发生故障,框架会进行截获,然后提前返回计算结果,并设置结果的状态为异常。也就是正常完成计算时:result.getStatus()==WareHouse.READY
计算过程发生故障中断时:result.getStatus()==WareHouse.EXCEPTION
这样工头就可以根据检查结果的状态,来做故障时的容灾处理。
实际上也可以在工人的doTask实现方法内部捕捉业务异常,由开发者根据程序实现自由决定。
以下demo演示了Fourinone计算过程中的故障容灾处理:
FaultCtor:是一个工头实现,它调用集群中一个工人doTask执行任务,然后轮询该结果,判断结果是否完成或者是否异常,如果结果状态为异常,则打印消息。实际上这里只是简单演示机制,现实场景中,可以将任务先记录,工人执行成功后再删除并跳转下一个任务,如果异常则继续重发其他工人执行该任务,或者采用其他故障策略,统一记录到错误日志,在其他时间再另行排查处理。
FaultWorker:是一个工人实现,它模拟了一个任务执行,睡眠了8秒钟,然后再制造一个空指针异常。该工人模拟了两种系统异常状况,计算过程中可以关闭它,或者等待它运行到空指针异常查看效果,注意这里doTask本身是不抛出和捕捉异常的,由框架去处理。
运行步骤:
编译demo的java类:Javac –classpath fourinone.jar; *.java
1、 启动ParkServerDemo(它的IP端口已经在配置文件的PARK部分的SERVERS指定)
Java –classpath fourinone.jar; ParkServerDemo
2、 运行FaultWorker(传入端口号参数)
Java –classpath fourinone.jar; FaultWorker 2008
3、 运行FaultCtor
Java –classpath fourinone.jar; FaultCtor
运行后工人进入8秒中“任务执行”,这时可以将该工人进程关闭,然后会查看到工头界面输出something wrong about wks[0] result,说明框架已经屏蔽系统故障并反馈到任务结果的异常状态中,如果8秒中内不关闭,会引发另外一个空指针异常,产生同样的异常状态。
完整demo源码如下:
// ParkServerDemo
import com.fourinone.BeanContext;
public class ParkServerDemo
{
public static void main(String[] args)
{
BeanContext.startPark();
}
}
// FaultWorker
import com.fourinone.MigrantWorker;
import com.fourinone.WareHouse;
import com.fourinone.Workman;
public class FaultWorker extends MigrantWorker
{
public WareHouse doTask(WareHouse inhouse)
{
System.out.println(inhouse.getString("word"));
try{Thread.sleep(8000L);}catch(Exception ex){}
String[] strs = null;
System.out.println(strs.length);
WareHouse wh = new WareHouse("word", "hello ");
return wh;
}
public static void main(String[] args)
{
FaultWorker mw = new FaultWorker();
mw.waitWorking("localhost",Integer.parseInt(args[0]),"faultworker");
}
}
// FaultCtor
import com.fourinone.Contractor;
import com.fourinone.WareHouse;
import com.fourinone.WorkerLocal;
import java.util.ArrayList;
public class FaultCtor extends Contractor
{
public WareHouse giveTask(WareHouse inhouse)
{
WorkerLocal[] wks = getWaitingWorkers("faultworker");
System.out.println("wks.length:"+wks.length);
WareHouse wh = new WareHouse("word", "hello");
WareHouse result = wks[0].doTask(wh);
System.out.println("result:"+result);
while(true){
if(result.getStatus()==WareHouse.READY){
System.out.println("result:"+result);
break;
}
else if(result.getStatus()==WareHouse.EXCEPTION){
System.out.println("something wrong about wks[0] result");
//doTask(wh) again or put wh into log
break;
}
}
return null;
}
public static void main(String[] args)
{
FaultCtor a = new FaultCtor();
a.giveTask(null);
a.exit();
}
}
分享到:
相关推荐
《Fourinone分布式计算框架性能、压力、容灾测试报告》是针对Fourinone这一先进计算框架进行深度评估的文档,旨在验证其在大规模数据处理中的优越性。这份报告是在2021年11月于阿里巴巴集团旗下的淘宝内部完成的,...
"基于数据流的容灾技术的研究.pdf"可能专注于实时数据流的处理和容灾,可能涉及流计算、数据流复制和异常检测技术。 10. **网络容灾系统设计**: "一种网络容灾系统的设计与实现.pdf"可能讲述了如何构建网络层的...
3. **数据一致性**:为了保证在容灾过程中数据的一致性,可以通过一致性哈希算法等方法来确保所有副本的数据同步。 4. **负载均衡**:合理分配任务和数据,避免某些节点过载导致的故障风险。 5. **地理分布**:考虑...
- 在日常运维管理中,备份和容灾方案应与IT服务管理系统(ITSM)、系统上线流程等其他IT运维环节紧密结合。 9. **数据提取与分析**: - 在当前大数据时代背景下,备份数据也可用于支持数据分析业务,从中挖掘有...
例如,节点故障、网络故障、同城双活生产中心灾难和两地三中心主区域灾难等,都有相应的容灾处理机制。 报告最后总结并展望了未来数据库灾备技术的发展方向。混合业务负载的降低有助于简化容灾的复杂性;人工智能...
在智慧医疗系统中,大数据的处理和分析对医疗决策、疾病预测和患者健康管理有着深远影响。因此,备份和容灾策略必须保证大数据的完整性和可用性。这涉及到实时数据传输、电子传输、设备支持等多个层面,确保即使在...
此外,智能虚拟化模型还可以自适应地调整数据存储策略,对数据容灾过程中的各种情况进行智能决策和应对。 在研究多级和分布式数据容灾机制时,需要考虑多个因素,如数据一致性的保证、网络带宽与延迟的优化、以及...
1. 缓存技术:数据缓存存储在内存设备中,对于常用数据的操作进行备份,利用精准的计算能力识别有效的应用并备份到容灾系统中。缓存技术可以快速实现数据的备份和恢复,缩短信息故障的恢复时间。 2. 映射技术:映射...
4. **平台检查**:在部署和运行过程中,平台检查确保环境和产品的正确配置。这包括环境检查,如网络、存储和计算资源的适配性,以及产品检查,验证ASR服务是否正常工作,及时发现并解决潜在问题。 5. **在线演练**...
要验证数据是否成功地从源集群同步到了目标集群,可以使用 `GetOffsetShell` 工具来检查主题中的最新和最早偏移量。具体步骤如下: 1. 获取最新偏移量 (`-1`) 和最早偏移量 (`-2`): ```bash $ bin/kafka-run-...
在电子商务系统中,风险分析与容灾是至关重要的环节,以确保系统的稳定性和业务连续性。以下是关于这一主题的详细阐述: 首先,电子商务系统风险分析包括物理安全风险和网络安全风险两个主要方面。物理安全风险涉及...
总结来说,电商广告计费系统的容灾设计是一个复杂而细致的过程,涉及到数据的全生命周期管理,包括采集、处理、存储和一致性验证。通过优化数据流、增强缓冲能力、实施容灾策略和监控体系,可以确保系统在面对各种...
4. **符合法规要求**:许多行业和地区都有明确的规定要求企业必须具备一定的容灾备份能力。 **实时大数据容灾备份的特点**: - **高效性**:实时备份能够在数据变化的同时立即进行备份,确保数据的时效性和准确性...
这些深度集成确保了在备份和恢复过程中对各种应用的无缝支持,无论是全量备份、增量备份,还是细粒度恢复,都能高效完成。 总的来说,HPE Data Protector结合H3C备份设备的容灾备份方案,通过智能化、自动化和高效...
因此,设计中可能会考虑冗余硬件、热插拔部件、故障转移集群、数据备份策略(如定期全备和增量备份)以及灾难恢复计划。 Visio图示会详细描绘出这些元素,包括物理布局(机柜、服务器、网络设备的位置)、逻辑连接...
在构建现代化的企业IT架构中,数据中心的建设和优化是至关重要的环节。本文主要探讨了本地数据中心云...在实际部署过程中,需根据业务需求、预算和技术成熟度进行逐步规划和建设,以达到最优的业务连续性和数据安全性。
- **完整解决方案**:构建全面的容灾体系,包括存储、计算资源的备份和恢复机制。 ##### 同步与异步数据复制 - **同步数据复制**: - **特点**:数据实时性强,能够在灾难发生时保证数据的完整性,几乎没有数据...
然而,建设容灾系统并非易事,它涉及到多种技术选择和复杂的过程,常使IT管理者感到困扰。 首先,容灾系统建设的首要问题是确定要防范的灾难类型。传统的容灾技术往往侧重于硬件故障或站点级灾难的防护,如服务器...
- 数据加密与身份验证:保障数据传输和处理过程中的安全性。 - 安全漏洞检测与防御机制:预防和应对潜在的安全威胁。 - 隐私保护策略与法规遵从:确保数据处理活动符合相关法律法规要求。 4. **资源管理和优化**...