负载均衡-动静分离

news2024/11/24 14:23:40

文章目录

  • 一.Nginx负载均衡实现原理
    • 1、反向代理原理
    • 2、反向代理的概念
    • 3、反向代理的优势
    • 4、Nginx四层反向代理和七层反向代理
  • 二、Nginx动静分离实现原理
    • 1、动静分离的概念
    • 2、动静分离的原理
    • 3、Nginx 静态处理优势
  • 三、Nginx负载均衡调度算法(6种)
    • 1、轮询(默认)
    • 2、加权轮训
    • 3、least_conn最少连接
    • 4、ip_hash
    • 5、fair(第三方)
    • 6、url_hash(第三方)
  • 四、Nginx+Tomcat负载均衡、动静分离的操作步骤
    • 1、准备三台服务器,Nginx作为负载均衡器,Tomcat作为应用服务器
    • 2、部署Nginx 负载均衡器
    • 3、部署2台Tomcat 应用服务器
    • 4、动静分离配置
    • 5、测试效果
  • 五、实例操作:Nginx+Tomcat负载均衡、动静分离
    • 1、准备好Nginx服务器(192.168.2.66)
    • 2、准备好tomcat服务器1(192.168.2.105:8080)
    • 3、动静分离Tomcat1 server 配置
      • 3.1 配置Tomcat1的动态网页显示内容
      • 3.2 添加新的host内容
      • 3.3 重启服务
    • 4、Tomcat2 server 配置(实例1)
      • 4.1 创建Tomcat实例1的网页测试目录test和测试网页文件
      • 4.2 Tomcat实例1主配置删除前面的 HOST 配置,添加新的HOST配置
      • 4.3 重启服务
    • 5、Tomcat2 server 配置(实例2)
      • 5.1 创建Tomcat实例2的网页测试目录test和测试网页文件
      • 5.2 Tomcat实例2主配置删除前面的 HOST 配置,添加新的HOST配置
      • 5.3 重启服务
    • 6、Tomcat2 server 配置(实例2)
      • 6.1 创建Tomcat实例2的网页测试目录test和测试网页文件
      • img6.2 Tomcat实例2主配置删除前面的 HOST 配置,添加新的HOST配置
      • 6.3 重启服务
    • 7、Nginx server 配置(192.168.2.66)
      • 7.1 准备网页显示相关内容
      • 7.2 修改主配置文件——七层转发配置
      • 7.3 重启服务
    • 8、使用win10客户端在浏览器中进行测试,动态页面测试进行不断刷新即可
      • 7.1 测试静态页面效果
      • 7.2 测试负载均衡效果,不断刷新浏览器测试
  • 六、Nginx四层代理配置
    • 1、nginx做四层代理时编译需要添加 --with-stream模块
      • 1.1 查看当前模块
      • 1.2 在已有的nginx上面添加该模块--with-stream
    • 2、nginx四层代理配置
      • 2.1 修改配置文件进行四层代理配置
      • 2.2 重启服务
    • 3 浏览器访问测试

一.Nginx负载均衡实现原理

Nginx实现负载均衡是通过反向代理实现

1、反向代理原理

img

2、反向代理的概念

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

反向代理是为服务端服务的,反向代理可以帮助服务器接收来自客户端的请求,帮助服务器做请求转发,负载均衡等。

反向代理对服务端是透明的,对我们是非透明的,即我们并不知道自己访问的是代理服务器,而服务器知道反向代理在为他服务。

3、反向代理的优势

反向代理的优势:

  • 隐藏真实服务器;
  • 负载均衡便于横向扩充后端动态服务;
  • 动静分离,提升系统健壮性;

4、Nginx四层反向代理和七层反向代理

四层反向代理:是基于IP+PORT(TCP/UDP端口)转发

七层反向代理:基于http,https,mail代理转发

二、Nginx动静分离实现原理

1、动静分离的概念

动静分离是指在 web 服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提示整个服务的访问性和可维护性。

2、动静分离的原理

服务端接收来自客户端的请求中。既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端

3、Nginx 静态处理优势

• Nginx处理静态页面的效率远高于Tomcat的处理能力

• 若Tomcat的请求量为1000次,则Nginx的请求量为6000次

• Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M

• Nginx处理静态资源的能力是Tomcat处理的6倍

三、Nginx负载均衡调度算法(6种)

1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果超过了最大失败次数后(max_fails,默认1),在失效时间内(fail_timeout,默认10秒),该节点失效权重变为0,超过失效时间后,则恢复正常,或者全部节点都为down后, 那么将所有节点都恢复为有效继续探测,一般来说rr可以根据权重来进行均匀分配。

2、加权轮训

weight的值越大分配到的权限概率越高,主要用于后端每台服务器性能不均匀情况,或者仅仅为在主从情况下设置不同的权重值,达到合理利用主机资源

3、least_conn最少连接

优先将客 户端请求调度到当前连接最少的服务器。

4、ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器, 可以解决session(会话状态)的问题,但是ip_hash会造成负载不均,有的服务请求接受多,有的服务请求接受少,所以不建议采用ip_hash模式

补充:session的概念

session共享问题可用后端服务的session共享代替nginx的ip_hash。ip_hash无法作用于四层反向代理,配置需要将其他模式删除例如weight删掉然后直接在加上

注释:

Session又称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关的一些信息。我们控制用户去权限中经常用到Session来存储用户状态

session其实分为客户端Session和服务器端Session。

当用户首次与Web服务器建立连接的时候,服务器会给用户分发一个 SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在 HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端。这个SessionID就是保存在客户端的,属于客户端Session。

其实客户端Session默认是以cookie的形式来存储的,所以当用户禁用了cookie的话,服务器端就得不到SessionID。这时我们可以使用url的方式来存储客户端Session。也就是将SessionID直接写在了url中,当然这种方法不常用。

Session共享:指在一个浏览器对应多个Web服务时,服务端的Session数据需要共享。例如单点登录、Web服务器集群等场景都需要用到、多子服务。

5、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

6、url_hash(第三方)

和ip hash算法类似,是对每个请求按url的hash结果分配,使每个URL定向到同一个后端服务器, 但是也会造成分配不均的问题, 这种模式后端服务器为缓存时比较好。

四、Nginx+Tomcat负载均衡、动静分离的操作步骤

1、准备三台服务器,Nginx作为负载均衡器,Tomcat作为应用服务器

Nginx 服务器:192.168.2.66:80
Tomcat服务器1:192.168.2.105:80
Tomcat服务器2:192.168.2.200:8080 192.168.2.200:8081

2、部署Nginx 负载均衡器

systemctl stop firewalld
setenforce 0
 
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
 
useradd -M -s /sbin/nologin nginx
 
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/
 
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \                                #启用文件修改支持
--with-http_stub_status_module \                              #启用状态统计
--with-http_gzip_static_module \                             #启用 gzip静态压缩
--with-http_flv_module \                            #启用 flv模块,提供对 flv 视频的伪流支持
--with-http_ssl_module                              #启用 SSL模块,提供SSL加密功能
----------------------------------------------------------------------------------------------------------
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module
 
 
make && make install
 
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
 
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
 
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

3、部署2台Tomcat 应用服务器

systemctl stop firewalld
setenforce 0
 
tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
 
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar                      
export PATH=$JAVA_HOME/bin:$PATH
 
source /etc/profile.d/java.sh
 
tar zxvf apache-tomcat-8.5.16.tar.gz
 
mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat
 
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
 
netstat -ntap | grep 8080

4、动静分离配置

Tomcat1 server 配置

mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>   
</head>
<body>
<% out.println("动态页面 1,Tomcat1");%>
</body>
</html>

vim /usr/local/tomcat/conf/server.xml
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true">
    </Context>
</Host>
 
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

Tomcat2 server 配置(多实例)

mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test
 
vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>  
</head>
<body>
<% out.println("动态页面 2,Tomcat2中的实例1");%>
</body>
</html>
 
vim /usr/local/tomcat/tomcat1/conf/server.xml
#删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    <Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
</Host>
 
/usr/local/tomcat/tomcat1/bin/shutdown.sh
/usr/local/tomcat/tomcat1/bin/startup.sh
 
vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test3 page</title>   
</head>
<body>
<% out.println("动态页面 3,Tomcat2中的实例2");%>
</body>
</html>
 
