负载均衡

微服务的演变以及微服务与微服务之间的通信-----代码示例

落爺英雄遲暮 提交于 2019-12-12 12:06:24
接着上一篇博客: 第一步:提供一个服务实例出来:micro-provider(服务提供者),可以单独的去部署到服务器上。 ①:建个SpringBoot的项目,需要的依赖如下: ②:配置下mybatis的数据源和相应的驼峰映射: ③:写相应的实体类: ④:写相应的Mapper接口,由于这个mapper是交给Spring容器控制和管理的,所以说在启动类上加一个扫描Mapper接口的注解,然后这个这个接口就会生产接口的代理实现类去交给Spring容器进行管理。 ⑤:在Mapper接口中写一个根据id查出用户信息的方法: ⑥:由于这个接口要形成映射的,由于现在写的是单表的操作,就不写xml了,直接用注解的方式来进行编写如下: 如果这里用@Autowired的话,它会在Spring容器中会检测是否会有这样的对象动态的已经添加到容器中。这个@Autowired标注的对象不像@Service一样标在类上就能识别。而,在启动类上用的MapperScaner用的注解是在运行的时候才能识别,所以说这里用@Resource注解来注入,@Resource注解不会去找,它相当于使用的是java的东西(import javax.annotation.Resource)。就和Spring不会挂钩,但是它也会去Spring容器中去找。这里会按类型装,不会按名称装。 @Resource注解和

常见的负载均衡软件

不打扰是莪最后的温柔 提交于 2019-12-12 11:00:57
一、 负载均衡分类 硬件负载均衡 常见的硬件有比较昂贵的F5和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护、缺点就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用。 软件负载均衡 目前使用最广泛的三种负载均衡软件Nginx/LVS/HAProxy,他们都是基于Linux的开源免费的负载均衡软件,这些都是通过软件级别来实现,所以费用非常低廉。 成熟的架构 成熟的架构有LVS+Keepalived、Nginx+Keepalived、HAProxy+keepalived。 二、三大主流软件负载均衡器对比(LVS、Nginx、HAproxy)( 此段原文 ) LVS: 1. 抗负载能力强,性能高,能达到F5的60%,对内存和CPU资源消耗比较低 2. 工作在网络4层,通过VRRP协议(仅作代理之用),具体的流量是由linux内核来处理,因此没有流量的产生。 3. 稳定,可靠性高,自身有完美的热备方案(Keepalived+lvs) 4. 不支持正则处理,不能做动静分离。 5. 支持多种负载均衡算法:rr(轮询),wrr(带权轮询)、lc(最小连接)、wlc(带权最小连接) 6. 配置相对复杂,对网络依赖比较大,稳定性很高。 7. LVS工作模式有4种: (1) nat 地址转换 (2) dr 直接路由 (3) tun 隧道 (4) full

SpringCloud总结

孤者浪人 提交于 2019-12-11 23:09:27
什么是Spring cloud    构建分布式系统不需要复杂和容易出错。Spring Cloud 为最常见的分布式系统模式提供了一种简单且易于接受的编程模型,帮助开发人员构建有弹性的、可靠的、协调的应用程序。Spring Cloud 构建于 Spring Boot 之上,使得开发者很容易入手并快速应用于生产中。 我所理解的 Spring Cloud 就是微服务系统架构的一站式解决方案,在平时我们构建微服务的过程中需要做如 服务发现注册 、 配置中心 、 消息总线 、 负载均衡 、 断路器 、 数据监控 等操作,而 Spring Cloud 为我们提供了一套简易的编程模型,使我们能在 Spring Boot 的基础上轻松地实现微服务项目的构建。 Spring Cloud 的版本 Spring Cloud 的版本号并不是我们通常见的数字版本号,而是一些很奇怪的单词。这些单词均为英国伦敦地铁站的站名。同时根据字母表的顺序来对应版本时间顺序,比如:最早 的 Release 版本 Angel,第二个 Release 版本 Brixton(英国地名),然后是 Camden、 Dalston、Edgware、Finchley、Greenwich、Hoxton。 Spring Cloud 的服务发现框架——Eureka Eureka是基于REST(代表性状态转移)的服务

