LNMP架构之web服务器实战

LNMP架构

1.nginx部署

systemctl disable --now keepalived.service

关闭keepalived服务,避免冲突

将下载好的nginx软件压缩包直接拖入mobaxterm目录即可

tar zxf nginx-1.23.3.tar.gz

cd nginx-1.23.3/

yum install -y gcc pcre-devel openssl-devel

#安装依赖性

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module

#源码安装

make

#编译

make clean

#想要重新编译,先清除掉Makefiles和abjs

vim auto/cc/gcc

调试模式适用于开发者,关闭后编译生成的二进制程序比较精简

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module

#再次安装

make install

#将编译好的程序安装到系统指定路径

systemd site:www.nginx.com

#指定到官网搜索

vim /usr/lib/systemd/system/nginx.service

二进制程序启动和脚本启动勿混用,可能会导致服务异常

systemctl daemon-reload

#重载后安装完成


2.nginx平滑升级

下载软件:nginx: downloadicon-default.png?t=N7T8https://nginx.org/en/download.html

要实现在线升级,升级过程中服务不会中断

tar zxf nginx-1.25.3.tar.gz

cd nginx-1.25.3

vim auto/cc/gcc

#修改gcc

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module

#执行与原来相同的命令,静态编译需与原来版本参数类型相同

make

此时切忌执行make install

因为原来程序正在运行,会直接覆盖掉原来的程序

拷贝新程序

\cp -f nginx /usr/local/nginx/sbin/

#  \转译

ps ax|grep nginx

#获取nginx进程id

master会监控worker的健康状态,对外接受80端口请求,并且负载到worker

worker数一般和cpu核心数相同,worker数量越多,nginx处理的并发数越多

kill -WINCH 7268

3.版本回退

拷贝原程序:

cd /usr/local/nginx/sbin/

\cp -f nginx.old nginx

唤醒原版本:

kill -HUP 7268

回收新版本:

kill -WINCH 7577

整个过程中未出现服务不可用情况


反向代理负载均衡

正向代理即客户端代理,代理客户端,服务端不知道实际发起请求的客户端。

反向代理即服务端代理,代理服务端,客户端不知道实际提供服务的服务端。

1.修改nginx服务启动用户 

useradd -M -d /usr/local/nginx/ -s /sbin/nologin nginx

vim nginx.conf

nginx -s reload

#重载

ps axu | grep nginx

2.nginx进程与cpu核心绑定

nginx -s reload

此方法有可能导致worker进程负载不均衡

vim nginx.conf

nginx -s reload

3.修改nginx并发连接数

vim nginx.conf 

kernel > system > app

#内核的优先级高于操作系统,再高于应用

修改系统限制:

vim /etc/security/limits.conf

内核参数是根据本机物理资源自动配置的,一般不需要修改

负载均衡设置

文档:

HTTP Load Balancing | NGINX DocumentationLoad balance HTTP traffic across web or application server groups, with several algorithms and advanced features like slow-start and session persistence.icon-default.png?t=N7T8https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/

vim nginx.conf

保存退出

nginx -s reload

用192.168.145.14访问

因为服务自带健康检测,配置文件中写的是8080,server3并未监听8080端口

server3:

vim /etc/httpd/conf/httpd.conf

#编辑apache配置文件

systemctl restart httpd

#重启服务

server4:

访问11的80端口,可以调度到13的8080端口,改变了访问目标的端口

client -> nginx -> RS -> nginx -> client

原路径返回,客户端只知道有nginx,看不到RS的存在

nginx作反向代理,客户端并不会直接访问RS,是由nginx访问后端,再返回交给客户端,所以nginx真正并发连接量应该是并发连接数除以二

nginx对后端带有健康检测

关闭server2httpd服务

如果server3也挂掉

server1:

yum install -y httpd

#安装httpd

vim /etc/http/conf/httpd.conf

systemctl start httpd

#启动软件

nginx和httpd各自占用各自端口,不冲突

vim nginx.conf

nginx -s reload

此时再次访问:

只要有后端RS正常,都不会访问backup

4.nginx负载均衡算法

Round Robin

#轮询,请求在服务器之间均匀分布,并考虑服务器权重。默认情况下使用此方法(没有启用它的指令)