vim /usr/local/tomcat/tomcat2/conf/server.xml
#删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    <Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />
</Host>
 
/usr/local/tomcat/tomcat2/bin/shutdown.sh
/usr/local/tomcat/tomcat2/bin/startup.sh

Nginx server 配置——七层转发配置

#准备静态页面和静态图片
echo '<html><body><h1>这是静态页面</h1></body></html>' > /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/img
cp /root/game.jpg /usr/local/nginx/html/img
 
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
    #gzip on;
     
    #配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大
    upstream tomcat_server {
        server 192.168.116.70:8080 weight=1;
        server 192.168.116.120:8080 weight=1;
        server 192.168.116.120:8081 weight=1;
    }
     
    server {
        listen 80;
        server_name www.jy.com;
     
        charset utf-8;
     
        #access_log logs/host.access.log main;
         
        #配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理
        location ~ .*\.jsp$ {
            proxy_pass http://tomcat_server;
#设置后端的Web服务器可以获取远程客户端的真实IP
##设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。
            proxy_set_header HOST $host;
##把$remote_addr赋值给X-Real-IP,来获取源IP
            proxy_set_header X-Real-IP $remote_addr;
##在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
         
        #配置Nginx处理静态图片请求
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
            root /usr/local/nginx/html/img;
            expires 10d;
        }
         
        location / {
            root html;
            index index.html index.htm;
        }
......
    }
......
}

5、测试效果

测试静态页面效果
浏览器访问 http://192.168.2.66/
浏览器访问 http://192.168.2.66/pic.jpg

测试负载均衡效果,不断刷新浏览器测试
浏览器访问 http://192.168.2.66/index.jsp

五、实例操作:Nginx+Tomcat负载均衡、动静分离

1、准备好Nginx服务器(192.168.2.66)

img

img

img

img

img

img

img

在这里插入图片描述

2、准备好tomcat服务器1(192.168.2.105:8080)

img

img

img

img

img

img

3、动静分离Tomcat1 server 配置

3.1 配置Tomcat1的动态网页显示内容

img

img

3.2 添加新的host内容

img

3.3 重启服务

img

4、Tomcat2 server 配置(实例1)

4.1 创建Tomcat实例1的网页测试目录test和测试网页文件

img

img

4.2 Tomcat实例1主配置删除前面的 HOST 配置,添加新的HOST配置

img

img

4.3 重启服务

img

5、Tomcat2 server 配置(实例2)

5.1 创建Tomcat实例2的网页测试目录test和测试网页文件

img

img

5.2 Tomcat实例2主配置删除前面的 HOST 配置,添加新的HOST配置

