分布式部署

微服务 分布式 集群 负载均衡

匿名 (未验证) 提交于 2019-12-02 23:47:01
微服务架构是一种软件架构风格,将一个复杂的应用拆分为多个服务模块,每个模块负责单一的业务功能对外服务,并且可以单独编译部署。每个模块单独部署,模块之间无法直接通信,所以需要借助RPC(远程过程通信协议)或者通过HTTP协议让模块之间进行通信。dubbo 是一套微服务系统的协调者。运用dubbo时将dubbo的jar引入项目中然后项目初始化的时候就会将当前系统需要发布的服务以及当前系统的IP和端口号发送给注册中心;以及描述当前系统所需要的服务,然后向注册中心请求这些服务所在的IP和端口号。 分布式: 将以一个业务拆分为多个子业务,部署在不同的服务器上。分布式和微服务是一样的。 集群: 分布式是以缩短单个任务的执行时间来提升效率,集群是通过单位时间内执行的效率来提高效率的,集群的每台服务器上部署的是同样的服务,他是有组织性的,一台服务器崩了,其他服务器可以顶上来。而分布式的每个节点都完成不同的功能,如果一个节点崩了则此服务器的服务无法访问,所以最好就是分布式+集群部署。 负载均衡: 负载均衡其实就是集群的前置。集群部署完后,需要一台服务器充当调度者角色,用户的所有请求首先被此调度者服务器接收,然后根据每台服务器的负载情况分发请求。 <HTTP重定向实现负载均衡> 当用户请求某个服务时,请求首先被调度者服务器截获,然后根据某种策略选择集群中的一台服务器

分布式CAP定理

匿名 (未验证) 提交于 2019-12-02 23:42:01
根据百度百科的定义,CAP定理又称CAP 原则 ,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),最多只能同时三个特性中的两个,三者不可兼得。 一、CAP的定义 Consistency (一致性): “all nodes see the same data at the same time”,即更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致,这就是分布式的一致性。一致性的问题在并发系统中不可避免,对于客户端来说,一致性指的是并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终一致。 Availability (可用性): 可用性指“Reads and writes always succeed”,即服务一直可用,而且是正常响应时间。好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。 Partition Tolerance (分区容错性): 即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。 分区容错性要求能够使应用虽然是一个分布式系统,而看上去却好像是在一个可以运转正常的整体。比如现在的分布式系统中有某一个或者几个机器宕掉了

Spring整合Quartz分布式调度的示例代码

你。 提交于 2019-12-02 23:25:58
前言 为了保证应用的高可用和高并发性,一般都会部署多个节点;对于定时任务,如果每个节点都执行自己的定时任务,一方面耗费了系统资源, 另一方面有些任务多次执行,可能引发应用逻辑问题,所以需要一个分布式的调度系统,来协调每个节点执行定时任务。 Spring整合Quartz Quartz是一个成熟的任务调度系统,Spring对Quartz做了兼容,方便开发,下面看看具体如何整合: 1.Maven依赖文件 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.3.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.3.5

Redis 分布式锁的正确打开方式

走远了吗. 提交于 2019-12-02 23:06:57
前言 分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。 可靠性 首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 互斥性。在任意时刻,只有一个客户端能持有锁。 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。 具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。 解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。 代码实现 组件依赖 首先我们要通过Maven引入 Jedis 开源组件,在 pom.xml 文件加入下面的代码: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> 加锁代码 正确姿势 Talk is cheap, show me the code。先展示代码,再带大家慢慢解释为什么这样实现:

SpringCloud--鸿鹄Cloud分布式微服务云系统