Least Connections

#最少连接,将请求发送到活动连接数最少的服务器,同样考虑服务器权重

IP Hash

#IP哈希,请求发送到的服务器由客户端 IP 地址确定。在这种情况下,IPv4 地址的前三个八位字节或整个 IPv6 地址用于计算哈希值。该方法保证来自同一地址的请求到达同一服务器,除非它不可用。

一个客户端ip对应一个服务器,但是如果使用CDN反向代理,客户端获得的将都是CDN的ip地址,无法得到真正的客户端IP地址

Generic Hash

#通用哈希,请求发送到的服务器由用户定义的键确定,该键可以是文本字符串、变量或组合。例如,密钥可以是配对的源 IP 地址和端口,也可以是 URI

5.nginx模块编译

给nginx增加sticky模块

工作原理:Sticky是基于cookie的一种负载均衡解决方案,通过分发和识别cookie,使来自同一个客户端的请求落在同一台服务器上,默认cookie标识名为route: 1.客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。

nginx -s stop

#停止nginx服务

yum install -y unzip

#安装unzip

unzip nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip

#解压软件包

cd nginx-1.23.3/

make clean

#清除之前编译的可执行文件及配置文件

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42

#重新配置,--add-module增加第三方模块

open source不自带此模块,如果使用nginx plus则自带

make

#重新编译

\cp -f nginx /usr/local/nginx/sbin/nginx

#覆盖

cd /usr/local/nginx/conf/

vim nginx.conf

nginx -t

#检测语法

nginx

#启动

不断刷新只会显示server2,因为浏览器有cookies

sticky算法适用于有中间场景或者有反向代理的架构

6.虚拟主机

mkdir /www1/

echo web1 > /www1/index.html

#用来做测试

vim /usr/local/nginx/conf/nginx.conf

nginx -t

#检测语法

nginx -s reload

测试:

vim /etc/hosts

7.安全控制

限制并发连接

vim nginx.conf

不使用反向代理

测试:

server4:

yum install -y httpd-tools

#安装工具包

使用压力测试工具ab

ab -c 10 -n 10 http://192.168..145.11/download/iso7.gif

#并发量10 请求数10

cat /usr/local/nginx/logs/access.log

#查看日志

nginx -s reload

#重载

重新测试

此时限制并发量为1,所以报错

ab -c 1 -n 10 http://192.168.145.11/download/iso.gif

#并发量1 请求数10

限制请求速率

vim nginx.conf

nginx -s reload

此时限制并发连接为1,并发速率1

vim nginx.conf

nginx -s relaod

使用此配置时,如果请求速率超过每秒请求数,则超出速率的请求将被放入区域。当区域已满时,过多的请求将被排队,此队列的大小为请求。队列中的请求处理以总速率不大于指定速率的方式延迟。超过突发限制的请求将被拒绝,并显示错误。

如果在流量突发期间不希望延迟请求,请添加以下参数:nodelay

nginx -s reload

使用此配置,无论指定什么,都将立即处理限制内的过多请求,超出突发限制的请求将被拒绝并出现错误。

delay=3

#指定延迟

使用此配置,前 3 个请求将无延迟地传递,接下来的 2 个请求以总速率不大于指定速率的方式延迟,进一步过多的请求将被拒绝,因为已超过总突发大小,后续请求将被延迟。

限制带宽

limit_rate 100k

使用此设置,客户端将能够以每秒千字节的最大速度通过单个连接下载内容。但是,客户端可以打开多个连接。因此,如果目标是防止下载速度超过指定值,则还应限制连接数。

ab -c 1 -n 5 http://192.168.145.11/download/iso7.gif

#并发量1 请求数5

若要仅在客户端下载一定数量的数据后才施加限制,请使用 limit_rate_after 指令。


nginx服务常规配置

1.https配置

 vim /usr/local/nginx/conf/nginx.conf

cd /etc/tki/pls/certs

make cert.pem

mv cert.pem /usr/local/nginx/conf/

cert.pem

#自签名证书

cat cert.pem

证书和私钥都在此文件

检测语法并重载

访问:

https默认端口为443

