正向代理与反向代理

正向代理服务器

客户端和目标服务器之间的服务器,客户端向代理发送一个请求指定目标服务器,然后代理向目标服务器请求并获得内容,并返回给客户端,平时说的代理服务器一般是正向代理服务器
核心:用户知道自己访问的目标服务器 场景:跳板机、访问原来无法访问的网站, 比如国外的一些站点

反向代理服务器

客户端和目标服务器之间的服务器,客户端向代理发送一个请求,然后代理向目标服务器请求并获得内容,并返回给客户端。反向代理隐藏了真实的服务器
核心:客户端不知道要访问的目标服务器是哪台服务器,代理会根据一定的策略选择一个真实的服务器进行请求
场景:访问淘宝,知道访问的域名是taobao.com, 但是后面提供数据的具体是什么域名或ip我们是不知道的
找房子 找中介(自己不知道房源在哪里 中介会隐藏房东信息)

Nginx安装

安装依赖 c语言的
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel上传nginx安装包
tar -zxvf nginx-1.18.0.tar.gz  解压
进到Nginx里  执行命令
编译
./configure
make
make install
默认安装路径
/usr/local/nginx
访问配置
cd /usr/local/nginx/sbin
启动nginx
./nginx
设置开机自启动
cd /lib/systemd/system
vim /lib/systemd/system/nginx.service[Unit]
Description=nginx service
After=network.target[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true[Install]
WantedBy=multi-user.targetsystemctl enable nginx


域名备案和线上访问服务器应用流程解析

一个http请求基本流程
客户端通过发起域名资源请求 -> DNS解析获得IP -> 寻找服务器获得资源
域名和ip的关系,DNS作用
DNS:Domain Name Server 域名服务器 域名虽然便于人们记忆,但网络中的计算机之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS 就是进行域名解析的服务器
什么是cname和a记录
a记录 将域名指向一个IPV4地址
用户可以在此设置域名并指向到自己的目标主机地址上,从而实现通过域名找到服务器(也叫ip指向域名配置)aabbcc.com -> 120.24.216.117
cname 将域名指向另外一个域名
别名指向,可以为一个主机设置别名。比如设置open1024.com,用来指向一个主机 xdclass.net 那么以后就可以用open1024.com来代替访问 xdclass.net 了
www.xdclass.net --> xdclass.net

Nginx

目录核心介绍

conf #所有配置文件目录
nginx.conf #默认的主要的配置文件
nginx.conf.default #默认模板

html # 这是编译安装时Nginx的默认站点目录
50x.html #错误页面
index.html #默认首页

logs # nginx默认的日志路径,包括错误日志及访问日志
error.log #错误日志
nginx.pid #nginx启动后的进程id
access.log #nginx访问日志

sbin #nginx命令的目录
nginx #启动命令

常见命令
./nginx  #默认配置文件启动
./nginx -s reload #重启,加载默认配置文件
./nginx -c /usr/local/nginx/conf/nginx.conf #启动指定某个配置文件
./nginx -s stop #停止
#关闭进程,nginx有master process 和worker process,关闭master即可
ps -ef | grep "nginx"
kill -9 PID

核心配置文件

分为三个部分

全局配置
server 主机设置
location(URL匹配特定位置的设置)


# 每个配置项由配置指令和指令参数 2 个部分构成
#user  nobody;  # 指定Nginx Worker进程运行以及用户组
worker_processes  1;   # 工作进程数  推荐配置成和CPU保持一致
​
#error_log  logs/error.log;  # 错误日志的存放路径  和错误日志
#error_log  logs/error.log  notice;  # 日志级别
#error_log  logs/error.log  info;  # 日志级别
​
#pid        logs/nginx.pid;   # 进程PID存放路径
​
# 事件模块指令,用来指定Nginx的IO模型,Nginx支持的有select、poll、kqueue、epoll 等。不同的是epoll用在Linux平台上,而kqueue用在BSD系统中,对于Linux系统,epoll工作模式是首选
events { use epoll;# 定义Nginx每个进程的最大连接数, 作为服务器来说: worker_connections * worker_processes,# 作为反向代理来说,最大并发数量应该是worker_connections * worker_processes/2。#因为反向代理服务器,每个  并发会建立与客户端的连接和与后端服务的连接,会占用两个连接 #正向代理服务器是 worker_connections * worker_processesworker_connections  1024;
}
​
​
​
​
http {include       mime.types;default_type  application/octet-stream;# 自定义服务日志 格式#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';
​#access_log  logs/access.log  main;
​# 是否开启高效传输模式 on开启 off关闭sendfile        on;#减少网络报文段的数量#tcp_nopush     on;
​#keepalive_timeout  0;# 客户端连接保持活动的超时时间,超过这个时间之后,服务器会关闭该连接keepalive_timeout  65;
​# 压缩   #gzip  on;# 虚拟主机的配置 重要server {listen       80; # 虚拟主机的服务端口server_name  localhost; #用来指定IP地址或域名,多个域名之间用空格分开
​#charset koi8-r;
​           #每个虚拟主机具体配置它的访问日志#access_log  logs/host.access.log  main;
​#URL地址匹配 #location  指令解释说明#该指令用于匹配URL 语法 location [ = | ~ | ~* | ^~ ] url {...} #= 用于不含正则表达式的uri前, 要求请求字符串与uri 严格匹配。#如果匹配成功,就停止继续向下搜索并立即处理该请求#~ 用于uri包含正则表达式  区分大小写#~*  用于uri包含正则表达式  不区分大小写location / {root   html;  # 服务默认启动目录index  index.html index.htm; #默认访问文件,按照顺序找}
​#error_page  404              /404.html;   #错误状态码的显示页面
​# redirect server error pages to the static page /50x.html# 500 502 503 504 这些错误跳到 50x.html这个页面error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}
​# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}
​# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}
​# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}}
​
​# another virtual host using mix of IP-, name-, and port-based configuration##server {#    listen       8000;#    listen       somename:8080;#    server_name  somename  alias  another.alias;
​#    location / {#        root   html;#        index  index.html index.htm;#    }#}
​
​# HTTPS server##server {#    listen       443 ssl;#    server_name  localhost;
​#    ssl_certificate      cert.pem;#    ssl_certificate_key  cert.key;
​#    ssl_session_cache    shared:SSL:1m;#    ssl_session_timeout  5m;
​#    ssl_ciphers  HIGH:!aNULL:!MD5;#    ssl_prefer_server_ciphers  on;
​#    location / {#        root   html;#        index  index.html index.htm;#    }#}
}

搭建前端静态文件服务器

什么是虚拟主机

指在一台物理主机服务器上划分出多个磁盘空间,每个磁盘空间都是一个虚拟主机,每台虚拟主机都可以对外提供Web服务,并且互不干扰,就类似虚拟机
利用虚拟主机把多个不同域名的网站部署在同一台服务器上,节省了服务器硬件成本和相关的维护费用
!!!配置之前,拷贝一份默认的出来,nginx配置容易出错且肉眼难看出来,自己仔细核对

Nginx虚拟主机配置
server {
listen 80;
server_name aabbcc.com;

location / {
root /usr/local/nginx/html;
index xdclass.html;
}
}

server {
listen 80;
server_name aabbccdd.com;

    location / {root   html;index  xdclass.html index.htm;}

}

图片服务器

学javaweb、node、或者其他基础web项目,基本都是图片上传到项目本身,这个是生成很少用
公司一般会使用图片服务器或者云厂商提供的CDN
使用流程

前端提交图片->后端处理->存储到图片服务器->拼接好访问路径存储到数据库和范围前端

本地图片上传上去,配置专属访问路径server {listen       80;server_name  aabbccdd.com;location /app/img {alias /usr/local/software/img/;}}
注意在location / 中配置root目录
在location /path中配置alias虚拟目录, 目录后面的"/"符号一定要带上

Nginx经典案例挖掘accessLog日志

简介:介绍nginx的访问日志的用处

access.log日志用处

统计站点访问ip来源、某个时间段的访问频率
查看访问最频的页面、Http响应状态码、接口性能
接口秒级访问量、分钟访问量、小时和天访问量…

默认配置解析
#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';
案例
122.70.148.18 - - [04/Aug/2020:14:46:48 +0800] "GET /user/api/v1/product/order/query_state?product_id=1&token=xdclasseyJhbGciOJE HTTP/1.1" 200 48 "https://xdclass.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
解析
$remote_addr 对应的是真实日志里的122.70.148.18,即客户端的IP。$remote_user 对应的是第二个中杠"-",没有远程用户,所以用"-"填充。
​
[$time_local]对应的是[04/Aug/2020:14:46:48 +0800]。
​
"$request"对应的是"GET /user/api/v1/product/order/query_state?product_id=1&token=xdclasseyJhbGciOJE HTTP/1.1"。
​
$status对应的是200状态码,200表示正常访问。
​
$body_bytes_sent对应的是48字节,即响应body的大小。
​
"$http_referer" 对应的是"https://xdclass.net/",若是直接打开域名浏览的时,referer就会没有值,为"-"。
​
"$http_user_agent" 对应的是"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:56.0) Gecko/20100101 Firefox/56.0"。
​
"$http_x_forwarded_for" 对应的是"-"或者空
查看访问最频繁的前100个IP第一部分 默认空格是分隔符   文件  按照数值排序 去重显示多少行 倒序排列   前100个
awk '{print $1}' access_temp.log | sort -n |uniq -c | sort -rn | head -n 100统计访问最多的url 前20名
cat access_temp.log |awk '{print $7}'| sort|uniq -c| sort -rn| head -20 | moreawk 是文本处理工具,默认按照空格切分,$N 是第切割后第N个,从1开始
sort命令用于将文本文件内容加以排序,-n 按照数值排,-r 按照倒序来排案例的sort -n 是按照第一列的数值大小进行排序,从小到大,倒序就是 sort -rn
uniq 去除重复出现的行列, -c 在每列旁边显示该行重复出现的次数。

自定义日志格式,统计接口响应耗时
从接受用户请求的第一个字节到发送完响应数据的时间,即包括接收请求数据时间、程序响应时间、输出响应数据时间
$upstream_response_time:指从Nginx向后端建立连接开始到接受完数据然后关闭连接为止的时间 这个纯接口性能
$request_time一般会比upstream_response_time大,因为用户网络较差,或者传递数据较大时,前者会耗时大很多

统计耗时接口, 列出传输时间超过 2 秒的接口,显示前5条
cat time_temp.log|awk '($NF > 2){print $7}'|sort -n|uniq -c|sort -nr|head -5
备注:$NF 表示最后一列, awk '{print $NF}'

Nginx负载均衡upstream

配置Demo

server 上边
upstream lbs {server 192.168.0.106:8080;server 192.168.0.106:8081;
}
​替换 location
location /api/ {proxy_pass http://lbs;proxy_redirect default;
}

Nginx常见的负载均衡策略解析

节点轮询(默认)
简介:每个请求按顺序分配到不同的后端服务器
场景:会造成可靠性低和负载分配不均衡,适合静态文件服务器

weight 权重配置
简介:weight和访问比率成正比,数字越大,分配得到的流量越高
场景:服务器性能差异大的情况使用

upstream lbs {server 192.168.159.133:8080 weight=5;server 192.168.159.133:8081 weight=10;
}

ip_hash(固定分发)

简介:根据请求按访问ip的hash结果分配,这样每个用户就可以固定访问一个后端服务器
场景:服务器业务分区、业务缓存本地缓存、Session需要单点的情况

upstream lbs {ip_hash;server 192.168.159.133:8080;server 192.168.159.133:8081;
}

upstream还可以为每个节点设置状态值

down 表示当前的server暂时不参与负载
server 192.168.159.133:8080 down;
backup 其它所有的非backup机器down的时候,会请求backup机器,这台机器压力会最轻,配置也会相对低
server 192.168.159.133:8080 backup;

Nginx后端节点可用性探测和配置实操

如果某个应用挂了,请求不应该继续分发过去
max_fails 允许请求失败的次数,默认为1.当超过最大次数时就不会请求
fail_timeout : max_fails次失败后,暂停的时间,默认:fail_timeout为10s

参数解释
max_fails=N 设定Nginx与后端节点通信的尝试失败的次数。
在fail_timeout参数定义的时间内,如果失败的次数达到此值,Nginx就这个节点不可用。
在下一个fail_timeout时间段到来前,服务器不会再被尝试。
失败的尝试次数默认是1,如果设为0就会停止统计尝试次数,认为服务器是一直可用的。
具体什么是nginx认为的失败呢

可以通过指令proxy_next_upstream来配置什么是失败的尝试。
注意默认配置时,http_404状态不被认为是失败的尝试。

upstream lbs {server 192.168.0.106:8080 max_fails=2 fail_timeout=60s ;server 192.168.0.106:8081 max_fails=2 fail_timeout=60s;
}
​
​
location /api/ {proxy_pass http://lbs;proxy_next_upstream error timeout http_500 http_503 http_404;
}

案例实操

暂停一个后节点,然后访问接口大于10次,Nginx会把这个节点剔除
重启这个节点,在fail_timeout周期里面不会再获取流量

经典应用

Nginx-全局异常兜底数据返回

任何接口都是可能出错,4xx、5xx等
如果业务没有做好统一的错误管理,直接暴露给用户,无疑是看不懂
所以假如后端某个业务出错,nginx层也需要进行转换
让前端知道Http响应是200,其实是将错误的状态码定向至200,返回了全局兜底数据

location /api/ {proxy_pass http://lbs;proxy_redirect default;# 存放用户的真实ipproxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  proxy_next_upstream error timeout http_503 non_idempotent;
​#开启错误拦截配置,一定要开启proxy_intercept_errors on;}
​
# 不加 =200,则返回的就是原先的http错误码;配上后如果出现500等错误都返回给用户200状态,并跳转至/default_apierror_page  404 500 502 503 504  =200  /default_api;location = /default_api {default_type application/json;return 200 '{"code":"-1","msg":"invoke fail, not found "}';}

Nginx封禁恶意IP

网络攻击时有发生,

TCP洪水攻击、注入攻击、DOS等
比较难防的有DDOS等
数据安全,防止对手爬虫恶意爬取,封禁IP

一般就是封禁ip

linux server的层面封IP:iptables 推荐用!!!

nginx的层面封IP ,方式多种 (但 req还是会打进来, 让nginx 返回 403, 占用资源)

Nginx作为网关,可以有效的封禁ip
单独网站屏蔽IP的方法,把include xxx; 放到网址对应的在server{}语句块,虚拟主机
所有网站屏蔽IP的方法,把include xxx; 放到http {}语句块。

nginx配置如下:

http{
# …
include blacklist.conf;
}

location / {
proxy_pass http://lbs;
proxy_redirect default;
}

#blacklist.conf目录下文件内容
deny 192.168.159.2;
deny 192.168.159.32;

./nginx -s reload #重新加载配置,不中断服务

自动化封禁思路

编写shell脚本
AWK统计access.log,记录每秒访问超过60次的ip,然后配合nginx或者iptables进行封禁
crontab定时跑脚本

Nginx配置解决浏览器跨域

Nginx开启跨域配置location下配置location / { # 允许的源add_header 'Access-Control-Allow-Origin' $http_origin;#   请求的时候可以根据Cookie配置add_header 'Access-Control-Allow-Credentials' 'true';# 请求的Header  自定义请求头信息  tokenadd_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';#    允许的请求方式    OPTIONS是H5的预检请求add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS';
​
#如果预检请求则返回成功,不需要转发到后端if ($request_method = 'OPTIONS') {add_header 'Access-Control-Max-Age' 1728000;add_header 'Content-Type' 'text/plain; charset=utf-8';add_header 'Content-Length' 0;return 200;}}

路径匹配-Nginx的locatioin规则

正则

^ 以什么开始
$ 以什么结束
​
^/api/user$

location 路径匹配

语法 location [ = | ~ | ~* | ^~ ] uri { … }
location = /uri
= 表示精准匹配,只要完全匹配上才能生效

location /uri
不带任何修饰符,表示前缀匹配 前面匹配上就可以了

location ^~ /uri/
匹配任何已 /uri/ 开头的任何查询并且停止搜索

location /
通用匹配,任何未匹配到其他location的请求都会匹配到

正则匹配
区分大小写匹配(~)
不区分大小写匹配(~*)
优先级(不要写复杂,容易出问题和遗忘)

精准匹配 > 字符串匹配(若有多个匹配项匹配成功,那么选择匹配长的并记录) > 正则匹配

server {
​server_name xdclass.net;
​location ~^/api/pub$ { ...}
​
}
​
^/api/pub$这个正则表达式表示字符串必须以/开始,以b $结束,中间必须是/api/pub
​
http://xdclass.net/api/pub 匹配(完全匹配)
http://xdclass.net/API/PUB 不匹配,大小写敏感
http://xdclass.net/api/pub?key1=value1 匹配
http://xdclass.net/api/pub/ 不匹配
http://xdclass.net/api/public 不匹配,不能匹配正则表达式测试location = /img/test.png {return 1;}
​location  /img/test.png {return 2;}
​location ^~/img/ {return 3;}
​location = / {return 4;}
​location / {return 5;}

地址重定向-Nginx的rewrite规则应用

重写-重定向

rewrite 地址重定向,实现URL重定向的重要指令,他根据regex(正则表达式)来匹配内容跳转到

语法
rewrite regex replacement[flag]
rewrite ^/(.*)  https://xdclass.net/$1 permanent
这是一个正则表达式,匹配完整的域名和后面的路径地址
replacement部分是https://xdclass.net/$1,$1是取自regex部分()里的内容

常用正则表达式:

字符 描述
^ 匹配输入字符串的起始位置
$ 匹配输入字符串的结束位置

  • 匹配前面的字符零次或者多次
  • 匹配前面字符串一次或者多次
    ? 匹配前面字符串的零次或者一次
    . 匹配除“\n”之外的所有单个字符
    (pattern) 匹配括号内的pattern

rewrite 最后一项flag参数
标记符号 说明
last 本条规则匹配完成后继续向下匹配新的location URI规则
break 本条规则匹配完成后终止,不在匹配任何规则
redirect 返回302临时重定向
permanent 返回301永久重定向

应用场景

非法访问跳转,防盗链
网站更换新域名
http跳转https
不同地址访问同一个虚拟主机的资源

Nginx配置Websocket反向代理

server {listen    80;server_name xdclass.net;location / {proxy_pass http://lbs;proxy_read_timeout 300s; //websocket空闲保持时长proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;}
}
核心是下面的配置 其他和普通反向代理没区别, 表示请求服务器升级协议为WebSocketproxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;服务器处理完请求后,响应如下报文# 状态码为101HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: upgrade

Nginx业务接口性能优化!!!

常见的开发人员控制的缓存分类

数据库缓存
应用程序缓存
Nginx网关缓存
前端缓存

让后端结果缓存离用户更进一步

/root/cache
本地路径,用来设置Nginx缓存资源的存放地址
levels=1:2

默认所有缓存文件都放在上面指定的根路径中,可能影响缓存的性能,推荐指定为 2 级目录来存储缓存文件;1和2表示用1位和2位16进制来命名目录名称。第一级目录用1位16进制命名,如a;第二级目录用2位16进制命名,如3a。所以此例中一级目录有16个,二级目录有16*16=256个,总目录数为16 * 256=4096个。
当levels=1:1:1时,表示是三级目录,且每级目录数均为16个

key_zone
在共享内存中定义一块存储区域来存放缓存的 key 和 metadata

max_size
最大 缓存空间, 如果不指定会使用掉所有磁盘空间。当达到 disk 上限后,会删除最少使用的 cache

inactive
某个缓存在inactive指定的时间内如果不访问,将会从缓存中删除

proxy_cache_valid
配置nginx cache中的缓存文件的缓存时间,proxy_cache_valid 200 304 2m 对于状态为200和304的缓存文件的缓存时间是2分钟

use_temp_path
建议为 off,则 nginx 会将缓存文件直接写入指定的 cache 文件中

proxy_cache
启用proxy cache,并指定key_zone,如果proxy_cache off表示关闭掉缓存

add_header Nging-Cache “$upstream_cache_status”

用于前端判断是否是缓存,miss、hit、expired(缓存过期)、updating(更新,使用旧的应答)
proxy_cache_path /root/cache levels=1:2 keys_zone=xd_cache:10m max_size=1g inactive=60m use_temp_path=off;

server {

location /{

proxy_cache xd_cache;
proxy_cache_valid 200 304 10m;
proxy_cache_valid 404 1m;
proxy_cache_key h o s t host hosturi i s a r g s is_args isa​rgsargs;
add_header Nginx-Cache “$upstream_cache_status”;
}
}

Nginx 正确使用姿势相关推荐

  1. 论机器学习的正确学习姿势

    论机器学习的正确学习姿势 策划 | 刘燕作者 | Caleb Kaiser翻译 | Sambodhi编辑 | Linda很多开发人员并没有机器学习领域的背景,在机器学习如火如荼的今天,没学过机器学习的 ...

  2. 什么叫取反_转载:CodeReview正确的姿势是什么?

    作者:微博是阿里孤尽 链接:https://www.zhihu.com/question/383079175/answer/1109655276 来源:知乎 著作权归作者所有.商业转载请联系作者获得授 ...

  3. class ts 扩展方法_ts类型声明文件的正确使用姿势

    ts类型声明文件的正确使用姿势 ts声明文件类型 npm install @types/jquery --save-dev 与npm一同发布 解释: package.json 中有 types 字段, ...

  4. java同步锁如何使用_java 同步锁(synchronized)的正确使用姿势

    关于线程安全,线程锁我们经常会用到,但你的使用姿势正确不,反正我用错了好长一段时间而不自知.所以有了这篇博客总结下线程锁的正确打开姿势 废话不说看例子 一,对整个方法进行加锁 1,对整个方法进行加锁, ...

  5. 直播预告|中台基石腾讯云TStack的正确使用姿势

    各位亲爱的小伙伴们,你们好啊~~ 他二哥技术直播又和大家见面了! 还记得在第一期的节目中,Sandy小姐姐和两位技术哥哥带我们见识了腾讯自研交换机的强大实力. (赶紧戳链接复习☝) 这次直播,他二哥邀 ...

  6. MongoDB系列:五、MongoDB Driver使用正确的姿势连接复制集

    MongoDB复制集(Replica Set)通过存储多份数据副本来保证数据的高可靠,通过自动的主备切换机制来保证服务的高可用.但需要注意的时,连接副本集的姿势如果不对,服务高可用将不复存在. 使用复 ...

  7. java 日志使用_Java日志正确使用姿势

    前言 关于日志,在大家的印象中都是比较简单的,只须引入了相关依赖包,剩下的事情就是在项目中"尽情"的打印我们需要的信息了.但是往往越简单的东西越容易让我们忽视,从而导致一些不该有的 ...

  8. Python re 库的正确使用姿势

    前提假设: 已经充分掌握 PCRE 风格正则表达式 熟读 re 库文档 Why 正则表达式的强大已不用我赘述,Python 对此的支持也是十分强大,只不过: re.search(pattern, st ...

  9. 索引的正确“打开姿势”

    本文分享自华为云社区<DWS 索引的正确"打开姿势">,原文作者:hoholy . 索引能干什么呢,一言以蔽之:查询加速.常见的索引有下面几种: 1. 常用索引介绍 1 ...

最新文章

  1. cookie、session总结
  2. mysql ceill_MYSQL常用函数
  3. excel数据库_将excel文件导入mysql数据库教程(PHP实现)
  4. python类型转换-Python基本数据类型转换
  5. C#单例---饿汉式和懒汉式
  6. 总结python中基本的面试题
  7. 计算机网络技术放块队解说词,基于《计算机网络技术》课程多媒体课件制作与设计.doc...
  8. Fabric学习笔记(一)- Centos 7下的Fabric 2.3.2环境搭建
  9. python 科研统计_Python科研统计作图Plotnine+Seaborn+matplotlib替代R ggplot2系列!(二)...
  10. voc数据集转换为txt
  11. 【时序】LSTNet:结合 CNN、RNN 以及 AR 的时间序列预测模型
  12. kubernetes学习总结-9Kubernetes的存储机制
  13. 浙江工业大学计算机与软件学院,浙江工业大学计算机科学与技术学院、软件学院...
  14. 思维导图软件 XMind 8 和 XMind 2020的选择
  15. 【经典蓝牙】蓝牙 A2DP协议分析
  16. 英语 计算机水平怎么填写,计算机水平一般怎么填
  17. 文件查找(locate、find)
  18. C语言中fopen函数用法详解
  19. FLEXSIM常用代码
  20. 深搜广搜专题【DFS】【BFS】

热门文章

  1. 机器学习和统计学习的区别
  2. html5的水墨画,HTML5 3D彩色水墨画悬停侧翻动效
  3. 考研数学张宇:7月复习规划
  4. Pandas个人最强笔记
  5. 基于433M频率无线通信模块在评委台的无线传输应用
  6. linux 中query exp日期相关,Oracle exp query条件检索在Windows和Linux下的命令区别
  7. Linux内核怎么学?看这一份书单足够!
  8. python中calendar模块_python calendar模块
  9. 浏览器协商缓存与强制缓存经典版
  10. kaldi 1d-CNN网络结构