分布式开发

Hadoop生态圈

早过忘川 提交于 2019-11-30 08:12:40
Hadoop是Apache开源的分布式计算框架,由Java语言实现,支持对海量数据的分布式计算,其框架中最核心设计是HDFS和MapReduce。 Hadoop的优势 1)高可靠性:因为Hadoop假设计算元素和存储会出现故障,因为它维护多个工作数据副本,在出现故障时可以对失败的节点重新分布处理 2)高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。 3)高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。 4)高容错性:自动保存多份副本数据,并且能够自动将失败的任务重新分配。 Hadoop组成 1)Hadoop HDFS:一个高可靠、高吞吐量的分布式文件系统。 2)Hadoop MapReduce:一个分布式的离线并行计算框架。 3)Hadoop YARN:作业调度与集群资源管理的框架。 4)Hadoop Common:支持其他模块的工具模块。 1 Hadoop生态圈重要组件(数据处理过程的视角) 1.1 数据采集 Sqoop—— 结构化数据/数据迁入迁出工具 Flume Kafka—— 分布式日志采集工具 分布式消息队列 针对半结构化或非结构化数据 1.2 数据存储 HDFS—— 基于Hadoop的分布式文件存储系统 HBase—— 基于Hadoop的列式分布式NoSQL数据库 1.3 资源调度 YARN—— 作业调用和集群资源管理框架

面试连环炮之—分布式服务框架系类

社会主义新天地 提交于 2019-11-30 07:37:35
面试题1. 说一下的 dubbo 的工作原理?注册中心挂了可以继续通信吗?说说一次 rpc 请求的流程? 面试官心理分析 MQ、ES、Redis、Dubbo,上来先问你一些思考性的问题、原理,比如 kafka 高可用架构原理、es 分布式架构原理、redis 线程模型原理、Dubbo 工作原理;之后就是生产环境里可能会碰到的一些问题,因为每种技术引入之后生产环境都可能会碰到一些问题;再来点综合的,就是系统设计,比如让你设计一个 MQ、设计一个搜索引擎、设计一个缓存、设计一个 rpc 框架等等。 那既然开始聊分布式系统了,自然重点先聊聊 dubbo 了,毕竟 dubbo 是目前事实上大部分公司的分布式系统的 rpc 框架标准,基于 dubbo 也可以构建一整套的微服务架构。但是需要自己大量开发。 当然去年开始 spring cloud 非常火,现在大量的公司开始转向 spring cloud 了,spring cloud 人家毕竟是微服务架构的全家桶式的这么一个东西。但是因为很多公司还在用 dubbo,所以 dubbo 肯定会是目前面试的重点,何况人家 dubbo 现在重启开源社区维护了,捐献给了 apache,未来应该也还是有一定市场和地位的。 既然聊 dubbo,那肯定是先从 dubbo 原理开始聊了,你先说说 dubbo 支撑 rpc 分布式调用的架构啥的,然后说说一次 rpc

Spring Cloud异步场景分布式事务怎样做?试试RocketMQ

你离开我真会死。 提交于 2019-11-30 07:09:30
一、背景 在微服务架构中,我们常常使用异步化的手段来提升系统的 吞吐量 和 解耦 上下游,而构建异步架构最常用的手段就是使用 消息队列(MQ) ,那异步架构怎样才能实现数据一致性呢?本文主要介绍如何使用 RocketMQ 的 事务消息 来解决一致性问题。 RocketMQ 是阿里巴巴开源的分布式消息中间件,目前已成为 Apache 的顶级项目。历经多次天猫双十一海量消息考验,具有高性能、低延时和高可靠等特性 PS :同步场景怎样保证一致性?请看文章《 Spring Cloud同步场景分布式事务怎样做?试试Seata 》 二、MQ选型 可以看到在 业务处理 方面来说 RocketMQ 优于其他对手,而且原生支持 事务消息 PS :业务系统用的是其他 MQ 产品但是又需要 事务消息 怎么办?学习原理自己开发实现! 三、什么是事务消息 例如下图的场景:生成订单记录 -> MQ -> 增加积分 我们是应该先 创建订单记录 ,还是先 发送MQ消息 呢? 先发送MQ消息 :这个明显是不行的,因为如果消息发送成功,而订单创建失败的话是没办法把消息收回来的 先创建订单记录 :如果订单创建成功后MQ消息发送失败 抛出异常 ,因为两个操作都在本地事务中所以订单数据是可以 回滚 的 上面的 方式二 看似没问题,但是 网络是不可靠的 !如果 MQ 的响应因为网络原因没有收到

分布式消息中间件(一)设计