匿名 (未验证) 提交于 2019-12-02 22:56:40
简介 鸿鹄云Cloud是基于SpringCloud来封装的,是一系列框架的有序集合。利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如 服务发现、注册、配置中心、消息总线、负载均衡、断路器、数据监控 等(这里只简单的列了一部分),都可以用Spring Boot的开发风格做到一键启动和部署。鸿鹄云Cloud将目前比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装,屏蔽掉了复杂的配置和实现原理,最终整合出一套简单易懂、易部署和易维护的分布式系统架构平台。 鸿鹄Cloud组成 SpringCloud的子项目,大致可分成两类: 一类是对现有成熟框架Spring Boot的封装和抽象,也是数量最多的项目; 第二类是开发了一部分分布式系统的基础设施的实现,如SpringCloud Stream就是kafka, ActiveMQ这样的角色。开发人员进行微服务的实践,第一类子项目就已经足够使用,如: SpringCloud Netflix 是对Netflix开发的一套分布式服务框架的封装,包括服务的发现和注册,负载均衡、断路器、REST客户端、请求路由等。 SpringCloud Config 将配置信息中央化保存, 配置SpringCloud Bus可以实现动态修改配置文件。 SpringCloud Bus 分布式消息队列,是对Kafka,

Hadoop+Hbas完全分布式安装部署

匿名 (未验证) 提交于 2019-12-02 22:56:40
Hadoop安装部署基本步骤: 1、安装jdk,配置环境变量。 2、linux环境下,至少需要3台机子,一台作为master,2台(以上)作为slave。 3、配置所有机器的hostname和hosts。      更改master的HOSTNAME,这里改为HOSTNAME=master      其它slave为HOSTNAME=slave1、HOSTNAME=slave2 ,重启后生效。      但是重启系统后更改的名字会失效,仍是原来的名字 4、配置SSH所有机器之间免密码登录   (2)输入命令,ssh-keygen -t rsa,生成key,一直按回车,      这里要说的是,为了各个机器之间的免登陆,在每一台机器上都要进行此操作。   (3) 接下来,在master服务器,合并公钥到authorized_keys文件,      进入/root/.ssh目录,输入以下命令 5、配置Hadoop环境变量,HADOOP_HOME、hadoop-env.sh、yarn-env.sh。      export HADOOP_HOME=/opt/hbase/hadoop-2.7.3 (Hadoop的安装路径)      export PATH=$PATH:$HADOOP_HOME/sbin      export PATH=$PATH:$HADOOP_HOME/bin   

社交网站部署――MFS分布式文件系统

匿名 (未验证) 提交于 2019-12-02 22:56:40
案例概述 某公司的社交网站采用PHP语言开发,为了管理PHP程序员开发的代码,上级领导要求搭建SVN服务器进行版本控制。社交网站的第一个版本部署在LNMP平台之上,前端为Nginx服务器,通过fastcgi协议访问后端的PHP服务器。为了保证数据安全,要求搭建MySQL数据库主从集群。 社交网站项目包含用户的相册功能,允许用户上传照片,上传照片需要使用共享存储来存放。针对共享存储可用的开源方案有很多,如MFS、FastDFS 等。公司决定使用MFS分布式文件系统来实现,并将MFS挂载在PHP服务器的相关目录下。 案例实施 根据公司的需求,实施过程大致分为以下步骤。 部署SVN服务器,为PHP程序员创建repo目录的访问账户,通知程序员可以导入代码。 部署MySQL主从服务器,根据PHP程序员的要求创建数据库与表。 部署Nginx服务器。部署PHP服务器。 部署MFS,将MFS文件系统挂载在前端PHP服务器的相关目录下。 通知上线部署人员可以发布上线。 MFS部署并挂载 搭建 Master Server 1、安装MFS yum install - y zlib - devel gcc gcc - c ++ //安装依赖包环境包 useradd mfs - s / sbin / nologin - M //创建管理用户 tar xzvf mfs - 1.6 . 27 - 5.tar .

SpringBoot:redis分布式缓存

