木木

木木 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

木木 发布了文章 · 2020-11-12

11.12

Docker

是轻量级的虚拟机,类似于VMware虚拟机,但占用资源更少,启动速度更快
开发运维一体化(DevOps)的核心工具,提高了开发-测试-上线部署的工作效率

Dubbo

Apache Dubbo |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
image.png

xml配置

image.png

如果其中一个服务器宕机 用户访问是否受限?

答:由于zk的帮助,使得程序永远可以访问正确的服务器.并且当服务重启时,duboo有服务的自动发现功能,消费者不需要重启即可以访问新的服务.

如果ZK集群短时间宕机,用户访问是否受限?

答: 用户的访问不受影响,由于消费者在本地存储服务列表信息,当访问故障机时,自动的将标识信息改为down属性.

Dubbo负载均衡策略

image.png

描述HTTP协议的作用及具体内容(请求和响应的结构)

网络通信中存在不同的主机、网络、设备,需要遵循一套统一的通信协议才可以有效的进行通信。HTTP协议就是一套基于tcp/ip协议的应用层协议 它规定了客户端(通常是浏览器)和服务器之间的通信方式。

一个典型的HTTP请求分为 一个请求行 若干请求头 一个空行 实体内容

查看原文

赞 0 收藏 0 评论 0

木木 发布了文章 · 2020-11-09

11.9

rabbitmq六种模式

image.png
image.png
发送消息的程序就是生产者
队列就代表一个邮箱。
消费者等待从队列接收消息
ConnectionFactory f = new ConnectionFactory();

    f.setHost("192.168.64.140");
    f.setPort(5672);//可选,5672是默认端口
    f.setUsername("admin");
    f.setPassword("admin");

工作模式

image.png
image.png
一个生产者,两个消费者
rabbitmq在所有消费者中轮询分发消息,把消息均匀地发送给所有消费者

合理的分发

abbitmq会一次把多个消息分发给消费者, 这样可能造成有的消费者非常繁忙, 而其它消费者空闲. 而rabbitmq对此一无所知, 仍然会均匀的分发消息

我们可以使用 basicQos(1) 方法, 这告诉rabbitmq一次只向消费者发送一条消息, 在返回确认回执前, 不要向消费者发送新消息. 而是把消息发给下一个空闲的消费者

消息持久化

当rabbitmq关闭时, 我们队列中的消息仍然会丢失, 除非明确要求它不要丢失数据

要求rabbitmq不丢失数据要做如下两点: 把队列和消息都设置为可持久化(durable)

队列设置为可持久化, 可以在定义队列时指定参数durable为true

第二个参数是持久化参数durable

ch.queueDeclare("helloworld", true, false, false, null);

发布和订阅模式

image.png
image.png
我们将做一些完全不同的事情——我们将向多个消费者传递同一条消息。这种模式称为“发布/订阅”。

Exchanges交换机

RabbitMQ消息传递模型的核心思想是,生产者永远不会将任何消息直接发送到队列。实际上,通常生产者甚至不知道消息是否会被传递到任何队列。
有几种可用的交换类型:direct、topic、header和fanout。我们将关注最后一个——fanout。让我们创建一个这种类型的交换机,并称之为 logs: ch.exchangeDeclare("logs", "fanout");

自动生成队列名
非持久,独占,自动删除
String queueName = ch.queueDeclare().getQueue();

4.路由模式

image.png
image.png

查看原文

赞 0 收藏 0 评论 0

木木 发布了文章 · 2020-11-06

11.3

1.拉取远程代码
2.在本地完成代码合并
3.重新提交推送代码
zuul会过滤敏感http协议头,默认过滤以下协议头:
1.Cookie 2.Set-Cookie 3.Authorization
可以设置zuul不过滤这些协议头
zuul:
sensitive-headers:
rdb快照 aof数据操作记录
zipkin 服务产生的链路日志发送到zikpin服务,进行图表展现 两种发送方式 1.直接连接zipkin,向zipkin发送 2.通过消息服务中转发送

查看原文

赞 0 收藏 0 评论 0

木木 发布了文章 · 2020-11-02

第五阶段11.2

eureka连接地址
defaultZone 默认地点
其他地点配置,需要由云服务提供

eureka:
client:

service-url:
  defaultZone: 
  http://eureka1:2001/eureka

Getting all instance registry info from the eureka server
The response status is 200

Registering application ORDER-SERVICE with eureka with status UP

registration status: 204