六眼飞鱼酱① 提交于 2019-11-30 03:55:19
中间件 1.概述 应用场景 单体架构 如果一个模块升级,比如订单系统,整个系统都要升级 耦合度高,开发困难 分布式架构 后台由多个系统组成 多系统协同处理一个请求可以看成分布式系统 系统之间相互调用 ,用RPC远程调用的方式实现 但这样系统之间耦合度相对较高 为了解决耦合,实现更强的扩展性架构,分布式系统中引入了消息中间件 基于消息中间件的分布式系统架构 消息中间件 利用高效可靠的消息传递机制进行平台无关的数据交流 并基于数据通信来进行分布式系统的集成 通过提供消息传递和消息排队模型,可以在分布式环境下扩展进程间的通信 消息中间件的应用场景 跨系统数据传递、高并发流量削峰、数据异步处理...等等 常用的消息中间件 ActiveMQ、RabbitMQ、Kafka、RocketMQ 核心设计 本质: 一种具备 接收请求、保存数据、发送数据 等功能的 网络应用 。 和一般网络应用程序的区别是它主要负责数据的接收和传递,所以性能一般都高于普通程序。 5大核心组成: 协议 持久化机制 消息分发机制 高可用设计 高可靠设计 2.协议 协议是计算机之间通信时共同遵从的一组约定,都遵守相同的约定,计算机之间才能相互交流。 是对数据格式和计算机之间交换数据时必须遵守的规则的正式描述。 协议三要素: 语法:即数据与控制信息的结构或格式。 语义:即需要发出何种控制信息,完成何种动作以及做出何种响应。

分布式事务选型

不打扰是莪最后的温柔 提交于 2019-11-30 03:10:48
## 分布式事务选型 ### 选型依据: - 多语言支持 - 微服务框架兼容程度 - 关系型数据库-MQ事务的支持 - 性能与稳定性以及是否支持高可用 - 业务代码侵入性 - 可拓展性 - 社区活跃度及影响力 ------ ### GTS概览 #### 针对不同的应用场景,GTS主要提供标准模式(AT)和自定义模式(MT)两种事务模式. - **AT模式**: GTS 最主要的事务模式,通过 GTS 基于 DRDS/RDS 数据源,对 sql 语句提供分布式事务的支持.他帮助应用以最小的改动代价来实现数据库的事务功能.AT 模式适用于 DRDS 分库分表/多数据库数据源/跨进程的多数据库数据源等几乎任何 DRDS 应用场景下的分布式事务. - **MT模式**: 提供给用户的一种可介入两阶段提交过程的一种模式.在这种模式下,用户可以根据自身的业务场景的需求自定义在 GTS 两阶段提交的过程中每阶段的具体行为.MT 模式提供了更多的可能性和灵活性,以达到特殊场景下的自定义特殊功能实现.**MT 模式不依赖于数据库,几乎满足任何事务场景.** #### 在 AT 和 MT 两种模式下,GTS 又提供了三种具体的使用方式: - **AT模式下,使用注解接入分布式事务** 这种方式只需要代码中依赖 GTS 的 SDK 即可.在希望引入分布式事务的方法上,仅需一行注解即可.适用场景包括

浅谈分布式锁

蹲街弑〆低调 提交于 2019-11-29 23:42:01
张岩 张岩,2016年加入京东,熟悉大型分布式系统设计及开发,有丰富的web开发实战经验,对spring等开源框架有源码级了解,目前主要负责京麦插件市场及交易平台的研发工作。 前言 随着互联网技术的不断发展,数据量的不断增加,业务逻辑日趋复杂,在这种背景下,传统的集中式系统已经无法满足我们的业务需求,分布式系统被应用在更多的场景,而在分布式系统中访问共享资源就需要一种互斥机制,来防止彼此之间的互相干扰,以保证一致性,在这种情况下,我们就需要用到分布式锁。 分布式一致性问题 首先我们先来看一个小例子: 假设某商城有一个商品库存剩10个,用户A想要买6个,用户B想要买5个,在理想状态下,用户A先买走了6了,库存减少6个还剩4个,此时用户B应该无法购买5个,给出数量不足的提示;而在真实情况下,用户A和B同时获取到商品剩10个,A买走6个,在A更新库存之前,B又买走了5个,此时B更新库存,商品还剩5个,这就是典型的电商“秒杀”活动。 从上述例子不难看出,在高并发情况下,如果不做处理将会出现各种不可预知的后果。那么在这种高并发多线程的情况下,解决问题最有效最普遍的方法就是给共享资源或对共享资源的操作加一把锁,来保证对资源的访问互斥。在Java JDK已经为我们提供了这样的锁,利用ReentrantLcok或者synchronized,即可达到资源互斥访问的目的。但是在分布式系统中

分布式系统的经典基础理论

