分布式部署

分布式任务调度的解决方案

限于喜欢 提交于 2020-02-26 22:13:33
简介 随着系统规模的发展,定时任务数量日益增多,任务也变得越来越复杂,尤其是在分布式环境下,存在多个业务系统,每个业务系统都有定时任务的需求,如果都在自身系统中调度,一方面增加业务系统的复杂度,另一方面也不方便管理,因此需要有一个任务平台对分散的任务进行统一管理调度,基于目前的情况,任务平台需要支持以下几个方面: 1、任务统一管理,提供图形化界面对任务进行配置和调度。 2、任务并发控制,同一个任务在同一时间只能允许一个执行。 3、任务弹性扩容,可根据繁忙情况动态增减服务器分摊压力,对大任务进行分片处理。 4、任务依赖问题,能够处理任务包含子任务的情况,前一个完成后触发子任务执行。 5、支持多类型的任务,支持Spring Bean、Shell等。 6、任务节点高可用,任务节点异常或者繁忙时能够转移到其他节点执行。 7、调度中心高可用,支持集群部署,避免出现单点故障。 8、执行状态监控,方便查看任务执行状态,异常情况告警,支持多渠道通知。 发展史 定时任务随着技术发展,从单线程调度到多线程调度,从单机部署到集群部署,从独立执行到多任务协同执行。 第一阶段 单线程调度,在Java1.5之前,基于线程的等待(sleep或wait)机制定时执行,需要开发者实现调度逻辑,单个线程(Thread)处理单个任务有些浪费,但是一个线程(Timer)处理多个任务容易因为某个任务繁忙导致其他任务阻塞。

ZooKeeper | 安装部署、应用场景、开发对接API

早过忘川 提交于 2020-02-26 08:19:36
当设计一个分布式系统或微服务架构系统时,一般需要设计和开发一些协调服务。Apache ZooKeeper是一个分布式、开源的分布式应用协调服务,也可理解成一个为分布式应用提供一致性服务的应用程序,主要作用可简化分布式系统搭建及缩短开发周期。ZooKeeper是目前常用的开源解决方案之一。 本文主要针对ZooKeeper的安装部署、应用场景、开发对接API等,作简单入门级整理介绍,方便开发人员后续深入研究。 ZooKeeper是什么? ZooKeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题。提供基于类似于文件系统的目录节点树方式的数据存储,ZooKeeper的作用主要是用来维护和监控存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。 ZooKeeper 虽然是一个针对分布式系统的协调服务,但它本身也是一个分布式应用程序。ZooKeeper 遵循一个简单的客户端-服务器模型。 ▲ ZooKeeper 的客户端-服务器架构 ZooKeeper 有一个类似于文件系统的数据模型,由 znodes 组成。 每个 ZooKeeper 服务器还在磁盘上维护了一个事务日志,记录所有的写入请求。 在启动 ZooKeeper 服务时,集合体中的某个节点被选举为领导者;节点数量应该是奇数。 Zookeeper 从设计模式角度来看

还没弄懂分布式场景下数据一致性问题?一文教你轻松解决!

一世执手 提交于 2020-02-26 03:23:33
文章纲要 此次分享的缘由 目前分布式事务问题是怎么解决的 行业中有什么解决方案 这些解决方案分别有什么优缺点 别人是怎么做的 我们可以怎么来做 此次分享的缘由 支付重构 考虑支付重构的时候,自然想到原本属于一个本地事务中的处理,现在要跨应用了要怎么处理。拿充值订单举个栗子吧,假设:原本订单模块和账户模块是放在一起的,现在需要做服务拆分,拆分成订单服务,账户服务。原本收到充值回调后,可以将修改订单状态和增加金币放在一个mysql事务中完成的,但是呢,因为服务拆分了,就面临着需要协调2个服务才能完成这个事务 所以就带出来,我们今天要分享和讨论的话题是: 怎么解决分布式场景下数据一致性问题,暂且用分布式事务来定义吧。 同样的问题还存在于其他的场景: 送礼: 调用支付服务:先扣送礼用户的金币,然后给主播加相应的荔枝,确认第一步成功后,播放特效,发聊天室送礼评论等复制代码 充值成功消息: 完成充值订单,发送订单完成的kafka消息,在涉及支付交易等付费接口的时候,数据一致性的问题就显得尤为重要,因为都是钱啊 目前分布式事务是怎么解决的呢? 问题肯定不是新问题,也就是目前已经有相应的解决方案了,那就看一下现在是怎么来解决这类问题的吧。 以购买基础商品成功后发送支付订单完成消息为例:假设支付下单购买基础商品,此刻已经收到支付回调,订单已经处理成功了,这个时候kafka服务故障,消息发送失败

分布式系统ID生成方案