Java面试高级篇—Dubbo与Zookeeper面试题

半城伤御伤魂 提交于 2019-12-11 16:14:49
Dubbo缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。反之,Dubbo缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。 dubbo是管理中间层的工具,在业务层到数据仓库间有非常多服务的接入和服务提供者需要调度,dubbo提供一个框架解决这个问题。注意这里的dubbo只是一个框架,至于你架子上放什么是完全取决于你的,就像一个汽车骨架,你需要配你的轮子引擎。这个框架中要完成调度必须要有一个分布式的注册中心,储存所有服务的元数据,你可以用zk,也可以用别的,只是大家都用zk。 Spring Eureka从开源转变为闭源,Consul正在崛起,而Dubbo又开始重新更新。目前市场上仍有不少公司使用dubbo我们也需要继续学习。 1)默认使用的是什么通信框架,还有别的选择吗? 默认也推荐使用netty框架,还有mina 2)服务调用是阻塞的吗? 默认是阻塞的,可以异步调用,没有返回值的可以这么做 3)一般使用什么注册中心?还有别的选择吗? 推荐使用zookeeper注册中心,还有redis等不推荐 4)默认使用什么序列化框架,你知道的还有哪些? 默认使用Hessian序列化,还有Duddo、FastJson、Java自带序列化 5)服务提供者能实现失效踢出是什么原理?

微服务的演变以及微服务与微服务之间的通信

跟風遠走 提交于 2019-12-11 15:37:55
微服务雏形得形成 首先大家看看四个图: 一、单体架构图 : 这个图不是微服务内容的一个图,相当于它就是一个系统。这个系统包含了6个模块。 第一个是乘客:PASSENGER MANAGEMENT 第二个是出租车司机:DRIVER MANAGEMENT。 第三个是定位:TRIP MANAGEMENT 第四个是通知:BILLING。 第五个是跟踪:NOTIFICATION 第六个是身份认证:PAYMENTS。 下面的图就好比前身的滴滴打车的项目,最前期的一个图。滴滴刚开始做的时候也是一个单体的架构。并没有想到自己做那么大,只是一个单体的项目。单体的项目设计主要是它把所有的模块融入到一个系统 里面去进行实现。这么多的模块共享了一个数据库,针对现在滴滴打车,滴滴公司越来越大,用户的群体也越来越大。一个数据库肯定做不了。它必须在数据库这块做相应的集群,做相应的负载等等做一些相关的操作,现在的滴滴如果用一个数据库的话,做起来非常的困难,这就是 单体架构瓶颈的问题,在架构中我们是无法去解决它。 在往下面看的话:PASSENGER:是个乘客,DRIVER:是个司机,比如说乘客下了一个订单,然后这个司机和乘客调用的是同一个RESTAPI,通过rest方式提供的API。我知道这个API,就知道了调用哪个模块了。REST API没有任何的隐蔽性,针对于安全来说是无法做到的,这里没有提供任何网关的形式的

高并发与负载均衡-lvs-3种模型推导