激活当前profile:

--spring.profiles.active=eureka2 --server.port=2002
重试
一种容错方式,调用远程服务失败(异常,超时)时,可以自动进行重试调用
1.添加spring-retry依赖
2.配置重试参数
MaxAutoRtries 单台服务器的重试次数 1次
MaxAutoRtriesNextAerver 更换服务器的次数 2次
OkToRetryOnAllOperations-

系统容错工具

降级和熔断

降级

调用远程服务失败(异常,超时,服务不存在),可以通过执行当前服务中的一段代码来向客户端发回响应
降级响应: 错误提示和返回缓存数据
快速失败:即使后台服务故障,也要让客户端尽快得到错误提示,而不能让客户端等待
添加降级
1.添加Hystrix依赖
2.启动类添加@EnableCircuitBreaker
3.添加降级代码
在远程调用方法上添加
@HystrixCommand(fallbackMethod="降级方法")
完成降级方法,返回降级响应
image.png
image.png

ribbon重试

image.png

Hystrix断路器

当请求量增大,出现过多错误,hystrix可以和后台服务断开连接
可以避免雪崩效应,故障传播
限流措施
流量过大时造成服务故障,可以断开服务,降低它的流量
image.png
image.png
在特定条件下会自动触发熔断
1.10秒内20次请求(必须首先满足)
2.50%出错,执行了降级代码
3.断路器打开几秒后进入半开状态,尝试发送请求
如果请求成功自动关闭断路器恢复正常
如果请求失败,再保持打开状态几秒钟

Hystrix Dashboard

Hystrix监控仪表盘,监控Hystrix降级和熔断的错误信息

actuator

springboot提供的项目监控工具,提供了多种项目的监控数据
健康状态
系统环境
beans-spring容器中所有的对象
mappings- spring mvc 所有映射的路径
....
hystrix在actuator中,添加了自己的监控数据

添加actuator

1.添加actuator依赖
2.yml配置暴露监控信息
m.e.w.e.i="*" 暴露所有监控
m.e.w.e.i=["health","beans","mappings"]
m.e.w.e.i=beans

Hystrix 配置:

1.添加Hystrix依赖2.@EnableCircuitBreaker
image.png

安装rabbitmq rpm包

rpm -ivh *.rpm

启动rabbitmq服务器

image.png

rabbitmq管理界面
启用管理界面

image.png

重启rabbitmq服务

image.png

访问

访问服务器的15672端口 例如:
http://192.168.64.140:15672

添加用户

image.png

设置访问权限

image.png
image.png

开放客户端连接端口

image.png
主要端口介绍
4369-erlang 发现口
5672 -client端通信口
15672-管理界面ui端口
25672-server间内部通信口

查看原文

赞 0 收藏 0 评论 0

木木 发布了文章 · 2020-10-31

rabbitmq

image.png
image.png
image.png
image.png

安装

rpm -ivh *.rpm

启动rabbitmq服务器

image.png

rabbitmq管理界面

启动管理界面

image.png

重启RabbitMQ服务

systemctl restart rabbitmq-server

添加用户

image.png

开放客户端连接端口

image.png

rabbitmq六种工作模式

1.简单模式>>>只有一个消费者
2.工作模式
image.png
image.png
3.发布订阅模式
image.png
image.png
4.路由模式
image.png
5.主题模式
image.png
6.RPC模式
image.png

查看原文

赞 0 收藏 0 评论 0

木木 发布了文章 · 2020-10-30

第五阶段10.30运维 开发 实施 测试

ribbon

ribbon 提供了负载均衡和重试功能, 它底层是使用 RestTemplate 进行 Rest api 调用

RestTemplate

RestTemplate是SpringBoot提供的一个Rest远程调用工具
它的常用方法:
getForObject() 执行get请求
postForObject() 执行post请求

ribbon负载均衡和重试

image.png

Ribbon负载均衡

image.png

RestTemplate 设置 @LoadBalanced

@LoadBalanced 负载均衡注解,会对 RestTemplate 实例进行封装,创建动态代理对象,并切入(AOP)负载均衡代码,把请求分发到集群中的服务器

ribbon重试

image.png
1.添加spring-retry依赖
2.ribbon:
MaxAutoRetriesNextServer: 2
MaxAutoRetries: 1
OkToRetryOnAllOperations: true
OkToRetryOnAllOperations=true
默认只对GET请求重试, 当设置为true时, 对POST等所有类型请求都重试
MaxAutoRetriesNextServer
更换实例的次数
MaxAutoRetries
当前实例重试次数,尝试失败会更换下一个实例