curl https://www1.westos.org

2.重定向

80重定向到443

对域名重定向:

vim nginx.conf

rewrite ^/(.*)$ https://www1.westos.org/$1 permanent;

# $1位置参数,如果从子页面访问,自动匹配内容

将请求的 URL 路径部分作为参数加到目标 URL 地址中

访问:

www1.westos.org/bbs重定向bbs.westos.org 

vim nginx.conf

server4:

添加解析

vim /etc/hosts

重定向:

因为url后加了index.html,与当前策略不符,重定向失败

修改:

vim  nginx.conf

测试:

此时主站里的论坛bbs可以移除了

3.自动索引

不做索引:

关闭限速后直接展示图片

vim nginx.conf

4.缓存配置

vim nginx.conf

访问:

到期时间2024

5.日志轮转

vim /opt/nginx_log.sh

每天将 Nginx 的访问日志备份并重新打开新的日志文件

chmod +x /opt/nginx_log.sh

#增加可执行权限

crontab -e

可根据产生日志量来决定处理周期

6.站点限制

vim nginx.conf

启用监控模块

激活监控模块

访问定义的URL,实际不存在

vim nginx.conf

nginx -t

nginx -s reload

tail -f logs/access.log

#监控日志

此时再刷新日志无增长记录

vim nginx.conf

只允许本机访问

7.中文乱码

vim index.html

乱码原因是未设定字体

vim nginx.conf

清除浏览器网页缓存

http状态码

需了解,有利于排错

8.防盗链

使用nginx自带的防盗链机制 

配置server2上的apache服务,盗链server1上的图片

server4测试机安装图形,使用浏览器测试

systemctl isolate graphical.target

#切换到图形

systemctl set-default graphical.target

#默认从图形启动

vim /etc/hosts

#添加解析

用浏览器访问server2:daolian.westos.org

此时未做防盗链,所以可以盗取

cd /usr/local/nginx/logs

配置nginx网页防盗链

只允许来源于"www1.westos.org"的请求。如果请求来源不在允许列表中,则会被认为是非法请求($invalid_referer变量为真),然后使用rewrite指令重定向到"http://bbs.westos.org/daolian.jpg"这张图片

重定向到站点以外的地方,可避免过多消耗本身站点的流量

保护图片资源不被非法访问和盗链

www1.westos.org可正常访问


php部署

1.php安装 

yum install -y bzip2 systemd-devel libxml2-devel sqlite-devel libpng-devel libcurl-devel

#安装bzip2压缩工具和一些依赖包

yum install -y oniguruma-6.8.2-1.el7.x86_64.rpm oniguruma-devel-6.8.2-1.el7.x86_64.rpm

#同时安装两个RPM包,解决依赖性

tar xf php-7.4.12.tar.bz2

#解压php压缩包

./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-curl --with-iconv --with-mhash --with-zlib --with-openssl --enable-mysqlnd --with-mysqli --with-pdo-mysql --disable-debug --enable-sockets --enable-soap --enable-inline-optimization --enable-xml --enable-ftp --enable-gd --enable-exif --enable-mbstring --enable-bcmath --with-fpm-systemd

#配置

make

#按照生成的Makefile文件指定规则编译

make install

#安装

2.php配置 

vim php-fpm.conf

#在全局配置中打开pid,程序会新建pid

cd php-fpm.d/

vim www.conf

如果将php部署在其他主机上,则需要部署监听ipv4或ipv6地址,或监听特定端口上所有地址

cd /root/php-7.4.12/

#进入php源码目录

cp php.ini-production /usr/local/php/etc/php.ini

#拷贝主配置文件

vim /usr/local/php/etc/php.ini

cp php-fpm.service /usr/lib/systemd/system

#拷贝启动脚本

vim /usr/lib/systemd/system

systemctl daemon-reload

#重载systemd配置文件

systemctl start php-fpm

#启动php-fpm

netstat -antlp | grep :9000

systemctl enable php-fpm

#设置开机自启

3.nginx与php整合

nginx处理并发能力强,将nginx与php整合可以更有效地处理动态内容,提高web服务器的性能和效率

cd /usr/local/nginx/conf

vim nginx.conf