你。 提交于 2019-11-29 23:12:42
历史优质文章: 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就够了 Java NIO 概览 分布式系统设计理念 分布式系统架构的第一原则是不要分布!这句话看似矛盾实则揭露了分布式系统的很多特征。 分布式系统的目标与要素 分布式系统的目标是提升系统的整体性能和吞吐量另外还要尽量保证分布式系统的容错性(假如增加10台服务器才达到单机运行效果2倍左右的性能,那么这个分布式系统就根本没有存在的意义)。 即使采用了分布式系统,我们也要尽力运用并发编程、高性能网络框架等等手段提升单机上的程序性能。 分布式系统设计两大思路:中心化和去中心化 1)中心化设计: 两个角色: 中心化的设计思想很简单,分布式集群中的节点机器按照角色分工,大体上分为两种角色: “领导” 和 “干活的” 角色职责: “领导”通常负责分发任务并监督“干活的”,发现谁太闲了,就想发设法地给其安排新任务,确保没有一个“干活的”能够偷懒,如果“领导”发现某个“干活的”因为劳累过度而病倒了,则是不会考虑先尝试“医治”他的,而是一脚踢出去,然后把他的任务分给其他人。其中微服务架构 Kubernetes 就恰好采用了这一设计思路。 中心化设计的问题 : 中心化的设计存在的最大问题是“领导”的安危问题,如果“领导”出了问题,则群龙无首,整个集群就奔溃了。但我们难以同时安排两个“领导”以避免单点问题

Java面试题架构篇分布式事务

拟墨画扇 提交于 2019-11-29 23:11:57
目录 前言 分布式事务方案 强一致性 2PC 两阶段提交(XA事务,阻塞) 3PC三阶段提交(非阻塞,引入超时和准备阶段) TCC模式-本质也是2PC Saga模式 最终一致性(BASE理论) 本地消息表 MQ消息队列 Paxos Raft ZAB 协议 ( Zookeeper Atomic Broadcast) 原子广播协议 总结 前言 如果只有一个数据库,所有的逻辑都在一个db完成,那么本地事务很简单就可以处理。但是,在微服务架构中,功能服务化,服务拆分化,一个业务逻辑很可能需要多个service完成,每个service操作不同的数据库,分布式事务需要一套方案来实现,本文就来集中讲述一下分布式事务的常见方案。 比如我们支付宝余额转入到余额宝,支付宝余额和余额宝是不同的服务,再比如跨行转账,从你的工商银行账户A转1000到建设银行账户B,比如订单系统和库存系统,其实有些情况下不一定要利用分布式事务,能避免尽力避免,主要看业务场景的需要,究竟是强一致性,弱一致性,还是最终一致性。 电商系统常见的例子:订单支付的时候使用红包或者优惠券,必需同时成功或者失败 常见对分布式事务场景: 跨库事务 分库分表,分库分表之后,一般可以利用mycat等数据库中间件简化开发,但是数据库中间件也面临分布式事务的问题 SOA架构(跨应用) 分布式事务方案 强一致性 2PC 两阶段提交(XA事务,阻塞)

Netty游戏服务器实战开发(8):利用redis或者zookeeper实现3pc分布式事务锁(二)。支撑腾讯系列某手游百万级流量公测

≡放荡痞女 提交于 2019-11-29 23:03:22
导读:在上篇文章中介绍了分布式事务项目的基本原理和工程组件,我们了解到了分布式事务的理论知识。处于实战的经验,我们将理论知识使用到实际项目中。所以我们将借助idea中maven工程 来实战我们的项目。 回到正文: 在上篇文章中我们已经把需要的准备工作做好了。现在我们需要将如何实现分布式3PC事务提交锁。 先睹为快 首先我们先来体验一下事务提交锁的过程,在本项目中我们将在Windows环境下搭建redis环境和zookeeper环境。下面就是我们只需一段分布式加锁程序的过程。一段执行锁发生异常的行为: 定义事物锁的类型: 我们使用分布式事务锁的时候我们需要提供如下几种类型的锁: 1:写锁,WRITE 2:读锁,READ 3:独占写锁,到时间释放:WRITE_TIME 4:强制时间锁,无论获取锁成功,强制时间锁, 到时间时间释放,FORCE_WRITE_TIME 更具上面分析我们将定义一个枚举类来枚举上面所需要的锁。NettyTransactionLockType.java package com.twjitm.transaction.transaction.enums; /** * 事物锁类型 * * @author twjitm- [Created on 2018-08-27 11:50] * @jdk java version "1.8.0_77" */ public enum

区块链学习之一:区块链技术与基本原理

隐身守侯 提交于 2019-11-29 22:02:20
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),它本质上是一个 去中心化的数据库 ,同时作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。 基本含义 : 狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式 数据结构 , 并以密码学方式保证的不可篡改和不可伪造的分布式账本。 广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。 区块链系统与结构: 基础架构模型: 一般说来,区块链系统由数据层、网络层、共识层、激励层、合约层和应用层组成。 数据层封装了底层数据区块以及相关的数据加密和时间戳等技术; 网络层则包括分布式组网机制、数据传播机制和数据验证机制等; 共识层主要封装网络节点的各类共识算法; 激励层将经济因素集成到区块链技术体系中来,主要包括经济激励的发行机制和分配机制等; 合约层主要封装各类脚本、算法和智能合约,是区块链可编程特性的基础; 应用层则封装了区块链的各种应用场景和案例。 该模型中