Hystrix断路器

image.png
微服务宕机时,ribbon无法转发请求

添加hystrix依赖

修改application.yml

string:
application:

name: hystrix

主程序添加 @EnableCircuitBreaker启用hystrix断路器

启动断路器,断路器提供两个核心功能:

  • 降级,超时、出错、不可到达时,对服务降级,返回错误信息或者是缓存数据
  • 熔断,当服务压力过大,错误比例过多时,熔断所有请求,所有请求直接降级
  • 可以使用 @SpringCloudApplication 注解代替三个注解

在contller中添加降级方法例如getItems()中添加getItemsFB()
添加 @HystrixCommand 注解,指定降级方法名

hystrix超时设置

hystrix等待超时后, 会执行降级代码, 快速向客户端返回降级结果, 默认超时时间是1000毫秒

为了测试 hystrix 降级,我们把 hystrix 等待超时设置得非常小(500毫秒)

此设置一般应大于 ribbon 的重试超时时长,例如 10 秒
hystrix:
command:

default:
  execution:
    isolation:
      thread:
        timeoutInMilliseconds: 500

hystrix dashboard断路器仪表盘

hystrix 对请求的降级和熔断,可以产生监控信息,hystrix dashboard可以实时的进行监控
actuator 是 spring boot 提供的服务监控工具,提供了各种监控信息的监控端点

management.endpoints.web.exposure.include 配置选项,
可以指定端点名,来暴露监控端点

如果要暴露所有端点,可以用 “*”
image.png
1.添加autuator依赖
2.management:
endpoints:

web:
  exposure:
    include: hystrix.stream

访问actuator路径 查看监控端点

http://localhost:端口号/actuator

Hystrix dashboard仪表盘

image.png
1.添加依赖 Hystrix Dashboard
和Eureka Discovery Client
2.yml配置
hystrix:
dashboard:

proxy-stream-allow-list: localhost

3.主程序添加### @EnableHystrixDashboard@EnableDiscoveryClient

hystrix熔断

整个链路达到一定的阈值,默认情况下,10秒内产生20次请求,则符合第一个条件,满足第一个条件的情况下,如果请求的错误百分比大于阈值,则会打开断路器,默认为50%。
Hystrix的逻辑,先判断是否满足第一个条件,再判断第二个条件,如果两个条件都满足,则会开启断路器

断路器打开 5 秒后,会处于半开状态,会尝试转发请求,如果仍然失败,保持打开状态,如果成功,则关闭断路

使用apache的并发访问测试工具ab

image.png

用 ab 工具,以并发50次,来发送20000个请求

ab -n 20000 -c 50http://localhost:3001/item-service/35
断路器状态为open,所有请求会被短路,直接降级执行fallback方法

hystrix配置

hystrix.command.default.execution.isolation.thread.timeoutInmilliseconds
请求超时时间,超时后,出发失败降级

hystrix.command.default.circuitBreaker.requestVolumeThreshold
10秒内请求数量,默认20,如果没有达到该数量,即使请求全部失败,也不会触发3断路器打开

hystrix.command.default.circuiBreaker.errorThresholdPercentage
失败请求百分比,达到该比例则触发断路器打开

hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds
断路器打开多长时间后,再次允许尝试访问(半开),仍失败则继续保持打开状态,如果成功访问则关闭断路器,默认5000
源码: https://github.com/benwang6/spring-cloud-repo

feign声明式客户端接口

微服务应用中,ribbon和hystrix总是同时出现,feign整合了两者,并提供了声明式消费者客户端
1.添加依赖
image.png
主程序添加@EnableDiscoveryClient和@EnablefeignClient

feign声明式客户端

image.png
如果请求参数名与方法参数名不同@RequestParam不能省略,并且要指定请求参数名:
@RequestParam("score") Integer s

feign+ribbon 负载均衡和重试

无需额外配置,feign默认已启用了ribbon负载均衡和重试机制,可以通过配置对参数进行调整
image.png

yml配置ribbon超时和重试

ribbon.xxx全局配置
item-service.ribbon.xxx 对特定服务实例的配置
image.png

feign+hystrix降级

feign默认没有启用hystrix,添加配置,启用hystrix
feign.hystrix.enabled=true

可以添加配置,暂时减小降级超时时间,以便后续对降级进行测试

image.png

feign+hystrix监控和熔断测试