#编辑nginx主配置文件

cat fastcgi.conf

#查看文件

nginx -s reload

#重载nginx

vim /usr/local/nginx/html/index.php

#生成php访问测试文件

phpinfo()

#此函数作用是输出当前php解释器的配置信息和环境变量

测试:

在浏览器访问: http://192.168.145.11/index.php

添加php环境变量

vim ~/.bash_profile

将/usr/local/php/bin添加到系统的PATH变量中

source ~/.bash_profile

#使文件生效

查找php命令路径

4.php动态扩展模块

缺少configure

利用phpize生成

yum install -y autoconf

#安装此工具

再次执行phpize

./configure

#配置

make

#编译

make install

#安装

php -m

#列出php所有的扩展模块(modules)

未读取此程序

vim /usr/local/php/etc/php.ini

#编辑php主配置文件

#动态扩展配置区域

systemctl reload php-fpm

#重载php-fpm

cd ~/memcache-4.0.5.2/

cp example.php memcache.php /usr/local/nginx/html/

#拷贝测试文件到nginx默认发布目录

yum install -y memcached

#安装memcached服务

systemctl enable --now memcached

#打开并开机启动

该软件使用物理内存作为缓存空间,用于加速,缺点是服务重启时,会丢失缓存数据

vim memcache.php

#用于监控内存缓存状态

若部署在远程主机,则要写入该主机ip

测试:

浏览器访问:http://192.168.145.11/memcache.php

测试:

访问http://192.168.145.11/example.php

刷新几次,查看缓存命中状态

在server4中测试:

ab -c 10 -n 500 http://192.168.145.11/index.php

存在失败说明请求过大,超过处理能力,可降低并发或减少请求

对比:

nginx高速缓存

仅在php使用memcache模块还不是最佳的处理方式

client -> nginx -> *.php -> fastcgi_pass -> php-fpm:9000 -> nginx -> client

这种方式客户端等待时间过长,都需要后端9000端口处理,等待时间主要取决于php处理的速度

此为传统缓存逻辑,并非最优

是否可以将数据缓存功能直接交给nginx?用来加快处理速度

1.openresty部署

openresty与nginx一样,也监听的是80端口

所以先停止nginx服务,避免端口冲突

nginx -s stop

#停用nginx

systemctl disable --now httpd

#也可以停用apache,暂时用不到

tar xf openresty-1.21.4.1.tar.gz

#解压

可以和nginx用同样的方法编译

Ctrl+R搜索

也不用加sticky模块

./configure --prefix=/usr/local/openresty --with-http_ssl_module --with-http_stub_status_module

#配置

make

#编译

make install

#安装

cd /usr/local/openresty/nginx

cd conf/

用之前写好的nginx配置文件覆盖当前目录的

/usr/local/openresty/nginx/sbin/nginx -t

#检测语法

报错,因为此版本不带sticky模块功能

vim nginx.conf

将此功能关闭

再次检测语法

cp /usr/local/nginx/conf/cert.pem .

#将原来版本的证书也拷贝到当前

再次检测,无报错

/usr/local/openresty/nginx/sbin/nginx

#启动openresty

测试:

用浏览器访问:http://192.168.145.11

2.nginx配置高效缓存

将缓存功能前置到nginx

vim /usr/local/openresty/nginx/conf/nginx.conf

keepalive 512表示与上游服务器的连接保持活动状态的最大请求数为512

memcache使用键值存储引擎(Key-Value),每个数据项都与一个唯一的键(key)相关联,这样可以通过键来快速访问和检索数据。

set $key $uri$args

#将请求的URI和参数组合成一个键(key),以便作为缓存项的唯一标识。

srcache_fetch GET /memc $key

#表示使用GET方法从缓存中获取以"/memc"作为前缀的键对应的缓存项。如果该缓存项存在且有效,Nginx会返回缓存的响应给客户端,而不会将请求转发到后端服务器。如果没有,则通过后端服务处理。

srcache_store PUT /memc $key

#表示使用PUT方法将响应内容缓存到以"/memc"为前缀的键对应的缓存项中。这样,当下次相同的请求到达时,Nginx就可以直接从缓存中返回响应,而无需再次访问后端服务器。