img

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xy4mWM0h-1668693114348)(https://img2022.cnblogs.com/blog/2705490/202205/2705490-20220512212750242-606415726.png)]

5.3 重启服务

img

6、Tomcat2 server 配置(实例2)

6.1 创建Tomcat实例2的网页测试目录test和测试网页文件

img

img6.2 Tomcat实例2主配置删除前面的 HOST 配置,添加新的HOST配置

img

img

6.3 重启服务

img

7、Nginx server 配置(192.168.2.66)

7.1 准备网页显示相关内容

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3thW7qkc-1668693114350)(https://img2022.cnblogs.com/blog/2705490/202205/2705490-20220512221247482-1240249958.png)]

7.2 修改主配置文件——七层转发配置

img

img

7.3 重启服务

img

img

8、使用win10客户端在浏览器中进行测试,动态页面测试进行不断刷新即可

测试静态页面效果
浏览器访问 http://192.168.2.66/
浏览器访问 http://192.168.2.66/meme.jpg

测试负载均衡效果,不断刷新浏览器测试
浏览器访问 http://192.168.2.66/index.jsp

7.1 测试静态页面效果

img

7.2 测试负载均衡效果,不断刷新浏览器测试

imgimgimg

六、Nginx四层代理配置

1、nginx做四层代理时编译需要添加 --with-stream模块

1.1 查看当前模块

img

1.2 在已有的nginx上面添加该模块–with-stream

img

img

img

2、nginx四层代理配置

2.1 修改配置文件进行四层代理配置

img

img

2.2 重启服务

img

3 浏览器访问测试

基于端口访问,但是会有60s左右的缓存时间才会实现跳转到别的tomcat服务器

输入网址:http://192.168.2.66

img

img

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/13723.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sentinel源码剖析之执行流程

1、说明 Sentinel主要用来流控&#xff0c;熔断降级保护目标资源用的&#xff0c;常用集成SCG&#xff0c;SpringBoot&#xff0c;SprinMVC这些&#xff0c;但底层本质没变&#xff0c;但是体现形式上会有差别。例如SCG底层是Netty 和 SpringWebFlux 采用Reactor Stream处理&a…

策略验证_买入口诀_三杆通底反弹在即

写在前面&#xff1a; 1. 本文中提到的“股票策略校验工具”的具体使用操作请查看该博文&#xff1b; 2. 文中知识内容来自书籍《同花顺炒股软件从入门到精通》 3. 本系列文章是用来学习技法&#xff0c;文中所得内容都仅仅只是作为演示功能使用 目录 解说 策略代码 结果 解…

【POJ No. 1988】 方块栈 Cube Stacking

【POJ No. 1988】 方块栈 Cube Stacking POJ 题目地址 【题意】 贝西正在玩方块游戏&#xff0c;方块编号为1&#xff5e;N&#xff08;1≤N ≤30,000&#xff09;&#xff0c;开始时每个方块都相当于一个栈。 贝西执行P 个&#xff08;1≤P ≤100,000&#xff09;操作&…

深圳市数字经济指数发布:数字经济蓬勃发展,数字用户深度渗透

2022年1月&#xff0c;国务院印发了《“十四五”数字经济发展规划》。规划提出&#xff0c;到2025年&#xff0c;数字经济核心产业增加值占国内生产总值比重达到10%&#xff0c;数据要素市场体系初步建立&#xff0c;产业数字化转型迈上新台阶&#xff0c;数字产业化水平显著提…

【论文精读4】MVSNet系列论文详解-CVP-MVSNet

CVP-MVSNet全文名为“Cost Volume Pyramid Based Depth Inference for Multi-View Stereo”&#xff0c;主要创新点在于使用由粗到细&#xff08;coarse-to-fine&#xff09;模式来构建代价体金字塔&#xff08;cost volume pyramid&#xff09;&#xff0c;流程如下&#xff1…

Java虚拟机之运行时数据区(一)

Java虚拟机之运行时数据区 简述 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途&#xff0c;以及创建和销毁的时间&#xff0c;有的区域随着虚拟机进行启动而一直存在&#xff0c;有些区域则是依赖用户线程的启动和结…

房子装修有哪些注意事项要注意?

房子装修有哪些注意事项要注意&#xff1f;这里的东西太多了&#xff0c;可能三天三夜都搞不清楚&#xff0c;而且对于初次装修的业主来说&#xff0c;很多专业术语都是一头雾水&#xff0c;所以本文就简单介绍一下&#xff0c;从装修到装修&#xff0c;以及需要注意的几点。 房…

【深度学习】实验4答案:脑部 MRI 图像分割

DL_class 学堂在线《深度学习》实验课代码报告&#xff08;其中实验1和实验6有配套PPT&#xff09;&#xff0c;授课老师为胡晓林老师。课程链接&#xff1a;https://www.xuetangx.com/training/DP080910033751/619488?channeli.area.manual_search。 持续更新中。 所有代码…

数据之道读书笔记-05面向“联接共享”的数据底座建设

数据之道读书笔记-05面向“联接共享”的数据底座建设 在从信息化向数字化转型的过程中&#xff0c;企业积累了海量的数据&#xff0c;并且还在爆发式地增长。数据很多&#xff0c;但真正能产生价值的数据却很少。数据普遍存在分散、不拉通的问题&#xff0c;缺乏统一的定义和架…

[发送AT指令配置a7670C模块上网]

发送AT指令配置a7670C模块上网内核配置调试验证应用的编写AT的指令的使用内核配置 概要&#xff1a;基于rv1126平台调试SIMCOM 7670C 4G模块。 1&#xff0c;内核配置及内核代码修改 1.1按照芯片data sheet修改kernel代码&#xff0c;添加PID和VID。 此处根据不同的芯片按照其…

Mybatis plus注解@TableField详解

Mybatis plus注解TableField详解 目录1. 前言2. 应用场景2.1 更新null值2.2 查询时排除字段2.3 非数据库字段属性1. 前言 TableField 字段注解&#xff0c;该注解用于标识非主键的字段。将数据库列与 JavaBean 中的属性进行映射。 2. 应用场景 2.1 更新null值 想要在更新字…

auth模块方法的使用

文章目录1、创建超级用户(管理员)2、获取表&#xff0c;检验密码3、保存用户状态4、获取用户对象&#xff0c;校验用户是否登录5、验证用户是否登录6、修改密码7、注销8、注册9、方法总结10、如何扩展auth_user表1、创建超级用户(管理员) """ 在创建好一个djan…

医保医用耗材编码目录——在线查询

医保医用耗材编码目录是按照“统一分类、统一编码、统一维护、统一发布、统一管理”的总体要求下进行更新维护&#xff0c;旨在强调“分类”与“追溯”属性&#xff0c;助力将医保编码标准统一为新时期医保信息交换的通用语言。 对于医保医用耗材分类与代码数据的“分类”与“追…

高数 | 【数一】 多元函数积分学 —— 总复习框架总结

自用复习笔记。 整理参考于 2023张宇高数18讲、武忠祥十七堂课。 三重积分(质量) 概念与对称性计算 直角坐标系 先一后二法/先z后xy法/投影穿线法(柱体,侧面为柱体)先二后一法/先xy后z法/定限截面法(旋转体)柱面坐标系 = 极坐标下二重积分与定积分球面坐标系 应用 体积总…

开源版禅道的使用教程

文章目录一、禅道简介二、下载安装三、敏捷版基本功能使用四、其他版本使用一、禅道简介 1.官网介绍&#xff1a;国产开源项目管理软件。核心管理思想基于敏捷方法scrum。集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体。 scrum&#xff1a;迭代式增量软…

DHCP地址池耗尽攻击

DHCP地址池耗尽攻击 攻击原理简介 ​ 路由器内置的DHCP服务器&#xff0c;划定了一个地址池作为自动分配给接入终端号IP地址的范围。 ​ 攻击工具伪装成大量的接入主机&#xff0c;向路由器内的DHCP服务器请求大量的IP地址分配。 ​ 在DHCP的地址租期超时之前&#xff0c;已经分…

CentOS 7搭建Yunzai-Bot原神机器人

CentOS 7.6搭建Yunzai-Bot原神机器人 前言 目前使用较多的原神机器人&#xff1a; LittlePaimon ✨基于NoneBot2和go-cqhttp的原神Q群机器人 原神多功能机器人&#xff0c;查询游戏信息、图鉴攻略、树脂提醒等等&#xff0c;以及各种各样的好玩的功能&#xff0c;不仅仅是原神…

行业案例 | 睿眼攻击溯源组合拳让黑客攻击事件无所遁形

项目背景 近年来,网络安全形势愈发严峻&#xff0c;黑客入侵、信息泄露等信息安全事件层出不穷&#xff0c;给企业带来了巨大的经济损失。一是互联网出口应用多为Web应用&#xff0c;有效防护和监测Web应用的安全性是金融行业客户信息安全领域的一项重点工作&#xff1b;二是随…

C++11 lambda+包装器+可变参数模板

索引lambda表达式(1).什么是lambda(2).lambda基本规则(3).lambda实现原理包装器可变参数模板lambda表达式 (1).什么是lambda 假设有这样一个类 struct Goods { string _name; // 名字 double _price; // 价格 int _evaluate; // 评价 }&#xff1b;现在要将商品分别按照名字…

“健康中国”战略下如何推进公共卫生建设,海尔生物医疗给出“智慧答案”

【潮汐商业评论/原创】 公共卫生是一个老话题&#xff0c;但在新时代的背景下正在呈现出诸多新故事。在人民健康需求日益提升的当下&#xff0c;推动公共卫生服务体系的高效、便捷升级成了新时期的一大命题&#xff0c;而这一问题的答案则指向了公共卫生需要“数智化”。 在此…