Istio 故障注入与重试的实验
故障注入
Istio流量治理有故障注入的功能,在接收到用户请求程序的流量时,注入故障现象,例如注入HTTP请求错误,当有流量进入Sidecar时,直接返回一个500的错误请求代码。
通过故障注入可以用来测试整个应用程序的故障恢复能力,注入各种故障现象,针对不同的故障现象做出应对措施。
故障注入有两种类型:
- 延迟(Delay):注入延迟故障可以模拟出高负载时,模拟出系统响应很慢的一种现象。
- 中止(abort):注入中止故障可以模拟出系统崩溃,直接返回HTTP错误代码或者TCP连接失败的现象
使用故障注入时,不可用启用超时和重试的配置,故障注入时在VirtualService资源中进行配置的。
两种故障注入的配置清单:
- 故障注入-延迟配置清单
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:name: tomcat-vsnamespace: istio-traffic
spec:http:- fault: #定义故障注入delay: #定义故障注入的延迟配置percentage: #配置要将流量注入故障的比例,这里为100%,也可以针对50%的流量进行故障注入,剩下50%的流量做一些其他路由匹配 value: 100fixedDelay: 10s #故障注入延迟响应时间10秒route: #将满足的流量路由到tomcat的service资源上- destination:host: tomcat-svc注意:1.falut和route是同级参数,当满足故障注入条件的流量会被route进行路由分发。2.重试和超时的配置都是在route中设置的,当我们配置了故障注入后就无法再配置超时和重试了。
- 故障注入-中止配置清单
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:name: tomcat-vsnamespace: istio-traffic
spec:http:- fault: #定义故障注入abort: #定义故障注入的中止配置percentage: #配置要将流量注入故障的比例,这里为100%,也可以针对50%的流量进行故障注入,剩下50%的流量做一些其他路由匹配 value: 100httpStatus: 503#注入的故障为返回一个503的HTTP状态码route: #将满足的流量路由到tomcat的service资源上- destination:host: tomcat-svc
重试
重试是非常好理解的,如果请求超时那么就会进行重试。
在Istio服务网格中,Envoy代理在请求失败或者超时后,并不会尝试重新连接服务,不会去重试,需要我们来配置Istio的重试机制。重试和超时策略可以同时使用。
VirtualService资源中重试配置清单:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: ratings
spec:hosts:- ratingshttp:- route:- destination:host: ratingssubset: v1retries: #定义重试策略attempts: 3#重试的次数为3次perTryTimeout: 2s #重试的间隔为2秒
在Istio服务网格中,Envoy代理在请求失败或者超时后,并不会尝试重新连接服务,不会去重试,需要我们来配置Istio的重试机制。
重试和超时策略可以同时使用。
VirtualService资源中重试配置清单:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: ratings
spec:hosts:- ratingshttp:- route:- destination:host: ratingssubset: v1retries: #定义重试策略attempts: 3 #重试的次数为3次perTryTimeout: 2s #重试的间隔为2秒
配置Istio中应用程序的故障注入以及重试
案例描述
案例:Nginx反向代理Tomcat服务,Nginx服务的VirtualService开始重试机制,Tomcat服务的VirtualService配置故障注入,永不响应Nginx服务的请求,观察是否会触发重试机制。
大致实现思路:
在Istio中部署一个Nginx服务和一个Tomcat服务,并配置Nginx反向代理Tomcat服务。
通过VirtualService为Nginx服务设置重试次数,当请求失败后进行重试。
Tomcat服务通过VirtualService中的故障注入配置返回503错误代码,任何请求都将失败。
此时Nginx再去反向代理Tomcat时,Tomcat只会返回503错误代码,观察是否有重试记录。
创建Namespace并开启Sidecar自动注入。
[root@k8s-master istio-traffic]# kubectl label ns istio-traffic istio-injection=enabled
namespace/istio-traffic labeled[root@k8s-master istio-traffic]# kubectl create ns istio-traffic
namespace/istio-traffic created
在Istio中部署Nginx服务
1)编写资源编排文件
[root@k8s-master istio-traffic]# vim nginx-k8s.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-proxynamespace: istio-trafficlabels:server: nginxapp: web
spec:replicas:
1selector:matchLabels:server: nginxapp: webtemplate:metadata:name: nginxlabels: server: nginxapp: webspec:containers:- name: nginximage: jiangxlrepo/know-system:v1 #knowsystem镜像中包含了NginximagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:name: nginx-svcnamespace: istio-traffic
spec:selector:server: nginxports:- name: httpport: 80targetPort: 80protocol: TCP
2)创建资源并查看资源的状态
1.创建资源
[root@k8s-master istio-traffic]# kubectl apply -f nginx-k8s.yaml
deployment.apps/nginx-proxy created
service/nginx-svc created2.查看资源的状态
[root@k8s-master istio-traffic]# kubectl get all -n istio-traffic
NAME READY STATUS RESTARTS AGE
pod/nginx-proxy-7c487c794d-wt6nq 2/2 Running 0 53sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/nginx-svc ClusterIP 10.105.3.226 <none> 80/TCP 53sNAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-proxy 1/1 1 1 54sNAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-proxy-7c487c794d 1 1 1 54s
2.3.在Istio中部署Tomcat服务
1)编写资源编排文件
[root@k8s-master istio-traffic]# vim tomcat-k8s.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: tomcatnamespace: istio-trafficlabels:server: tomcatapp: web
spec:replicas:
1selector:matchLabels:server: tomcatapp: webtemplate:metadata:name: tomcatlabels: server: tomcatapp: webspec:containers:- name: tomcatimage: docker.io/kubeguide/tomcat-app:v1 imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:name: tomcat-svcnamespace: istio-traffic
spec:selector:server: tomcatports:- name: httpport: 8080targetPort: 8080protocol: TCP
2)创建资源并查看资源的状态
1.创建资源
[root@k8s-master istio-traffic]# kubectl apply -f tomcat-k8s.yaml
deployment.apps/tomcat created
service/tomcat-svc created2.查看资源的状态
[root@k8s-master istio-traffic]# kubectl get all -n istio-traffic
NAME READY STATUS RESTARTS AGE
pod/nginx-proxy-7c487c794d-wt6nq 2/2 Running 0 6m1s
pod/tomcat-86ddb8f5c9-7n2xj 2/2 Running 0 16sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/nginx-svc ClusterIP 10.105.3.226 <none> 80/TCP 6m1s
service/tomcat-svc ClusterIP 10.100.46.31 <none> 8080/TCP 16sNAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-proxy 1/1 1 1 6m1s
deployment.apps/tomcat 1/1 1 1 16sNAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-proxy-7c487c794d 1 1 1 6m1s
replicaset.apps/tomcat-86ddb8f5c9 1 1 1 16s
2.4.配置Nginx反向代理Tomcat
1.配置Nginx反向代理
[root@nginx-proxy-76ccd8b9fc-8hqbq /]# vim /data/nginx/conf/conf.d/istio-tomcat.conf
server {listen 80;server_name _;location / {proxy_pass http://tomcat-svc:8080;proxy_http_version 1.1;}
}2.重载Nginx配置
[root@nginx-proxy-76ccd8b9fc-8hqbq /]# /data/nginx/sbin/nginx -t
nginx: the configuration file /data/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /data/nginx/conf/nginx.conf test is successful
[root@nginx-proxy-76ccd8b9fc-8hqbq /]# /data/nginx/sbin/nginx -s reload
2.5.配置Nginx服务VirtualService资源中的重试
配置Nginx服务的VirtualService资源,设置超时时间。
1.编写资源编排文件
[root@k8s-master istio-traffic]# vim nginx-vs-att.yaml
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:name: nginx-vsnamespace: istio-traffic
spec:hosts:- nginx-svc #虚拟主机列表中指定了Nginx的Service资源名称,用于内部调用,接收来自nginx-svc service资源的流量http:- route: #将流量转发到nginx-svc Service资源上- destination: host: nginx-svc retries: #定义重试策略attempts: 3 #重试次数为3次perTryTimeout: 2s #重试的间隔为2秒2.创建资源编排文件
[root@k8s-master istio-traffic]# kubectl apply -f nginx-vs-att.yaml
virtualservice.networking.istio.io/nginx-vs created3.查看资源
[root@k8s-master istio-traffic]# kubectl get vs -n istio-traffic
NAME GATEWAYS HOSTS AGE
nginx-vs ["nginx-svc"] 58s
2.6.配置Tomcat服务VirtualService资源中的故障注入
配置Nginx服务的VirtualService资源,设置请求响应的延时时间,将延时时间设置的稍微长一些,经过这段时间后,再返回响应,就可以实现超时配置的效果了。
1.编写资源编排文件
[root@k8s-master istio-traffic]# vim tomcat-vs-att.yaml
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:name: tomcat-vs
spec:hosts:- tomcat-svc #虚拟主机列表中指定了Tomcat的Service资源名称,用于内部调用,接收来自tomcat-svc service资源的流量http:- fault: #定义故障注入策略abort: #定义中止类型的故障注入percentage: #配置要将流量注入故障的比例,这里为100%,也可以针对50%的流量进行故障注入,剩下50%的流量做一些其他路由匹配 value: 100httpStatus: 503 #注入的故障为返回一个503的HTTP状态码route: #将满足的流量路由到tomcat的service资源上- destination:host: tomcat-svc2.创建资源编排文件
[root@k8s-master istio-traffic]# kubectl apply -f tomcat-vs-att.yaml
virtualservice.networking.istio.io/tomcat-vs created3.查看资源
[root@k8s-master istio-traffic]# kubectl get vs -n istio-traffic
NAME GATEWAYS HOSTS AGE
nginx-vs ["nginx-svc"] 6m42s
tomcat-vs ["tomcat-svc"] 4s
3.验证Istio配置的流量重试效果
Tomcat服务配置了故障注入,所有流量请求都会返回503的错误代码,Nginx转发请求到Tomcat,Tomcat不会响应Nginx的请求,此时就会触发配置的重试机制,每隔2两秒进行一次重试,重试三次后退出。
[root@k8s-master istio-traffic]# kubectl run -it busybox --image busybox:1.28 --restart=Never --rm busybox -n istio-traffic -- sh
/ # wget -q -O - http://nginx-svc
wget: server returned error: HTTP/1.1 503 Service Unavailable
/ # wget -q -O - http://nginx-svc
wget: server returned error: HTTP/1.1 503 Service Unavailable
/ # wget -q -O - http://nginx-svc
wget: server returned error: HTTP/1.1 503 Service Unavailable
我们可以在busybox容器中请求Nginx服务,由Nginx将请求转发到Tomcat中,由于Tomcat无法响应,Nginx发送一次请求后会接着重试3次,当我们执行一次wget的请求时,就会产生4条请求记录,而这4条请求记录会产生8条Envoy代理程序的日志,分别是出入流量的日志,我们可以在日志中清晰的看到每次请求或者重试都会有2条日志记录。
当我们看到日志中一次请求连带了3次重试,就表示重试配置已经生效。
[root@k8s-master ~]# kubectl logs -f nginx-proxy-76ccd8b9fc-8hqbq -c istio-proxy -n istio-traffic
相关文章:
![](https://img-blog.csdnimg.cn/851694ab2a0f4678b24833c732f27bde.png)
Istio 故障注入与重试的实验
故障注入 Istio流量治理有故障注入的功能,在接收到用户请求程序的流量时,注入故障现象,例如注入HTTP请求错误,当有流量进入Sidecar时,直接返回一个500的错误请求代码。 通过故障注入可以用来测试整个应用程序的故障恢…...
![](https://www.ngui.cc/images/no-images.jpg)
Java设计模式-中介者模式
中介者模式 1.中介者模式含义 中介者模式,就是用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地互相引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。 其实中介者模式很简单的,就像它的名字一样&a…...
![](https://img-blog.csdnimg.cn/50bab17e9aa14575a1f5262f5116401e.png)
OpenCV实现高斯模糊加水印
# coding:utf-8 # Email: wangguisendonews.com # Time: 2023/4/21 10:07 # File: utils.pyimport cv2 import PIL from PIL import Image import numpy as np from watermarker.marker import add_mark, im_add_mark import matplotlib.pyplot as plt# PIL Image转换成OpenCV格…...
![](https://img-blog.csdnimg.cn/img_convert/751e3d2775d3c0ac4eb4a11058dd1edf.png)
JMeter 怎么查看 TPS 数据教程,简单易懂
TPS 是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。在 JMeter 中,我们可以使用以下方法查看 T…...
![](https://img-blog.csdnimg.cn/9c3da8a40ace4dbda5be871c58b09377.jpeg#pic_center)
2023年的深度学习入门指南(19) - LLaMA 2源码解析
2023年的深度学习入门指南(19) - LLaMA 2源码解析 上一节我们学习了LLaMA 2的补全和聊天两种API的使用方法。本节我们来看看LLaMA 2的源码。 补全函数text_completion源码解析 上一节我们讲了LLaMA 2的编程方法。我们来复习一下: generator Llama.build(ckpt_di…...
![](https://www.ngui.cc/images/no-images.jpg)
慕课网Go-2.数组、slice、map、list
数组 package mainimport "fmt"func main() {var course1 [3]stringcourse1[0] "go"course1[1] "grpc"course1[2] "gin"for _, value : range course1 {fmt.Println(value)}course2 : [3]string{2: "grpc"}fmt.Println(…...
![](https://www.ngui.cc/images/no-images.jpg)
Django的Rest framework搭建自定义授权登录
系列文章目录 提示:阅读本章之前,请先阅读目录 文章目录 系列文章目录一、前言User模型User的viewsUser的serializersutils的md5加密自定义认证方法配置路由总路由分路由rest的配置 一、前言 之前的文章有写过通过jwt认证的文章,今天这一篇是…...
![](https://img-blog.csdnimg.cn/9d660f4827474d0eacc655c7f1ade7e6.png)
01 矩阵(力扣)多源广度优先搜索 JAVA
给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 输入:mat [[0,0,0],[0,1,0],[0,0,0]] 输出:[[0,0,0],[0,1,0],[0,0,0]] 输入…...
![](https://img-blog.csdnimg.cn/7daef9861075445baad7236f956efc61.png)
怎么绘制简爱思维导图?用这个工具绘制很简单
怎么绘制简爱思维导图?绘制思维导图是一项非常有用的技能,有助于梳理思路、整理知识、更好地理解和记忆信息。因此,无论你是学生、教师、工程师、项目经理或者只是想要更好地组织自己的想法,学会绘制思维导图都是非常有益的。下面…...
![](https://img-blog.csdnimg.cn/5ab219b0f78e477eb26735d39c1c92f2.png)
EC200U-CN学习(三)
EC200U系列内置丰富的网络协议,集成多个工业标准接口,并支持多种驱动和软件功能(适用于Windows 7/8/8.1/10、Linux和Android等操作系统下的USB驱动),极大地拓展了其在M2M领域的应用范围,如POS、POC、ETC、共…...
![](https://img-blog.csdnimg.cn/8c2b7d45d31d4b5199f56548c05dd697.png)
【windows】连接共享打印机提示:0x0000011B
【问题现象】 添加共享打印机的时候, 提示错误:0x0000011B。 【解决方法】 按winr键,在运行输入regedit 然后在注册表中找到路径: 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print 打开后,在右侧…...
![](https://img-blog.csdnimg.cn/img_convert/526a580aad687ec3af395611e0a6701b.webp?x-oss-process=image/format,png)
基于“RWEQ+”集成技术在土壤风蚀模拟与风蚀模数估算、变化归因分析中的实践应用及SCI论文撰写
【查看原文】基于“RWEQ”集成技术在土壤风蚀模拟与风蚀模数估算、变化归因分析中的实践应用及SCI论文撰写 土壤风蚀是一个全球性的环境问题。中国是世界上受土壤风蚀危害最严重的国家之一,土壤风蚀是中国干旱、半干旱及部分湿润地区土地荒漠化的首要过程。中国风…...
![](https://img-blog.csdnimg.cn/9c60a86576bd4be29cb5b94afd9786f0.png#pic_center)
Flutter-基础Widget
Flutter页面-基础Widget 文章目录 Flutter页面-基础WidgetWidgetStateless WidgetStateful WidgetState生命周期 基础widget文本显示TextRichTextDefaultTextStyle 图片显示FlutterLogoIconImageIamge.assetImage.fileImage.networkImage.memory CircleAvatarFadeInImage 按钮R…...
![](https://img-blog.csdnimg.cn/img_convert/fab51e52065103c9903e07bbe269e059.png)
【数据分析专栏之Python篇】二、Jupyer Notebook安装配置及基本使用
文章目录 前言一、Jupter Notebook是什么1.1 简介1.2 组成部分1.3 Jupyter Notebook的主要特点 二、为什么使用Jupyter Notebook?三、安装四、Jupyter Notebok配置4.1 基本配置4.2 配置开机自启与后台运行4.3 开启代码自动补全 五、两种键盘输入模式5.1 编辑模式5.2 命令模式5…...
![](https://img-blog.csdnimg.cn/6402e8a8be3c44389bfe482315786b73.png)
ubuntu22.04 DNSSEC(加密DNS服务) configuration
/etx/systemd/resolved.conf是ubuntu下DNS解析服务配置文件,systemd为ubuntu下system and service配置目录 step 1——修改resolved.conf参数 管理员权限打开 /systemd/resolved.conf sudo nano /etc/systemd/resolved.conf修改如下: # This file i…...
![](https://img-blog.csdnimg.cn/9f35caf91bfa4858ad0c90c9ec9501c8.png)
Qt 第一讲
登录框设置 #include "zuoye.h" #include "ui_zuoye.h"Zuoye::Zuoye(QWidget *parent): QWidget(parent), ui(new Ui::Zuoye) {ui->setupUi(this);//界面this->resize(540,420); //设置尺寸this->setFixedSize(540,420);//固定尺寸this->setS…...
![](https://img-blog.csdnimg.cn/914b3107503f498d9a3b9ea986df1c67.png)
IDEA 使用 maven 搭建 spring mvc
1. 创建项目 1.1 创建成功之后配置 Spring MVC 1.2 勾选 Spring MVC 2.更改配置文件 2.1 更改web.xml配置 更改为 <servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping>2.2 dispat…...
![](https://img-blog.csdnimg.cn/246731daedb64c8287090a14cef17573.png)
Hi3536网络应用调优
目录 1. 为什么UDP接收或发送会丢包? 2. 使用 socket 接口时,如何正确工作在非阻塞模式下? 3. TOE 使能及使用注意事项 4. TOE 模式下使用 socket 接口时的注意事项 1. 为什么UDP接收或发送会丢包? 用户态应用程序在接收 UDP 数据时࿰…...
![](https://img-blog.csdnimg.cn/7402965866d94668924eeee7357caafa.png)
spring拦截器 与统一格式
目录 前言模拟拦截器拦截器的实现原理什么是动态代理? 什么是静态代理静态代理与动态代理的区别两种常用的动态代理方式基于接口的动态代理基于类的动态代理 JDK Proxy 与 CGlib的区别 其他 统⼀访问前缀添加统⼀异常处理统⼀数据返回格式 前言 之前博客讲述了 , 关于SpringA…...
![](https://img-blog.csdnimg.cn/69296d3982224e44ae0a2dd918da1f6f.png)
leetcode 122. 买卖股票的最佳时机 II
2023.7.29 把整体利润拆分成每天的利润,将股票值想象成一个折线图,将所有上升的值相加即可。 代码: class Solution { public:int maxProfit(vector<int>& prices) {int ans 0;for(int i1; i<prices.size(); i){if(prices[i]-…...
![](https://www.ngui.cc/images/no-images.jpg)
代理模式:控制访问的设计模式
代理模式:控制访问的设计模式 什么是代理模式? 代理模式是一种常见的设计模式,它允许通过代理对象来控制对真实对象的访问。代理模式的主要目的是在不改变原始对象的情况下,提供额外的功能或控制访问。 为什么要使用代理模式&a…...
![](https://www.ngui.cc/images/no-images.jpg)
2020/7/30
Educational Codeforces Round 143 (Rated for Div. 2)\C_Tea_Tasting.cpp //题意:有n种茶,n个人,第i种茶有 a[i]的量,第i个人一次能喝 b[i], 第i个人从第i种茶开始往前喝,求每个人最多能喝多少茶。 //思路ÿ…...
![](https://img-blog.csdnimg.cn/img_convert/0b7874431c21774051ab2bc92b8be275.jpeg)
图形编辑器开发:是否要像 Figma 一样上 wasm
大家好,我是前端西瓜哥。 wasm 拿来做 Web 端的图形编辑器貌似是不错的选择。 因为图形处理会有相当多无法利用到 WebGL GPU 加速的 CPU 密集的计算。比如对一条复杂贝塞尔曲线进行三角化,对多个图形进行复杂图形的布尔运算。 图形编辑器性能天花板 F…...
![](https://img-blog.csdnimg.cn/df6a57ffaecc4fb3a00e1e16e22cb8a5.png)
Linux学成之路(基础篇0(二十三)MySQL服务(主从MySQL服务和读写分离——补充)
目录 一、MySQL Replication概述 优点 异步复制(Asynchronous repication) 全同步复制(Fully synchronous replication) 半同步复制(Semisynchronous replication) 三、MySQL支持的复制 四、部署主从…...
![](https://img-blog.csdnimg.cn/0d83a46fbda640f3a1fa4983ce61e1de.jpeg#pic_center)
spring启动流程 (6完结) springmvc启动流程
SpringMVC的启动入口在SpringServletContainerInitializer类,它是ServletContainerInitializer实现类(Servlet3.0新特性)。在实现方法中使用WebApplicationInitializer创建ApplicationContext、创建注册DispatcherServlet、初始化ApplicationContext等。 SpringMVC…...
![](images/%E4%B8%AD%E4%BB%8B%E8%80%85%E6%A8%A1%E5%BC%8F%E7%BB%93%E6%9E%84%E5%9B%BE.png)
设计模式-中介者模式在Java中使用示例-客户信息管理
场景 欲开发客户信息管理窗口界面,界面组件之间存在较为复杂的交互关系:如果删除一个客户, 要在客户列表(List)中删掉对应的项,客户选择组合框(ComboBox)中客户名称也将减少一个; 如果增加一个客户信息,…...
![](https://www.ngui.cc/images/no-images.jpg)
14443-1-doc
介绍 ISO/IEC 14443 是描述 ISO/IEC 7810 中定义的身份证参数以及此类卡在国际交换中的使用的一系列国际标准之一。 ISO/IEC 14443 的这一部分描述了感应卡的物理特性。 ISO/IEC 14443 的这一部分并不排除在卡上纳入其他标准技术,例如资料性附录 A 中引用的技术。非…...
![](https://img-blog.csdnimg.cn/dfc1b730d97d453e9c4e4f30270fbbc2.png)
SpringBoot的三层架构以及IOCDI
目录 一、IOC&DI入门 二、三层架构 数据库访问层 业务逻辑层 控制层 一、IOC&DI入门 在软件开发中,IOC(Inversion of Control)和DI(Dependency Injection)是密切相关的概念。 IOC(控制反转&a…...
![](https://img-blog.csdnimg.cn/605b5f4ca11d41a7a8a5568ebde946bc.png)
RabbitMQ部署指南
RabbitMQ部署指南 1.单机部署 我们在Centos7虚拟机中使用Docker来安装。 1.1.下载镜像 方式一:在线拉取 docker pull rabbitmq:3-management方式二:从本地加载 已经提供了镜像包: 上传到虚拟机中后,使用命令加载镜像即可&…...
![](https://img-blog.csdnimg.cn/963eed27f72a4c129c1d818c1bf49cf4.png)
【Golang】Golang进阶系列教程--Go 语言切片是如何扩容的?
文章目录 前言声明和初始化扩容时机源码分析go1.17go1.18内存对齐 总结 前言 在 Go 语言中,有一个很常用的数据结构,那就是切片(Slice)。 切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装…...
![](/images/no-images.jpg)
网站开发与运营方向和企业管理方向/正版seo搜索引擎
pbga 封装含义我关于不变性的帖子引起了一些轰动,并在reddit和此处引起了很多评论,从令人生畏的到有趣的。 评论类型 它们可以或多或少地分为以下几类: 让我们什么也不考虑,不要动弹不得-除了“可怕”之外没有有效的论点 一个线…...
![](https://img-blog.csdnimg.cn/img_convert/991c88cf8661523638befa6fa2a30e38.png)
wordpress卡片式/青岛百度竞价
1、如果想使用IIS配置PHP的话,那么需要选择NonThreadSafe(NTS)版本的PHP2、32位操作系统、64位操作系统,分别表示为X86、X643、VC,即VisualC,VC9和VC11分别为VisualStudio2008和VisualStudio2012编译出来的版本因此在下载带有“VC…...
![](/images/no-images.jpg)
做网站上传的图片大小/百度关键词查询工具
本发明涉及电机控制领域,尤其涉及一种电机h桥制动电路。背景技术:电动立柱的电机控制一般有两种,一种是h桥的四个开关管控制一个电机的正反转和转速;另一种是通过两个继电器控制电机的正反转,一个开关管控制电机的转速…...
![](https://img-blog.csdnimg.cn/43d0ad47a3de4a1c89107cd100a9a51a.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NFQ0JD,size_16,color_FFFFFF,t_70#pic_center)
庆阳手机网站设计/游戏推广员是诈骗吗
《隐私计算:区块链从乌托邦走向现实的必由之路》的演讲。莫晓康表示,区块链就像一个美丽的梦想,但是它差了一步,这一步必须由隐私计算来完成。没有隐私计算,即使这个梦想非常美丽,也无法落地,因…...
![](/images/no-images.jpg)
大学做机器人比赛的网站论坛/衡水seo排名
参数配置篇 我的600D基本设置: 一、菜单中的基本设置:(括号是VV的设置) 1、画质:RAW+jpeg(大/优)。raw这种格式细节更丰富,后期可随意调整白平衡、清晰度、色彩饱和度、亮度、对比度…...
![](http://www.gec-edu.org/Uploads/201811/5bf8eb1d358ae.jpg)
c 可以做网站嘛/链接搜索
我们为什么要学习Python编程语言?原因很简单,Python有很多吸引程序员的功能,它易学,面向对象,字节码编译,免费且开源。现在信息更新的非常快速,又迎来了大数据的时代,各行各业如果不…...