配置actuator 暴露htstrix.stream监控端点
yml暴露hystrix.stream端点
image.png

Feign集成Hystrix

默认不启用Hystrix,Feign不推荐启用hystrix
如果有特殊需求要启用hystrix,首先做基础配置
1.添加hystrix的完整依赖
2.添加@EnableCircuiBreaker
3.yml配置feign.hystrix.enabled=true

降级

在声明式客户端接口的注解中,指定一个降级类
降级类要作为声明式客户端接口的子类来定义

hystrix监控

用actuator暴露hystrix.stream监控端点
1.actuator依赖
2.暴露监控端点
m.e.w.e.i=hystrix.stream
3.http://localhost:3001/actuator/hystrix.stream
4.通过调用后台服务,
监控代码 ab -n 20000 -c 10 http:localhost:3001/user-service/7

查看原文

赞 0 收藏 0 评论 0

木木 发布了文章 · 2020-10-28

第五阶段10.28

eureka连接地址
defaultZone 默认地点
其他地点配置,需要由云服务提供

eureka:
client:

service-url:
  defaultZone: 
  http://eureka1:2001/eureka

Getting all instance registry info from the eureka server
The response status is 200

Registering application ORDER-SERVICE with eureka with status UP

registration status: 204

激活当前profile:

--spring.profiles.active=eureka2 --server.port=2002
重试
一种容错方式,调用远程服务失败(异常,超时)时,可以自动进行重试调用
1.添加spring-retry依赖
2.配置重试参数
MaxAutoRtries 单台服务器的重试次数 1次
MaxAutoRtriesNextAerver 更换服务器的次数 2次
OkToRetryOnAllOperations-

系统容错工具

降级和熔断

降级

调用远程服务失败(异常,超时,服务不存在),可以通过执行当前服务中的一段代码来向客户端发回响应
降级响应: 错误提示和返回缓存数据
快速失败:即使后台服务故障,也要让客户端尽快得到错误提示,而不能让客户端等待
添加降级
1.添加Hystrix依赖
2.启动类添加@EnableCircuitBreaker
3.添加降级代码
在远程调用方法上添加
@HystrixCommand(fallbackMethod="降级方法")
完成降级方法,返回降级响应

查看原文

赞 0 收藏 0 评论 0

木木 发布了文章 · 2020-10-23

第五阶段10.23

spring cloud介绍

spring cloud 是一系列框架的集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。spring cloud 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 spring boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

spring cloud 对于中小型互联网公司来说是一种福音,因为这类公司往往没有实力或者没有足够的资金投入去开发自己的分布式系统基础设施,使用 spring cloud 一站式解决方案能在从容应对业务发展的同时大大减少开发成本。同时,随着近几年微服务架构和 docker 容器概念的火爆,也会让 spring cloud 在未来越来越“云”化的软件开发风格中立有一席之地,尤其是在目前五花八门的分布式解决方案中提供了标准化的、一站式的技术方案,意义可能会堪比当年 servlet 规范的诞生,有效推进服务端软件系统技术水平的进步。

spring cloud技术组成

image.png

  • eureka
    微服务治理,服务注册和发现
  • ribbon
    负载均衡、请求重试
  • hystrix
    断路器,服务降级、熔断
  • feign
    ribbon + hystrix 集成,并提供声明式客户端
  • hystrix dashboard 和 turbine
    hystrix 数据监控
  • zuul
    API 网关,提供微服务的统一入口,并提供统一的权限验证
  • config
    配置中心
  • bus
    消息总线, 配置刷新
  • sleuth+zipkin
    链路跟踪
Spring Cloud 对比 Dubbo

image.png

  • Dubbo

    • Dubbo只是一个远程调用(RPC)框架
    • 默认基于长连接,支持多种序列化格式
  • Spring Cloud

    • 框架集
    • 提供了一整套微服务解决方案(全家桶)
    • 基于http调用, Rest API
application.yml文件

向注册中心注册的服务名
sping:
application:

name: item-service

server:
port: 8001

eureka:
server:

enable-self-presevation: false  #1.保护模式

instance:
hostname: eureka1 ##2.集群服务器间用主机名区分
client:
#3.单台服务器。不向自己注册 不从自己拉取
register-with-eureka: false
fetch-registry: false

Spring MVC 接收参数的几个注解