試著忘記壹切 提交于 2019-12-11 06:14:57
[root@centos7-1 ~]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.159.10 netmask 255.255.255.0 broadcast 192.168.159.255 inet6 fe80::20c:29ff:fe99:5ef2 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:99:5e:f2 txqueuelen 1000 (Ethernet) RX packets 1137094 bytes 1121340388 (1.0 GiB) RX errors 101 dropped 0 overruns 0 frame 0 TX packets 293297 bytes 21587168 (20.5 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device interrupt 19 base 0x2000 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid

【架构】Nginx、HAProxy、LVS三者的优缺点分析

喜欢而已 提交于 2019-12-11 03:24:13
一、Nginx服务器 Nginx优点: 1、工作在网络7层之上,可针对http应用做一些分流的策略,如针对域名、目录结构,它的正规规则比HAProxy更为强大和灵活,所以,目前为止广泛流行。 2、Nginx对网络稳定性的依赖非常小,理论上能ping通就能进行负载功能。 3、Nginx安装与配置比较简单,测试也比较方便,基本能把错误日志打印出来。 4、可以承担高负载压力且稳定,硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS小。 5、Nginx可以通过端口检测到服务器内部的故障,如根据服务器处理网页返回的状态码、超时等,并会把返回错误的请求重新提交到另一个节点。 6、不仅仅是优秀的负载均衡器/反向代理软件,同时也是强大的Web应用服务器。LNMP也是近些年非常流行的Web架构,在高流量环境中稳定性也很好。 7、可作为中层反向代理使用。 8、可作为静态网页和图片服务器。 9、Nginx社区活跃,第三方模块非常多,相关的资料在网上比比皆是。 Nginx常规的和HTTP请求和相应流程图: Nginx缺点: 1、适应范围较小,仅能支持http、https、Email协议。 2、对后端服务器的健康检查,只支持通过端口检测,不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了

tomcat与nginxd负载均衡

谁说胖子不能爱 提交于 2019-12-11 02:45:04
1.安装JDK https://download.oracle.com/otn/java/jdk/8u231-b11/5b13a193868b4bf28bcb45c792fce896/jdk-8u231-linux-x64.tar.gz 下载到/software文件夹中 # cd /software # wget https://download.oracle.com/otn/java/jdk/8u231-b11/5b13a193868b4bf28bcb45c792fce896/jdk-8u231-linux-x64.tar.gz # cd /software; tar xvf jdk-8u192-linux-x64.tar.gz; mkdir /usr/local/java; mv /software/jdk1.8.0_192 /usr/local/java/; echo "export PATH=\$PATH:/usr/local/java/jdk1.8.0_192/bin" >> /etc/profile; source /etc/profile; # java -version 检查版本 java version "1.8.0_192" 注:在一台机器上如果有多个JDK版本 则环境变量字符串前面的JDK是使用版本。例如: export PATH=$JAVA_HOME/bin

Spring Cloud Ribbon

孤人 提交于 2019-12-10 23:39:11
Spring Cloud Ribbon:负载均衡的服务调用 前言 什么是Ribbon? Spring Cloud Ribbon是一套实现客户端负载均衡的工具,注意是 客户端 ,当然也有服务端的负载均衡工具,如Ngnix,可以认为Ribbon就是一个负载均衡(Load Balancer)。负载均衡就是将用户的请求平摊的分配到多个服务器,从而达到系统的高可用。 简单来说,Ribbon的主要功能是 提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起 。 在微服务架构中,很多服务都会部署多个,其他服务去调用该服务的时候,如何保证负载均衡是个不得不去考虑的问题。负载均衡可以增加系统的可用性和扩展性,当我们使用RestTemplate来调用其他服务时,Ribbon可以很方便的实现负载均衡功能。 RestTemplate的使用 RestTemplate是一个HTTP客户端,使用它我们可以方便的调用HTTP接口,支持GET、POST、PUT、DELETE等方法。 GET请求方法 <T> T getForObject(String url, Class<T> responseType, Object... uriVariables); <T> T getForObject(String url, Class<T> responseType, Map<String, ?>

SpringCloud(4)负载均衡策略+重试机制

妖精的绣舞 提交于 2019-12-10 22:15:45
回顾:spring cloud 基本环境搭建 负载均衡策略 1.1初体验 步骤一:修改pom文件,修改调用方的pom文件,添加test依赖 <!--测试--> < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-test </ artifactId > </ dependency > 步骤二:编写测试类,在调用方编写Junit测试类 package com . czxy ; import org . junit . Test ; import org . junit . runner . RunWith ; import org . springframework . boot . test . context . SpringBootTest ; import org . springframework . cloud . client . ServiceInstance ; import org . springframework . cloud . netflix . ribbon . RibbonLoadBalancerClient ; import org . springframework . test . context