分布式技术
dubbo+zookeeper、springcloud等分布式技术
CallMeJacky
如果你有梦想的话,就要去捍卫它 。
展开
-
SpingBoot项目部署到远程Docker容器中
最近几年微服务很火,但是,任何东西都有两面性,有得必有失,那么在选择微服务在解决了快速响应和弹性伸缩的问题同时,它又给我们带来了什么问题?分布式系统的复杂性;部署,测试和监控的成本问题;分布式事务和CAP的相关问题。今天主要探究在idea中如何解决分布式部署问题。1. 准备工作安装centos7;安装Docker;配置docker远程连接端口;vi /usr/lib/systemd/system/docker.service找到 ExecStart,并在其后面添加 -H tcp:/原创 2020-09-21 12:57:30 · 1566 阅读 · 0 评论 -
Spring Security Oauth 2.0第三方授权认证
在开始之前,首先介绍一下认证和授权。身份认证用户访问系统资源时,系统要求验证用户的身份信息,身份合法则方可继续访问。常见的用户身份认证的表现形式有:用户名密码登陆指纹打卡用户授权用户认证通过后去访问系统的资源,系统会判断当前用户是否拥有访问资源的权限,只允许访问有权限的资源,没有权限的资源无法访问。1. 单点登陆单点登陆是指用户在一个系统中登陆之后,就可以访问所有相互信任的应用系统。分布式系统要实现单点登陆,通常是将认证系统独立 抽取出来。2. Oauth 2.0OAuth(开放授原创 2020-08-21 15:43:27 · 2522 阅读 · 0 评论 -
Spring Cloud Gateway微服务网关限流与JWT鉴权
不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口,存在一些问题:页面需要对接多个域名,非常繁琐;安全隐患,服务端暴露的接口增加,增加服务器受攻击的面积;跨域问题;认证复杂。微服务网关的主要作用:整合各个微服务的功能,形成一套系统;在微服务网关中实现日志的统一记录;实现用户的操作跟踪;实现限流操作;用户权限认证操作。实现微服务网关的技术有很多:nginx:一个高性能HTTP和反向代理web服务器,同时提供了IMAP/POP3/SMTP服务;(一般用于原创 2020-08-21 00:34:01 · 3704 阅读 · 3 评论 -
Canal数据同步原理简介及应用
在使用缓存时,不可避免地会遇到数据库同步问题,即当Mysql数据库中的数据更新之后,需要同步更新Redis缓存。一种做法是在更新数据库时删除Redis中的缓存。但是这种方式无疑会将业务逻辑复杂化,稍微不注意就有可能忘记更新缓存,导致数据不一致的问题。因此,另一种较为常见的做法是订阅Mysql的增加、修改和删除操作,当数据库数据发生变动时,自动监听数据的变化,更新缓存。Canal就是做这个事情的。1. Canal工作原理canal是应阿里存在杭州和美国的双机房部署,存在跨机房同步的业务需求而提出的。通过原创 2020-08-13 11:14:46 · 3106 阅读 · 0 评论 -
OpenResty并发限流技术
对于一个网站来说,尽管做了多级缓存,但是,当某一时间内有大量的并发同时访问时,依旧会面临着一些问题,例如,之前上学的时候每次进行评教,都需要按照学院分批进行评教,另外,限流对于防止DDOS攻击也是非常有效的一种解决方案,根据IP限制用户对网站的访问速率。这一点和实际生活中的地铁限流很类似,入站口设置一个弯弯曲曲的通道来限制入站的速率,这样,无论多少连接进来,都保证地铁内部不会过于拥挤,保证系统的正常运行。本章内容紧接着上篇:OpenResty简介与缓存测试Nginx限流策略有两种:根据访问速率限制,原创 2020-08-13 01:51:00 · 2230 阅读 · 0 评论 -
OpenResty简介与缓存测试
OpenResty是一个基于Nginx的可伸缩的web应用服务器,由国人章亦春发起,提供了很多高质量的第三方模块。web开发人员可以使用Lua脚本调用Nginx支持的各种C和Lua模块。其最突出的特点是能够快速构造出承受10K以上的并发连接响应的超高性能web应用系统,目前,360、阿里云、新浪、腾旭都是OpenResty的深度用户。OpenResty可以简单地理解成封装了Nginx,并且集成Lua脚本,开发人员只需要简单地使用已经提供好的Lua脚本,而不需要自己编写复杂的Lua脚本调用Nginx。本.原创 2020-08-12 00:38:04 · 848 阅读 · 0 评论 -
FastDFS分布式文件系统从入门到精通
1. FastDFS简介FastDFS是一个开源的轻量级分布式文件系统,它能够对文件进行管理,例如:文件同步、上传和下载等,解决了大容量存储和负载均衡问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等。从上图可以看出,最终客户端还是需要访问对应的Storage,Tracker在这里所起的作用是负载均衡和调度。2. 上传流程上传成功后,返回的文件索引信息包括:组名:文件上传后所在的Storage组名称;虚拟磁盘路径:Storage中配置的虚拟路径,与磁盘选项store_path对应原创 2020-08-06 01:45:11 · 625 阅读 · 0 评论 -
Dubbo使用Hystrix实现服务熔断
Dubbo中没有提供熔断限流和自动权重调整等服务治理机制。因此,这里采用SpringCloud中的Hystrix实现服务熔断。1.熔断器简介在微服务架构中,根据业务来拆分成一个个服务、服务与服务之间可以通过RPC相互调用。为了保证高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务造成灾难原创 2020-07-08 19:42:13 · 1613 阅读 · 0 评论 -
Dubbo中的序列化
Dubbo中支持的序列化方式(性能逐渐递减):dubbo序列化hessian2序列化(默认使用的是阿里修改的hessian lite)json序列化java序列化,不推荐针对Java语言的序列化技术:Kryo、FST,其中Kryo是一种非常成熟的序列化实现,已经在Twitter、Yahoo以及多个著名开源项目(如Hive、storm)中广泛使用。添加依赖 <!-- 添加序列化依赖 --> <dependency>原创 2020-07-08 17:38:55 · 1351 阅读 · 0 评论 -
Dubbo中负载均衡实现高并发
要实现高并发,就要实现服务器的负载均衡,即让服务消费者能够通过轮询的方式调用服务提供者上实现的服务。Dubbo实现了四种负载均衡策略:随机(默认,权重)轮询最少活跃调用数一致性在之前的服务提供者项目的yml配置文件中加入:dubbo: provider: loadbalance: roundrobin # 轮询方式因为这里在实验时需要运行多个服务提供者实例,所以需要做以下设置:不断地更改dubbo的protocol的端口,运行多个实例,这里,我开放三个服务提供者,端口号原创 2020-07-08 16:44:56 · 830 阅读 · 0 评论 -
基于Docker部署Zookeeper集群
Zookeeper部署有三种方式,单机模式、集群模式、伪集群模式。集群规模为大于等于3的奇数,如3、5和7。不宜太多,集群规模太大,选举和数据的同步耗时厂,不稳定。1.安装DockerCentOS 7.x 安装 Docker-Compose添加企业版附加包。yum -y install epel-release安装 PIPyum -y install python-pip安装 Docker Composepip install docker-compose2.安装Zook原创 2020-07-08 02:14:58 · 710 阅读 · 0 评论 -
Dubbo分布式开发之HelloWorld
本篇将介绍创建一个zookeeper+dubbo+springboot的基础项目,以演示分布式应用开发的一个过程。这里共有三个子项目:服务接口项目服务提供者项目服务消费者项目dubbo项目的github地址;dubbo示例项目的github地址在开始之前,请确保您的zookeeper集群已经部署完成,这里,笔者采用docker-compose的方式进行部署,三个zookeeper服务器的地址分别为192.168.137.118:2181、192.168.137.118:2182和192.原创 2020-07-07 22:01:08 · 292 阅读 · 0 评论 -
Dubbo基本概念与管理后台项目的运行
Appache Dubbo是一款高性能、轻量级的开源Java RPC分布式服务框架,它提供了三大核心能力:面向接口的远程方法调用,即可以使用@Resource注解可以调用远程的Service,就像调用本地方法一样调用远程方法;智能容错和负载均衡;服务的自动注册与发现,dubbo注册中心调用zookeeper实现。Dubbo底层通信通过对NIO框架Netty进行封装。dubbo中组件角色:Provider,提供服务的服务提供方Consumer,调用远程服务的服务消费方Registry:服原创 2020-07-07 19:29:48 · 293 阅读 · 0 评论 -
Zookeeper中分布式锁的实现原理
Zookeeper中的数据存储结构就像一棵树,树上的节点叫做Znode。这里,Znode有四种类型:持久节点;持久节点顺序节点临时节点临时节点顺序节点所谓的顺序节点,即在创建节点时,Zookeeper会根据创建的时间顺序给节点的名称进行编号;实现分布式锁,需要实现三个核心要素:加锁;解锁锁超时机制分布式锁中,存在三个问题:保证原子性操作,即保证加锁和锁超时的操作要一次性完成;防止误删锁;添加守护线程,为锁续命。基于临时节点有序节点的实现分布式锁通过创建和释放临时节点原创 2020-06-17 18:24:33 · 312 阅读 · 0 评论 -
Zookeeper集群的崩溃恢复
Zookeeper可以帮我们实现服务的注册与发现。然而,现在有一个问题是,如果只采用一个Zookeeper服务器,那么当这个服务器宕机时,意味着整个分布式服务无法正常工作。为了解决这一问题,就需要Zookeeper集群。然而,在使用Zookeeper集群时,也存在着一个问题,即集群中数据一致性的维护。如上图所示,Zookeeper集群是一主多从结构。在更新数据时,首先更新到主服务节点,再更新到从服务节点;在读数据时,直接读取任意从服务节点;为了保证从节点的数据一致性,Zookeeper采用ZA原创 2020-06-17 18:00:52 · 2184 阅读 · 0 评论 -
Zookeeper服务注册与发现机制原理
Zookeeper解决了分布式锁的各种机制,通过它,我们可以将重心放在业务逻辑上,而非并发控制上。Zookeeper提供了两个功能:分布式锁;服务注册与发现。Zookeeper的数据模型/动物汽车猫狗宝马奔驰Zookeeper的数据存储是基于节点的,称作Znode。Znode的引用方式非常类似于文件路径,例如:当要访问猫时,需要指定路径/动物/猫。Znode包含四个元素:data:数据信息,例如服务的IP地址、端口、名字;ACL:访问权限,即那些人或者那些IP可以访问本节点;stat:元原创 2020-06-17 16:59:34 · 1469 阅读 · 0 评论 -
Redis实现分布式锁机制的原理
Redis中实现分布式锁机制加锁使用setnx(商品ID,1);返回0,代表redis里面有数据,即数据已经加锁;返回1,代表redis里面没有数据,即可以获得锁。解锁使用redis的del 商品ID命令,删除其中的变量锁超时使用expired命令设置超时时间(在加锁的时候设置过期时间)请求1请求2从数据库中获取商品信息从数据库中获取商品信息订单服务1Redis中间件订单服务2数据库Redis中间件将多进程访问变为多线程访问,因此,虽然订单服务是并发地发送请求,但是经过Redis后,原创 2020-06-17 15:58:43 · 1294 阅读 · 0 评论 -
微服务架构的常见概念
1.微服务架构要解决的问题最大的问题:网络是不可靠的。1.1 客户端如何访问多个服务?解决方案:服务聚合到API网关,聚合服务1.2 服务与服务之间如何通信?同步通信:Http(Apache Http Client)、RPC(Dubbo支持Java、Apache Thrift、gRPC)异步通信:消息队列,如:kafka、RabbitMQ、RocketMQ1.3 多个服务如何管理?实现高可用、高并发和高性能的微服务,即保证一直可以用,存在副本。服务治理(服务注册),即服务上下线,管理服务的I原创 2020-06-17 12:52:52 · 425 阅读 · 0 评论