image.png
eureka集群服务器之间,通过hostname来区分
1.eureka.server.enable-self-presevation
eureka的自我保护状态:心跳失败的比例,在15分钟内是否超过85%,如果出现了超过的情况,Eureka Server会将当前的实例注册信息保护起来,同时提示一个警告,一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不会删除服务注册表中的数据,也就是不会注销任何微服务
2.eureka.client.register-with-eureka=false
不向自身注册
3.eureka.client.fetch-registry=false
不从自身拉取注册信息
4.eureka.instance.lease=expirtian-duration-in-seconds
最后一次心跳后,间隔多久认定微服务不可用,默认90
在项目启动类上使用5.@EnableEurekaServer,可以将项目作为SpringCloud中的注册中心。
6.添加的依赖 Eureka Discovery Client

pom.xml中的依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

application.yml中的eureka注册配置

eureka:
client:

service-url:
  defaultZone: http://eureka1:2001/eureka







查看原文

赞 0 收藏 0 评论 0

木木 发布了文章 · 2020-10-21

10.21

1.用户模块实现
1.1用户信息回显

1.页面URL分析
image.png

2.检查页面JS
image.png

3.编辑单点登录的Controller
image.png

1.2编辑Cookie工具API

image.png

1.3用户退出操作
1.3.1 业务说明

如果用户点击退出操作, 首先应该删除Redis中的数据 其次删除Cookie中的数据 之后重定向到系统首页.

1.3.2 URL分析

image.png

编辑UserController

image.png

2实现商品详情展现
2.1业务说明

image.png

2.2重构JT-MANAGE
2.2.1创建接口

image.png

2.2.2 编辑Dubbo实现类

image.png

编辑YML配置文件

image.png
编辑ItemController

查看原文

赞 0 收藏 0 评论 0

木木 发布了文章 · 2020-10-20

10.20

1.Dubbo
1.1Dubbo介绍

Apache Dubbo |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

1.2Dubbo特点

image.png

2 Dubbo入门案例
2.1 定义公共接口项目

说明:接口项目一般定义公共的部分,并且被第三方依赖
image.png

2.2服务提供者介绍
2.2.1提供者代码结构

image.png

2.2.2编辑实现类

image.png

2.2.3编辑提供者配置文件

image.png

2.3服务者消费介绍
2.3.1编辑controller

image.png

2.3.2编辑YML配置文件

image.png

2.4关于Dubbo框架知识点
2.4.1问题1:### 如果其中一个服务器宕机 用户访问是否受限?

答:由于zk的帮助,使得程序永远可以访问正确的服务器.并且当服务重启时,duboo有服务的自动发现功能,消费者不需要重启即可以访问新的服务.

问题2:如果ZK集群短时间宕机,用户访问是否受限?

答: 用户的访问不受影响,由于消费者在本地存储服务列表信息,当访问故障机时,自动的将标识信息改为down属性.

2.5Dubbo负载均衡策略
2.5.1负载均衡种类

1.客户端负载均衡
Dubbo/SpringCloud等微服务框架
image.png

2.服务端负载均衡
说明:客户端发起请求之后,必须由统一的服务器进行负载均衡,所有的压力都在服务器中.
NGINX
image.png

2.5.2Dubbo负载均衡方式

image.png

关于ZK数据存储结构

说明:在zk中数据的存储采用树形结构的方式保存
命令: [root@localhost bin]# sh zkCli.sh
查询命令: ls /…
image.png

用户单点登录原理介绍
4.3.1传统方式登录存在的问题

说明:如果采用SESSION的方式实现用户的登录操作,由于nginx负载均衡的策略,用户可以访问不同的服务器.但是Session不能共享,所以导致用户频繁的登录. 用户的体验不好.
image.png

SSO

单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是目前比较流行的

京淘项目单点登录设计

image.png
实现步骤:
1.当用户输入用户名和密码点击登录时,将请求发送给JT-WEB消费者服务器.
2.JT-WEB服务器将用户信息传递给JT-SSO单点登录系统完成数据校验.
3.如果登录成功,则动态生成密钥信息,将user数据转化为json.保存到redis中. 注意超时时间的设定.
4.JT-SSO将登录的凭证 传给JT-WEB服务器.
5.JT-WEB服务器将用户密钥TICKET信息保存到用户的cookie中 注意超时时间设定.
6.如果登录不成功,则直接返回错误信息即可.

查看原文

赞 0 收藏 0 评论 0

认证与成就

  • 获得 0 次点赞
  • 获得 0 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 0 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2020-08-25
个人主页被 377 人浏览