#检测语法

/usr/local/openresty/nginx/sbin/nginx -s reload

#重载

测试:

server4:

高效缓存为服务多加了一层缓冲,减轻了后端服务器的压力

3.nginx日志可视化

先停用openresty,切回原来版本nginx

用肉眼查看日志比较困难,可用goaccess小程序查看

yum install -y GeoIP-devel-1.5.0-13.el7.x86_64.rpm

yum install ncurses-devel

#安装依赖性

tar xf goaccess-1.4.tar.gz

#解压软件

./configure --enable-utf8 --enable-geoip=legacy

#配置

make

#编译

make install

#安装

若未指定安装路径则会自动安装到/usr/local/bin/目录下,在系统环境变量路径中,这样可以直接调用

goaccess /usr/local/nginx/logs/access.log -o /usr/local/nginx/html/report.html --log-format=COMBINED --real-time-html &

#启动

#/usr/local/nginx/logs/access.log是日志的路径

#-o /usr/local/nginx/html/report.html指定生成的实时HTML报告的输出路径和文件名

#--log-format=COMBINED指定日志格式

#--real-time-html--log-format=COMBINED

# &打入后台

测试:

用浏览器访问

session共享

1.部署tomcat 

Tomcat是一个开源的Java Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,并提供了一个运行Java Web应用程序的环境。

以下是关于Tomcat的一些基本信息:

  1. 功能:Tomcat主要用于部署和运行Java Web应用程序。它可以处理客户端的请求并调用相应的Servlet来生成动态的Web内容。Tomcat还支持JavaServer Pages(JSP)和Java Servlet规范,使得开发人员可以使用Java语言创建动态Web应用程序。

  2. 架构:Tomcat是一个基于Java的Web服务器,它由一个核心的Servlet容器组件和多个可选的扩展组件组成。核心组件负责处理HTTP请求和响应,以及管理Servlet的生命周期。扩展组件可以提供额外的功能,如SSL加密、JNDI数据源、连接池等。

  3. 安装和配置:要使用Tomcat,你需要下载适合你操作系统的二进制包,并按照官方文档中的步骤进行安装和配置。主要的配置文件包括server.xmlweb.xmlcontext.xml,它们允许你定义Tomcat的监听端口、虚拟主机、上下文路径等设置。

  4. 部署应用程序:将你的Java Web应用程序打包成WAR(Web Archive)文件,然后将它部署到Tomcat的webapps目录下。Tomcat会自动解压WAR文件并将应用程序部署到相应的上下文路径。

  5. 管理和监控:Tomcat提供了一个Web界面(通常是http://localhost:8080/manager)用于管理和监控部署在Tomcat上的应用程序。通过这个界面,你可以启动、停止、重新加载应用程序,查看日志文件等。

在server2:

rpm -ivh jdk-8u121-linux-x64.rpm

#安装jdk

tar xf apache-tomcat-7.0.37.tar.gz -C /usr/local/

#将tomcat压缩包解压提取到/usr/local/目录下

cd tomcat/

运行startup.sh脚本

#启动服务

端口为8080

测试:

用浏览器访问:

http://192.168.12:8080

index.jsp

#默认发布页

在浏览器访问:

http://192.168.145.12:8080/test.jsp

cd /usr/local/tomcat/logs/

server3与server2相同,注意避免端口冲突,要先将之前端口也设置为8080的apache停用

2.nginx整合tomcat

因为tomcat也不支持高并发,所以可以与nginx整合

server1:

若仅配置一台server2

cd /usr/local/nginx/conf/

vim nginx.conf

#编辑nginx配置文件

若有多台server:

基于cookie的负载均衡更适合这种场景

server1:

vim nginx.conf

之前的session丢失

3.tomcat整合memcached

tomcat服务通过msm模块把session信息交叉存储到memcached上

server2:

yum install -y memcached

#安装memcached模块

systemctl enable --now memcached

#启动

yum install -y unzip

#安装unzip

将这些模块都移动到/usr/local/tomcat/lib/目录中

cd /usr/local/tomcat/conf/

vim context.xml

#编辑tomcat配置文件

cat logs/catalina.out

若无报错说明msm模块版本不对应

server3操作同理

重启

测试:

访问 http://192.168.145.11/test.jsp

server2:

yum install -y telnet

telnet localhost 11211

#复制sessionID

与test.jsp页面中的信息对应

telnet 192.168.145.13 11211

#连接server3

说明数据存到了n1节点

关闭server3的tomcat服务

systemctl stop memcached.service

#关闭server2上的memcached服务

数据没有丢失的原因是,memcached中的缓存是冗余的,n1的缓存消失,但是server3上的tomcat服务仍有缓存

重启server3上tomcat

直接关闭服务器server2

只要两个环节中所有并行服务不同时挂掉,那么数据就不会丢失

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LInux系统架构----Nginx模块rewrite的规则与应用场景

LInux系统架构----Nginx模块rewrite的规则与应用场景 一.rewrite跳转实现 Nginx实现跳转通过ngx_http_rewrite_module模块支持URL重写、支持if条件判断,但是不支持else跳转时,循环最多可以执行10次,超过后nginx将返回500错误注:…

0基础使用dockerfile构建容器镜像

目录 一、使用dockerfile构建镜像 1.1、dockerfile指令 1.FROM 2.RUN 3.CMD 4.ENTRYPOINT 5.EXPOSR ​编辑 6.ADD和COPY ​编辑7.volume 8.USER 二、案例1:dockerfile构建httpd镜像 构建一个指定挂载点的httpd镜像 三、案例2:构建tomcat镜…

使用endnote插入引用文献导致word英文和数字变成符号的解决方案

使用endnote插入引用文献导致word英文和数字变成符号的解决方案 如图使用endnote插入引用文献导致word英文和数字变成符号字体Wingdings Wingdings 是一个符号字体系列,它将许多字母渲染成各式各样的符号,用途十分广泛。 **解决方法:**直接通…

【相关问题解答1】bert中文文本摘要代码:import时无法找到包时,几个潜在的原因和解决方法

【相关问题解答1】bert中文文本摘要代码 写在最前面问题1问题描述一些建议import时无法找到包时,几个潜在的原因和解决方法1. 模块或包的命名冲突解决方法: 2. 错误的导入路径解决方法: 3. 第三方库的使用错误解决方法: 4. 包未正…

gpt-4-all模型中转实现

最近才完成这个功能,相信知道这个模型的人,应该已经熟悉了。这是我的中转:openai-api Chatbox配置如下: 模型测试: 1)图片生成 2)文件分析,链接读取:

WPF实时时间显示demo(MVVM)

跟着b站的视频学习做一个界面,它里面的时间不能实时刷新,因此自己研究写一个,同时加深一下自己对MVVM的理解. 运行结果: 实现步骤: 1.界面 界面设计就是放置了一个TextBlock,它的text绑定了ViewModel层里面的公告属性CurrentTime. <Grid><TextBlock Text"{Bindi…

【Vite+Ts】自动按需引入Element-Plus

安装插件 cnpm i -D unplugin-vue-components unplugin-auto-import unplugin-element-plus修改vite.config.ts // vite.config.ts import AutoImport from "unplugin-auto-import/vite"; import Components from "unplugin-vue-components/vite"; impor…

白嫖AWS云服务器,验证、注册指南

背景 不知道你想不想拥有一台属于自己的云服务器呢&#xff0c;拥有一台自己的云服务器可以建站&#xff0c;可以在上面搭建个人博客&#xff0c;今天我就来教大家如何申请亚马逊 AWS 免费云服务器&#xff0c;这个云服务器可以长达12个月的免费。而且到期后可以继续换个账号继…

【Flink SQL】Flink SQL 基础概念:SQL 动态表 连续查询

Flink SQL 基础概念&#xff1a;SQL 动态表 & 连续查询 1.SQL 应用于流处理的思路2.流批处理的异同点及将 SQL 应用于流处理核心解决的问题3.SQL 流处理的输入&#xff1a;输入流映射为 SQL 动态输入表4.SQL 流处理的计算&#xff1a;实时处理底层技术 - SQL 连续查询5.SQL…

Arduino IDE的下载和安装

