分布式部署

分布式文件系统MFS(moosefs)实现存储共享(第二版)

若如初见. 提交于 2019-12-27 03:48:52
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 分布式文件系统MFS(moosefs)实现存储共享(第二版) 作者:田逸( 这种架构除了性能问题而外,还存在单点故障,一旦这个NFS服务器发生故障,所有靠共享提供数据的应用就不再可用,尽管用rsync方式同步数据到另外一个服务器上做nfs服务的备份,但这对提高整个系统的性能毫无帮助。基于这样一种需求,我们需要对nfs服务器进行优化或采取别的解决方案,然而优化并不能对应对日益增多的客户端的性能要求,因此唯一的选择只能是采取别的解决方案了;通过调研,分布式文件系统是一个比较合适的选择。采用分布式文件系统后,服务器之间的数据访问不再是一对多的关系(1个NFS服务器,多个NFS客户端),而是多对多的关系,这样一来,性能大幅提升毫无问题。 到目前为止,有数十种以上的分布式文件系统解决方案可供选择,如lustre,hadoop,Pnfs等等。我尝试了PVFS,hadoop,moosefs这三种应用,参看了lustre、KFS等诸多技术实施方法,最后我选择了moosefs(以下简称MFS)这种分布式文件系统来作为我的共享存储服务器。为什么要选它呢?我来说说我的一些看法: 1、 实施起来简单。MFS的安装、部署、配置相对于其他几种工具来说,要简单和容易得多。看看lustre 700多页的pdf文档,让人头昏吧。 2、

Fastdfs分布式文件系统的应用

爱⌒轻易说出口 提交于 2019-12-26 17:13:34
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 26 MARCH 2016 on fastdfs, 分布式文件系统 我们在实际项目中常常遇到这样的应用场景,用户需要上传图片,小视频或者其它文档,这些文件的大小一般在10M以内。它们很多,而且对用户来说可能还很重要,而且可能还要经常被访问,被下载,如何妥善保存这些文件就是一个需要解决的问题。 解决这个问题需要两点:一个是文件冗余备份,保证用户的文件不会丢失,另一个是高可用性,也就是说当文件服务器出现故障的时候,可以立刻让备份服务器为用户提供服务,使用户感觉不到有什么异常。 那么我们不妨分析下有哪几种解决方案: 1.粗放型: 直接作为blob字段存数据库里,利用数据库的容灾备份和HA来保障文件安全。其实这种方案是最安全的,但是显然数据库不是用来做这个的,因为太占数据库空间。不过由于其安全性最高,笔者在之前某个项目中曾经被要求这么干,因为保存的是客户的合同文件。但是类似社交网络的图片文件是没必要这么做的。 2.简约型: 直接存文件系统。如果有多台应用服务器同时提供文件上传服务,那么就准备一台文件服务器,分别挂载到所有应用服务器的指定路径下,实现多台应用服务器的文件写入,同时还可以配置读取静态文件更高效的nginx或者lighttpd来负责文件的读取。这样的好处是配置简单,管理方便(要不怎么叫简约型),不过缺点也很大

分布式配置中心(Native - Config)

梦想的初衷 提交于 2019-12-26 14:44:54
本章只讲 Spring Cloud 本地配置方式,可以很方便的高可用集群,且存在良好通讯,不用担心云服务器与内网之间GIT带来的不便,GIT(网上GIT教程一搜一大把了….) - 快速开始 Spring Cloud Config为分布式系统中的外部配置,提供了服务器和客户端支持。使用Config Server,您可以在所有环境中管理应用程序的外部属性。客户端和服务器映射的概念与Spring Environment和PropertySource抽象相同,因此它们与Spring应用程序非常契合,但可以与任何以任何语言运行的应用程序一起使用。随着应用程序通过从开发人员到测试和生产的部署流程,您可以管理这些环境之间的配置,并确定应用程序具有迁移时需要运行的一切。服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可用于管理内容的各种工具。可以轻松添加替代实现,并使用Spring配置将其插入 官方文档: http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#_spring_cloud_config - 服务架构图 服务架构图 画图工具 : https://www.processon.com/ - 准备工作 1.创建 battcn-config-server 和 battcn-config-client

自己动手实现分布式任务调度框架(续)

删除回忆录丶 提交于 2019-12-25 17:19:04
  之前写过一篇: 自己动手实现分布式任务调度框架 本来是用来闲来分享一下自己的思维方式,时至今日发现居然有些人正在使用了,本着对代码负责任的态度,对代码部分已知bug进行了修改,并增加了若干功能,如立即启动,实时停止等功能,新增加的功能会在这一篇做详细的说明。   提到分布式任务调度,市面上本身已经有一些框架工具可以使用,但是个人觉得功能做的都太丰富,架构都过于复杂,所以才有了我重复造轮子。个人喜欢把复杂的问题简单化,利用有限的资源实现竟可能多的功能。因为有几个朋友问部署方式,这里再次强调下:我的这个服务可以直接打成jar放在自己本地仓库,然后依赖进去,或者直接copy代码过去,当成自己项目的一部分就可以了。也就是说跟随你们自己的项目启动,所以我这里也没有写界面。下面先谈谈怎么基于上次的代码实现任务立即启动吧!   调度和自己服务整合后部署图抽象成如下:      用户在前端点击立即请求按钮,通过各种负载均衡软件或者设备,到达某台机器的某个带有本调度框架的服务,然后进行具体的执行,也就是说这个立即启动就是一个最常见最简单的请求,没有过多复杂的问题(比如多节点会不会重复执行这些)。最简单的办法,当用户请求过来直接用一个线程或者线程池执行用户点的那个任务的逻辑代码就行了,当然我这里没有那么粗暴,现有的调度代码资源如下: package com.rdpaas.task

Docker - 分布式任务调度中心 - xxl-job

早过忘川 提交于 2019-12-25 00:26:14
文章目录 Docker - 分布式任务调度中心 - xxl-job 1、初始化“调度数据库” 2、调度中心配置文件详解 3、拉取镜像 4、创建容器并运行 5、管理,设置容器 6、进入控制面板 Docker - 分布式任务调度中心 - xxl-job 1、初始化“调度数据库” 获取调度数据库脚本最新版 : Git EE 传送门 https://gitee.com/xuxueli0323/xxl-job/blob/master/doc/db/tables_xxl_job.sql GitHub 传送门 https://github.com/xuxueli/xxl-job/blob/master/doc/db/tables_xxl_job.sql 脚本如下,更新时间 2019年12月23日 16:26:06 # # XXL-JOB v2.2.0-SNAPSHOT # Copyright (c) 2015-present, xuxueli. CREATE database if NOT EXISTS ` xxl_job ` default character set utf8mb4 collate utf8mb4_unicode_ci ; use ` xxl_job ` ; CREATE TABLE ` xxl_job_info ` ( ` id ` int ( 11 ) NOT NULL

Elastic-Job

旧时模样 提交于 2019-12-24 13:58:20
什么是Elastic-Job Elastic-Job是当当网大牛基于Zookepper,Quartz开发并且开源的Java分布式定时任务,解决Quartz不支持分布式的弊端。它由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。 基本概念 分片概念:任务分布式的执行,需要将一个任务拆分成多个独立的任务项,然后由分布式的服务器分别执行某一个或几个分片项 个性化参数:shardingItemParameter,可以和分片项匹配对应关系。比如:将商品的状态分成上架,下架。那么配置0=上架,1=下架,代码中直接使用上架下架的枚举值即可完成分片项与业务逻辑的对应关系 作用高可用:将分片总数设置成1,多台服务器执行作业将采用1主n从的方式执行 弹性扩容:将任务拆分为n个任务项后,各个服务器分别执行各自分配到的任务项。一旦有新的服器加入集群或有服务器宕机。Elastic-Job将保留本次任务不变,下次任务开始前重新分片。 并行调度:采用任务分片方式实现。将一个任务拆分为n个独立的任务项,由分布式的服务器并行执行各自分配到的分片项。 集中管理:采用基于zookepper的注册中心,集中管理和协调分布式作业的状态,分配和监听。外部系统可直接根据Zookeeper的数据管理和监控elastic-job。 定制化流程任务:作业可分为简单和数据流处理两种模式

【分布式缓存系列】集群环境下Redis分布式锁的正确姿势

匆匆过客 提交于 2019-12-24 12:03:03
一、前言   在上一篇文章中,已经介绍了基于Redis实现分布式锁的正确姿势,但是上篇文章存在一定的缺陷——它加锁只作用在一个Redis节点上,如果通过sentinel保证高可用,如果master节点由于某些原因发生了主从切换,那么就会出现锁丢失的情况: 客户端1在Redis的master节点上拿到了锁 Master宕机了,存储锁的key还没有来得及同步到Slave上 master故障,发生故障转移,slave节点升级为master节点 客户端2从新的Master获取到了对应同一个资源的锁   于是,客户端1和客户端2同时持有了同一个资源的锁。锁的安全性被打破了。针对这个问题。Redis作者antirez提出了RedLock算法来解决这个问题 二、RedLock算法的实现思路   antirez提出的redlock算法实现思路大概是这样的。   客户端按照下面的步骤来获取锁: 获取当前时间的毫秒数T1。 按顺序依次向N个Redis节点执行获取锁的操作。这个获取锁的操作和上一篇中基于单Redis节点获取锁的过程相同。包括唯一UUID作为Value以及锁的过期时间(expireTime)。为了保证在某个在某个Redis节点不可用的时候算法能够继续运行,这个获取锁的操作还需要一个超时时间。它应该远小于锁的过期时间。客户端向某个Redis节点获取锁失败后,应立即尝试下一个Redis节点

学习分布式架构感悟

╄→尐↘猪︶ㄣ 提交于 2019-12-24 00:01:50
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 随着公司业务规模的扩大,网站访问量日益剧增,最初的系统架构可能已经没办法满足业务发展的需求了。这时候就要考虑将系统架构改造成扩展性更强,能够承受更大访问量的分布式架构。 本文从大致三个方面谈谈分布式架构的概念、原理和相关的解决方案。为什么要做分布式?举个栗子,就好比原来城市的道路是双车道,同一时间只能容纳很小一部分车流量,但是改成多车道后,道路的容量就提升了几倍,网站也是相同的道理,用户的访问请求就是汽车,分布式架构就是在构建一个多车道的网站系统。接下来我们具体聊一聊各个层面的分布式技术解决方案。首先讲业务层的分布式,最简单的就是部署几台业务服务器,部署Apache或者Nginx,配置相同(vhost、域名解析、代码目录等),然后使用负载均衡技术将这几台服务器组成集群,达到对用户分流的效果。需要注意的是SESSION会话需要保存到数据库或者缓存系统中,保证SESSION的一致性,至于数据库,有统一的数据层,不需要担心数据不一致的问题。负载均衡有很多种解决方案,比较常见的是LVS(阿里巴巴章文嵩博士开发)、Nginx(阿里巴巴优化的Tengine)、HAProxy等。LVS是负责在4层网络实现负载均衡,有DR、隧道等方式,可以根据自身需求选择合适的方式。Nginx和HAProxy是负责7层网络的负载均衡

Docker的安装及Hadoop分布式的部署

旧街凉风 提交于 2019-12-23 19:52:13
使用docker搭建部署hadoop分布式集群 在网上找了很长时间都没有找到使用docker搭建hadoop分布式集群的文档,没办法,只能自己写一个了。 一:环境准备: 1:首先要有一个Centos7操作系统,可以在虚拟机中安装。 a、root账户登录,查看内核版本 [root@admin01 ~]# uname -a Linux admin01 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux b、更新yum源 [root@admin01 ~]# yum update c、安装一些必要的系统工具 [root@admin01 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 d、添加软件源信息: [root@admin01 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo e、 更新 yum 缓存: [root@admin01 ~]# yum makecache fast f、 可以查看所有仓库中所有docker版本,并选择特定版本安装

分布式Ehcache Terracotta使用

随声附和 提交于 2019-12-22 13:49:49
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 分布式Ehcache集群间数据同步 EhCache 是进程中的缓存系统,一旦将应用部署在集群环境中,每一个节点维护各自的缓存数据,当某个节点对缓存数据进行更新,这些更新的数据无法在其它节点中共享, 这不仅会降低节点运行的效率,而且会导致数据不同步的情况发生。使用Terracotta Server可以实现Ehcache的集群. 而针对集群之间数据同步的问题, Terracotta提供了WAN replication的方案. 使用时只需要在Ehcache配置文件配置即可, 然后系统会自动在不同集群之间同步数据. 主要特性: 消息缓冲 解决冲突 失效恢复 使用ActiveMQ,支持topic,queue 异步通信等等 数据同步的范围: put remove removeAll 应用场景一 不同集群使用同一个Active Terracotta Server Array,然后保证Passive Terracotta Server Array的数据同步. 这种方式对集群之间的网络要求较高. 使用场景二 不同的集群拥有独自的TSA, 但同步自身TSA的同时,还需要同步其它集群的TSA. 这种方式线路适合写操作比较少的应用. 使用场景三 自定义一个replicator,从本地集群中提取更新的数据,以消息的形式发送到其它结点上.