久未见 提交于 2020-02-26 02:17:49
自增ID 不错,可以限度抑制ID的大小。但需要有一个中心化的节点作为解决原子性问题。可以选用Redis,MySQL,Zookeeper。成本有点高。 UUID 分布式,而且唯一!缺点是生产的ID太长。 Twitter的SnowFlake算法 该算法可以 生产分布式的自增ID 。切生产的ID只有8字节,64位。其数据结构如下: 1位 ,不用。二进制中最高位为1的都是负数,但是我们生成的id一般都使用整数,所以这个最高位固定是0 41位 ,用来记录时间戳(毫秒)。 41位可以表示 2 41 − 1 个数字, 如果只用来表示正整数(计算机中正数包含0),可以表示的数值范围是:0 至 2 41 − 1 ,减1是因为可表示的数值范围是从0开始算的,而不是1。 也就是说41位可以表示 2 41 − 1 个毫秒的值,转化成单位年则是 ( 2 41 − 1 ) / ( 1000 ∗ 60 ∗ 60 ∗ 24 ∗ 365 ) = 69 年 10位 ,用来记录工作机器id。 可以部署在 2 10 = 1024 个节点,包括 5位datacenterId 和 5位workerId 5位(bit) 可以表示的最大正整数是 2 5 − 1 = 31 ,即可以用0、1、2、3、....31这32个数字,来表示不同的datecenterId或workerId 12位 ,序列号,用来记录同毫秒内产生的不同id。

分布式调度平台 xxl-job 个人改进(灌水)思路

旧街凉风 提交于 2020-02-26 02:06:09
分布式调度平台 xxl-job 个人改进(灌水)思路 本人 刚入门 后端开发, 错误之处请批评指正 被导师安排的🌚 本人于2019年9月6日与同事进行的分享 1 xxl-job 是什么 1.1 xxl-job 是什么 轻量级、易扩展的分布式任务调度框架 通过Cron表达式配置计划任务 0 0/30 9-18 ? * MON-FRI 朝九晚六每半个小时执行 支持多语言(Java、Shell、Python、NodeJS、PHP、PowerShell 等,需要执行器部署环境支持),任务逻辑可在 Web 界面编写代码,或在执行器编写代码 1.2 常见任务调度框架 Quartz Java 常用计划任务框架,虽然 Quartz 可以基于数据库实现作业的高可用,但分布式并行调度方面有所欠缺。 elastic-job 当当开发的弹性分布式任务调度系统,功能丰富强大,采用 zookeeper 实现分布式协调,实现任务高可用以及分片。 xxl-job 是大众点评员工徐雪里于2015年发布的分布式任务调度平台,是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。 1.3 xxl-job 与 elastic-job 怎么选 xxl-job 核心设计目标是开发迅速、学习简单、轻量级、易扩展 登记在用公司数>228家 开箱即用 持续更新,社区活跃、文档齐全 elastic

SpringCloud创建微服务电商项目

烈酒焚心 提交于 2020-02-24 07:46:03
技术选型 A. 项目采用SpringBoot2.x+SpringCloud2.x构建微服务电商项目 1.使用SpringCloudEureka作为注册中心,实现服务治理 2.使用Zuul网关框架管理服务请求入口 3.使用Ribbon实现本地负载均衡器和FeginHttp客户端调用工具 4.使用Hystrix服务保护框架(服务降级、隔离、熔断、限流) 5.使用消息总线Stream RabbitMQ和Kafka 6.微服务API接口安全控制与单点登陆系统CAS+JWT+Oauth2.0 B. 分布式基础设施环境构建 1.分布式任务调度平台XXL-Job 2.分布式日志采集系统ELK 3.分布式事务解决方案LCN 4.分布式锁解决方案Zookeeper、Redis 5.分布式配置中心携程阿波罗 6.高并发分布式全局ID生成雪花算法 7.分布式Session框架Spring-Session 8.分布式服务追踪与调用链ZipKin C.项目运营与部署环境 1.分布式设施环境,统一采用docker安装 2.使用jenkins+docker+k8s实现自动部署 3.微服务API管理ApiSwagger 4.使用GitLab代码管理 5.统一采用第三方云数据库 6.使用七牛云服务器对静态资源实现加速 第一节 需求讨论与技术架构选型 第二节 微服务架构环境搭建Maven私服仓库

Flink的入门