一、Arduino的介绍 Arduino是一款开源电子原型平台&#xff0c;主要包含两部分&#xff1a;硬件&#xff08;各种型号的Arduino板&#xff09;和软件&#xff08;Arduino IDE&#xff09;。这个平台由意大利的Massimo Banzi、David Cuartielles等人共同开发设计&#xff0c;并于…

OPPO后端二面,凉了!

这篇文章的问题来源于一个读者之前分享的 OPPO 后端凉经&#xff0c;我对比较典型的一些问题进行了分类并给出了详细的参考答案。希望能对正在参加面试的朋友们能够有点帮助&#xff01; Java String 为什么是不可变的? public final class String implements java.io.Seri…

【毕设级项目】基于嵌入式的智能家居控制板(完整工程资料源码)

基于嵌入式的智能家居控制板演示效果 基于嵌入式的智能家居控制板 前言&#xff1a; 随着科技的不断进步&#xff0c;物联网技术得到了突飞猛进的发展。智能家居是物联网技术的典型应用领域之一。智能家居系统将独立家用电器、安防设备连接成一个具有思想的整体&#xff0c;实现…

清华把大模型用于城市规划,回龙观和大红门地区成研究对象

引言&#xff1a;参与式城市规划的新篇章 随着城市化的不断推进&#xff0c;传统的城市规划方法面临着越来越多的挑战。这些方法往往需要大量的时间和人力&#xff0c;且严重依赖于经验丰富的城市规划师。为了应对这些挑战&#xff0c;参与式城市规划应运而生&#xff0c;它强…

汽车IVI中控开发入门及进阶(十四):功能安全

前言: 是时候需要来说一下功能安全了,有没有发现现在很多主机厂、Tier1对芯片等BOM物料有些是有功能安全需求的,那么什么是功能安全呢? 车辆中电子元件数量的增加增加了更多故障的可能性,对驾驶员和乘客的风险更高。这种风险的增加导致汽车行业将功能安全标准作为汽车设计…

C库函数-getopt函数总结学习

1、简介 getopt函数是命令行参数解析函数 1、1命令行组成 Command name 程序文件名 operands 操作对象 option 选项 option argument 选项参数 getopt()函数将传递给mian()函数的argc,argv作为参数&#xff0c;同时接受字符串参数optstring – optstring是由选项Option字母组…

cesiumlab中shp转3dtiles白模效果一

安装cesiumlab 如果没有安装cesiumlab&#xff0c;去官网下载安装一个即可 http://www.cesiumlab.com/cesiumlab.html 效果 步骤 1、准备shp面数据 2、打开cesiumlab软件转换 选择shp面数据 设置高度&#xff0c;如果shp面中有高度字段&#xff0c;可以用高度字段&#xff…

高铁列车员信息宣传向媒体投稿有哪些方法?

作为一名高铁列车工作人员,我肩负着传递高铁精神、展示列车员风采的重要使命。每月,我都要完成单位对外信息宣传的考核任务,通过媒体投稿来发表列车员的信息宣传文章。在这条信息宣传之路上,我经历了从摸着石头过河到智慧投稿的蜕变,其中的心酸与轻松交织,成为了我职业生涯中难…

云原生消息流系统 Apache RocketMQ 在腾讯云的大规模生产实践

导语 随着云计算技术的日益成熟&#xff0c;云原生应用已逐渐成为企业数字化转型的核心驱动力。在这一大背景下&#xff0c;高效、稳定、可扩展的消息流系统显得尤为重要。腾讯云高级开发工程师李伟先生&#xff0c;凭借其深厚的技术功底和丰富的实战经验&#xff0c;为我们带…

基于C++的一种字符串切分方法及示例代码

一、概述 在 Java 和 python 中&#xff0c;都有实现字符串切分的方法&#xff0c; 如split() &#xff0c;使用起来较为方便&#xff0c;但是在标准的 C 中&#xff0c;却没有内置的 split() 方法。 我们可以使用标准库中的一些函数和方法来实现字符串的切分&#xff0c;这里…

【报错 - npm包问题】 token.type.endsWith is not a function

将 babel-eslint 10.1.0版本&#xff0c;降为 8.2.2 npm install babel-eslint8.2.2 --save