谁说胖子不能爱 提交于 2019-12-02 22:41:46
前言 应用系统需要通过Cache来缓存不经常改变得数据来提高系统性能和增加系统吞吐量,避免直接访问数据库等低速存储系统。缓存的数据通常存放在访问速度更快的内存里或者是低延迟存取的存储器,服务器上。应用系统缓存,通常有如下作用: 缓存web系统的输出,如伪静态页面。 缓存系统的不经常改变的业务数据,如用户权限,字典数据.配置信息等 大家都知道springBoot项目都是微服务部署,A服务和B服务分开部署,那么它们如何更新或者获取共有模块的缓存数据,或者给A服务做分布式集群负载,如何确保A服务的所有集群都能同步公共模块的缓存数据,这些都涉及到分布式系统缓存的实现。(ehcache可以通过Terracotta组件一个缓存集群,这个暂时不讲) 但是ehcache的设计并不适合做分布式缓存,所以今天用redis来实现分布式缓存。 架构图: 一二级缓存服务器 使用Redis缓存, 通过网络访问还是不如从内存中获取性能好,所以通常称之为二级缓存 , 从内存中取得的缓存数据称之为一级缓存。 当应用系统需要查询缓存的时候,先从一级缓存里查找,如果有,则返回,如果没有查找到,则再查询二级缓存,架构图如下 Spring Boot 2 自带了前面俩种缓存的实现方式,本文将简单实现第三种,高速一二级缓存实现 Redis分布式缓存 1.pom文件 <dependency>   <groupId>org

分布式服务接口的幂等性如何设计(比如不能重复扣款)?

旧时模样 提交于 2019-12-02 22:20:55
2019 Java 开发者跳槽指南.pdf (吐血整理)….>>> 面试题 分布式服务接口的幂等性如何设计(比如不能重复扣款)? 面试官心理分析 从这个问题开始,面试官就已经进入了 实际的生产问题 的面试了。 一个分布式系统中的某个接口,该如何保证幂等性?这个事儿其实是你做分布式系统的时候必须要考虑的一个生产环境的技术问题。啥意思呢? 你看,假如你有个服务提供一个接口,结果这服务部署在了 5 台机器上,接着有个接口就是 付款接口 。然后人家用户在前端上操作的时候,不知道为啥,总之就是一个订单 不小心发起了两次支付请求 ,然后这俩请求分散在了这个服务部署的不同的机器上,好了,结果一个订单扣款扣两次。 或者是订单系统调用支付系统进行支付,结果不小心因为 网络超时 了,然后订单系统走了前面我们看到的那个重试机制,咔嚓给你重试了一把,好,支付系统收到一个支付请求两次,而且因为负载均衡算法落在了不同的机器上,尴尬了。。。 所以你肯定得知道这事儿,否则你做出来的分布式系统恐怕容易埋坑。 面试题剖析 这个不是技术问题,这个没有通用的一个方法,这个应该 结合业务 来保证幂等性。 所谓 幂等性 ,就是说一个接口,多次发起同一个请求,你这个接口得保证结果是准确的,比如不能多扣款、不能多插入一条数据、不能将统计值多加了 1。这就是幂等性。 其实保证幂等性主要是三点: 对于每个请求必须有一个唯一的标识

K8S+GitLab-自动化分布式部署ASP.NET Core(二) ASP.NET Core DevOps

匿名 (未验证) 提交于 2019-12-02 22:06:11
一.介绍 ,下面正式开始部署ASP.NET Core 项目. https://github.com/gyw1309631798/Deploy-API . 我创建了一个ASP.NET Core 2.1 WebAPI项目 里面包含了deploy.yaml,Dockerfile文件. 要在K8S上部署首先要添加 regsecret ,不然从Harbor pull会失败. kubectl create namespace netcore (创建命名空间)kubectl create secret docker-registry regsecretlocal --namespace=netcore --docker-server=192.168.0.203 --docker-username=evan --docker-password=Pwd123456 --docker-email=xxx@qq.com 首先在Gitlab上创建项目,在项目设置里找到Test coverage parsing 填写以下正则: \d*.\d+\%\s 我们把代码通过git 提交到Gitlab,Gitlab-Runner 自动运行 该项目包含单元测试,和测试覆盖率.测试覆盖率工具是 下面是K8S部署成功的图片: 三.下一章节: 更新镜像版本并部署到K8S上 文章来源: K8S+GitLab