◇◆丶佛笑我妖孽 提交于 2020-02-22 14:34:13
Apache Flink(下简称Flink)项目是大数据处理领域最近冉冉升起的一颗新星,其不同于其他大数据项目的诸多特性吸引了越来越多人的关注。本文将深入分析Flink的一些关键技术与特性,希望能够帮助读者对Flink有更加深入的了解,对其他大数据系统开发者也能有所裨益。本文假设读者已对MapReduce、Spark及Storm等大数据处理框架有所了解,同时熟悉流处理与批处理的基本概念。 Flink简介 Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。基于流执行引擎,Flink提供了诸多更高抽象层的API以便用户编写分布式任务: DataSet API, 对静态数据进行批处理操作,将静态数据抽象成分布式的数据集,用户可以方便地使用Flink提供的各种操作符对分布式数据集进行处理,支持Java、Scala和Python。 DataStream API,对数据流进行流处理操作,将流式的数据抽象成分布式的数据流,用户可以方便地对分布式数据流进行各种操作,支持Java和Scala。 Table API,对结构化数据进行查询操作,将结构化数据抽象成关系表,并通过类SQL的DSL对关系表进行各种查询操作,支持Java和Scala。 此外,Flink还针对特定的应用领域提供了领域库,例如: Flink ML,Flink的机器学习库

分布式存储ceph——(1)部署ceph

风流意气都作罢 提交于 2020-02-21 16:29:10
前言: 很多朋友想学ceph,但是开始ceph部署就让初学者举步为艰,ceph部署时由于国外源的问题(具体大家应该懂得),下载和安装软件便会卡住,停止不前。即使配置搭建了国内源后,执行ceph-deploy install 时又跑去了国外的源下载,很是无语呀!!!这样导致我们停下了学习ceph的脚步,所以笔者就在这里编写了这篇文章,只要掌握了通过国内源找到并下载对应正确的ceph版本rpm包到本地,部署ceph简直小意思! 一、部署准备: 准备5台机器(linux系统为centos7.6版本),当然也可以至少3台机器并充当部署节点和客户端,可以与ceph节点共用: 1台部署节点(配一块硬盘,运行ceph-depoly) 3台ceph节点(配两块硬盘,第一块为系统盘并运行mon,第二块作为osd数据盘) 1台客户端(可以使用ceph提供的文件系统,块存储,对象存储) (1)所有ceph集群节点(包括客户端)设置静态域名解析; 1 2 3 4 5 6 7 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.254.163 dlp

Apache Spark探秘:三种分布式部署方式比较

我的未来我决定 提交于 2020-02-21 08:16:54
目前Apache Spark支持三种分布式部署方式,分别是standalone、spark on mesos 和 spark on YARN ,其中,第一种类似于MapReduce 1.0所采用的模式,内部实现了容错性和资源管理,后两种则是未来发展的趋势,部分容错性和资源管理交由统一的资源管理系统完成:让Spark运行在一个通用的资源管理系统之上,这样可以与其他计算框架,比如MapReduce,公用一个集群资源,最大的好处是降低运维成本和提高资源利用率(资源按需分配)。本文将介绍这三种部署方式,并比较其优缺点。 standalone模式 ,即独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。从一定程度上说,该模式是其他两种的基础。借鉴Spark开发模式,我们可以得到一种开发新型计算框架的一般思路:先设计出它的standalone模式,为了快速开发,起初不需要考虑服务(比如master/slave)的容错性,之后再开发相应的wrapper,将stanlone模式下的服务原封不动的部署到资源管理系统yarn或者mesos上,由资源管理系统负责服务本身的容错。目前Spark在standalone模式下是没有任何单点故障问题的,这是借助zookeeper实现的,思想类似于Hbase master单点故障解决方案。将Spark

Java分布式 一些概念理解

十年热恋 提交于 2020-02-21 07:27:31
转至 java那些事 2017-02-09 有些朋友工作一年了觉得该深入一下子了,所以想深入学习一下以提升自己的专业技能,想问一下如何入门Java分布式应用,学习过程大致是怎么样的,涉及到那些知识,框架呢?有那些资料可以推荐? 所以在网络上找了一些资源给大家分享一下! 首先推荐4本书(京东就有) 大型分布式网站架构设计与实践 大型网站技术架构:核心原理与案例分析》 ,大型网站系统与Java中间件实践 《分布式Java应用:基础与实践》 貌似都是4位阿里人写的,一本一本的看吧,绝对会增强你的内功。 小小的总结 分布式架构的演进 系统架构演化历程-初始阶段架构 初始阶段 的小型系统 应用程序、数据库、文件等所有的资源都在一台服务器上通俗称为LAMP 特征: 应用程序、数据库、文件等所有的资源都在一台服务器上。 描述: 通常服务器操作系统使用linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用Mysql,汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了。 系统架构演化历程-应用服务和数据服务分离 好景不长,发现随着系统访问量的再度增加,webserver机器的压力在高峰期会上升到比较高,这个时候开始考虑增加一台webserver 特征: 应用程序、数据库、文件分别部署在独立的资源上。 描述: 数据量增加,单台服务器性能及存储空间不足