JavaEE 企业级分布式高级架构师(十)Nginx学习笔记(1)

Nginx学习笔记

Nginx概述

Nginx简介

  • Nginx(engine x)是一个轻量级的、高性能的、基于Http的、反向代理服务器,静态web服务器。
  • Nginx最初是由俄罗斯人 lgor Sysoev(伊戈尔·赛索耶夫)使用 C 语言为俄罗斯访问量第二的 Rambler.ru 站点开发的一款服务器,2004年10月发布第一个版本。
  • Nginx的官网:http://nginx.org。
  • 国内大型的站点,例如 百度、京东、新浪、网易、腾讯、淘宝等,都使用了Nginx。https://www.netcraft.com。

代理服务器

正向代理

隐藏

在这里插入图片描述

翻墙

在这里插入图片描述

提速

在这里插入图片描述

缓存

在这里插入图片描述

授权

在这里插入图片描述

反向代理

保护隐藏

在这里插入图片描述

分布式路由

在这里插入图片描述

负载均衡

在这里插入图片描述

动静分离

在这里插入图片描述

数据缓存

在这里插入图片描述

总结

  • 正向代理服务器特点:是对客户端的代理、是架设在客户端的主机,客户端是知道其要访问的目标服务器地址信息。
  • 反向代理服务器特点:是对服务端的代理、是架设在服务器端的主机,客户端根本就不知道自己真正要访问的目标服务器地址信息。

Nginx的特点

高并发

  • 一个 Nginx 服务器在不做任何配置情况下并发量可达 1000 左右。在硬件条件允许的前提下,Nginx 可以支持高大 5~10万的并发量(除了Nginx的设置外,Linux主机需要做大量的设置来配合Nginx)。
  • 对比一下Tomcat,Tomcat服务器默认的并发量为150(不做任何配置)。当有超过150个用户同时访问某Servlet时,Tomcat的响应就会变得非常慢。

低消耗

  • 官方给出的测试结果,10000个非活跃连接,在Nginx中仅消耗2.5M内存。对于一般性的DoS攻击来说就不是事儿,但对于DDoS也会是问题。

热部署

  • 可以在 7*24 小时不间断服务的前提下,进行Nginx版本的平滑升级,Nginx配置文件的平滑修改。即在不停机的情况下升级Nginx,修改替换Nginx配置文件。

高可用

  • Nginx之所以可以实现高并发,是因为其具有很多工作进程worker。当这些工作进程中的某些出现问题停止工作时,并不会影响整个系统的整体运行。因为其它worker会接替那些出问题的进程。

高扩展

  • Nginx之所以现在的用户很多,是因为很多功能都已经开发好并模块化。若需要哪些功能,只需要安装相应功能的扩展模块即可。根据编写扩展模块所使用的语言的不同,可以划分为两类:C语言扩展模块和Lua脚本扩展模块。
  • http://openresty.org/cn/

Nginx的下载与安装

Nginx的下载

nginx的官网地址:http://nginx.org
在这里插入图片描述
在这里插入图片描述

# 192.168.254.120下安装,下载到目录/usr/tools
wget http://nginx.org/download/nginx-1.16.0.tar.gz

Nginx的源码安装

tar -zxvf nginx-1.16.0.tar.gz -C /usr/apps
# 生成makefile文件
./configure --prefix=/usr/local/nginx --with-http_ssl_module

在这里插入图片描述

# 在Nginx解压目录下运行make命令,用于完成编译
make
# 安装
make install
  • 使nginx命令随处可用:
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

Nginx命令

查看命令选项 nginx -h

在这里插入图片描述

查看Nginx版本信息 nginx -v 或 -V

在这里插入图片描述

测试配置文件命令 nginx -tq
  • nginx -t:测试配置文件是否正确,默认只测试默认的配置文件 conf/nginx.conf
  • nginx -T:测试配置文件是否正确,并显示配置文件内容
  • nginx -tq:在配置文件测试过程中,禁止显示非错误信息,即只显示错误信息
    在这里插入图片描述
  • 可以结合 -c 选项指定要测试的配置文件,注意,其不会启动 nginx
    在这里插入图片描述
停止命令 nginx -s stop/quit

在 nginx 命令后通过 -s 选项,可以指定不同的信号完成不同的功能

  • nginx -s stop:强制停止 nginx,无论当前工作进程是否正在处理工作。
  • nginx -s quit:优雅停止 nginx,使当前的工作进程完成当前工作后停止。
平滑重启 nginx -s reload

在不重启Nginx的前提下重新加载Nginx配置文件,称为平滑重启。

nginx -s reopen

重新打开日志文件。

nginx -p

指定Nginx配置文件的存放路径。

启动命令 nginx -c file
  • nginx -c(小写字母):可启动Nginx,启动成功后无任何提示。
nginx -c /usr/local/nginx/conf/nginx.conf
  • 若不指定配置文件,则默认加载的是Nginx安装目录下的conf/nginx.cnf。
nginx -g

设置配置文件以外的全局文件。

页面访问测试

  • 关闭防火墙
service iptables stop
chkconfig iptables off
  • 浏览器访问:http://192.168.254.120/
    在这里插入图片描述

Nginx核心配置

Nginx性能调优

在Nginx性能调优中,有两个非常重要的理论点(面试点)需要掌握,所以下面首先讲解这两个知识点,再进行性能调优的配置。

零拷贝(Zero Copy)

零拷贝基础
  • 零拷贝指的是,从一个存储区域到另一个存储区域的copy任务没有 CPU 参与。零拷贝通常用于网络文件传输,以减少CPU消耗内存带宽占用减少用户空间(用户可以操作的内存缓存区域)与CPU内核空间(CPU可以操作的内存缓存区域及寄存器)的拷贝过程减少用户上下文(用户状态环境)与CPU内核上下文(CPU内核状态环境)间的切换,提高系统效率
  • DMA控制器:Direct Memory Access,直接内存存取
  • ALU:算数逻辑运算器
传统拷贝方式
  • 下面均以“将一个硬盘中的文件通过网络发送出去”的过程为例,来详细分析不同拷贝方式的实现细节。
  • 首先通过应用程序的 read() 方法将文件从硬盘读取出来,然后再调用 send() 方法将文件发送出去。
    在这里插入图片描述
  • 发生了 4 次空间切换,发生了 4 次复制(copy),其中有 2 次 CPU 参与
零拷贝方式
  • Linux系统(CentOS6 及其以上版本)对于零拷贝是通过 sendfile 系统调用实现的。
    在这里插入图片描述
  • 发生了 2 次空间切换,发生了 3 次复制(copy),其中有 0 次 CPU 参与

问题:为啥需要将 kernel buffer 中的数据拷贝到 socket buffer?
回答:kernel buffer中的数据是不连续的(链表形式),而socket buffer中的数据是连续的。linux系统要求向外拷贝数据必须是连续的,所以需要将 kernel buffer 中的数据拷贝到 socket buffer。

Gather Copy DMA零拷贝方式
  • 由于该拷贝方式是由 DMA 完成,与系统无关,所以只要保证系统支持 sendfile 系统调用功能即可。
  • 该方式中没有数据拷贝到 socket buffer,取而代之的只是将 kernel buffer 中的数据描述信息写到了 socket buffer 中。数据描述信息包含了两方面的信息:kernel buffer 中数据的地址及偏移量。
    在这里插入图片描述
  • 发生了 2 次空间切换,发生了 2 次复制(copy),其中有 0 次 CPU 参与

问题:用户态没有数据

mmap零拷贝
  • mmap零拷贝是对零拷贝的改进。当然,若当前主机的 DMA 支持 Gather Copy,mmap 同样可以实现 Gather Copy DMA 的零拷贝。
  • 该方式与零拷贝的唯一区别是,应用程序与内核共享了 kernel buffer。由于共享,所以应用程序也就可以操作该 buffer 了。当然,应用程序对于 kernel buffer 的操作,就会引发用户空间与内核空间的相互切换。
    在这里插入图片描述
  • 发生了 4 次空间切换,发生了 2 次复制(copy),其中有 0 次 CPU 参与

多路复用器select|poll|epoll

基本知识

若要理解 select、poll 与 epoll 多路复用器的工作原理,就需要首先了解什么是多路复用器。而要了解什么是多路复用器,就需要先了解什么是“多进程/多线程连接处理模型”。

  • 多进程/多线程连接处理模型
    在该模型下,一个用户连接请求会由一个内核进程处理,而一个内核进程会创建一个应用程序进程,即 App进程 来处理该连接请求。应用程序进程在调用 IO 时,采用的是 BIO 通讯方式,即应用程序进程在未获取到 IO 响应之前是处于阻塞态的。这种模型非常消费系统资源,并且从内核进程到App进程不是采用的零拷贝,这样也导致性能很差。
    在这里插入图片描述
  • 多路复用连接处理模型
    在该模型下,只有一个 App 进程来处理内核进程事务,且 App 进程一次只能处理一个内核进程事务。故这种模型对于内核进程来说,存在对 App 进程的竞争。应用程序进程在调用 IO 时,采用的是 NIO 通讯方式。
    在这里插入图片描述
多路复用器工作原理
select

select多路复用器是采用轮询的方式,一直在轮询所有的相关内核进程,查看它们的进程状态。若已经就绪,则马上将该内核进程放入到就绪队列,该就绪队列底层是由数组实现。否则,继续查看下一个内核进程状态。在处理内核进程事务之前,App进程首先会从内核空间中将用户连接请求相关数据复制到用户空间。实时性很差,并且就绪队列底层是数组实现的,而数组是由上线的,即它的处理能力是有限的,不适合处理大并发

poll

poll多路复用的工作原理与select几乎相同,不同的是其就绪队列由链表实现。所以,其对于要处理的内核进程数量理论上是没有限制的,即其能够处理的最大并发连接数量是没有限制的(当然,要受限于当前系统中进程可以打开的最大文件描述符 ulimit)。

epoll

epoll多路复用是对 select 与 poll 的增强与改进。其不再采用轮询的方式了,而是采用回调方式实现对内核进程状态的获取:一旦内核进程就绪,其就会回调 epoll 多路复用器,进入到多路复用器的就绪队列(由链表实现)。所以 epoll 多路复用模型也称为 epoll 事件驱动模型
另外,应用程序所使用的数据,也不再从内核空间复制到用户空间了,而是使用 mmap 零拷贝机制,大大降低了系统开销。
当内核进程就绪信息通知了 epoll 多路复用器后,并不是马上对其进行处理,将其立即存放到就绪队列,而是根据不同的处理模型,有不同的处理方式。两种模型:LT模型与ET模型。

  • LT,Level Triggered:若没有将其存放到就绪队列,其会一直重试,直到加入到就绪队列,或取消了本次请求。
  • ET,Edge Triggered:若没有将其放到就绪队列,则直接取消本次请求。所以其会存在请求丢失的情况,但其效率很高。

Nginx的并发处理机制

  • 一般情况下并发处理机制有三种:多进程多线程、与异步机制。Nginx对于并发的处理同时采用了三种机制,当然,其异步机制使用的是异步非阻塞方式。
  • 我们知道Nginx的进程分为两类:master进程与worker进程。每个master进程可以生成多个worker进程,所以其是多进程的。每个worker进程可以同时处理多个用户请求,每个用户请求会由一个线程来处理,所以其是多线程的。
    在这里插入图片描述

那么,如何解释其“异步非阻塞”并发处理机制呢?

  • worker进程采用的就是 epoll 多路复用机制来对后端服务器进行处理的,当后端服务器返回结果后,后端服务器就会回调 epoll 多路复用器,由多路复用器对相应的 worker 进程进行通知。此时,worker 进程就会挂起当前正在处理的事务,例如IO返回结果去响应客户请求。响应完毕后,会再继续执行挂起的事务,这个过程就是“异步非阻塞”的。

全局模块下的调优

worker_processes 2
  • 打开 nginx.conf 配置文件,可以看到 worker_processes 的默认值为1。
  • worker_processes:工作进程,用于指定 Nginx 的工作进程数量,其数值一般设置为 CPU 内核数量,或内核数量的整数倍
  • 不过需要注意,该值不仅仅取决于 CPU 内核数量,还与硬盘数量及负载均衡模式相关,在不确定时可以指定其值为 auto。
    在这里插入图片描述
    在这里插入图片描述
worker_cpu_affinity 01 10
  • 将 worker 进程与具体的内核进行绑定,不过,若指定 worker_processes 的值为 auto,则无法设置 worker_cpu_affinity。
    在这里插入图片描述
  • 该设置是通过二进制进行的,每个内核使用一个二进制位表示,0代表内核关闭,1代表内核开启。也就是说,有几个内核,就需要使用几个二进制位。
    在这里插入图片描述
worker_rlimit_nofile 65535
  • 用于设置一个 worker 进程所能打开的最多文件数量,其默认值与当前 Linux 系统可以打开的最大文件描述符数量相同。
    在这里插入图片描述

events模块下的调优

worker_connections 1024

设置每一个 worker 进程可以并发处理的最大连接数,该值不能超过 worker_rlimit_nofile的值。

accept_mutex on

当所有的 worker 进程中存在空闲 worker 时,这些新来的连接如何分配给这些空闲 worker 呢?该属性的值设置的不同,则会产生两种不同的分配方式。

  • on:默认值,表示当一个新连接到达时,那些没有处于工作状态的 worker 将以串行方式来处理;
  • off:表示当一个新连接到达时,所有的 worker 都会被唤醒,不过只有一个 worker 能获取新连接,其它的 worker 会重新进入阻塞状态,这就是**“惊群”现象**。
    在这里插入图片描述
  • 惊群现象对 Nginx 的影响不大,因为Nginx的worker进程与CPU内核数量有关,一般不会太多。

举例:这些worker进行就好比是一群鸡,激活资源好比是一把米。如果 accept_mutex 设置为 on,就好比是每次给一只鸡喂食,好处是井然有序,坏处是效率很低。如果 accept_mutex 设置为 off,就好比直接把一把米撒出去,让这一群鸡哄抢,好处是效率高,坏处是鸡犬不宁资源可能会浪费。所以在高并发情况下,accept_mutex 设置为 off。

accept_mutex_delay 500ms

该属性的使用前提是 accept_mutex 的值设置为 on。该属性用于设置队首 worker 尝试获取新请求(互斥资源)的时间间隔。默认值是 500 毫秒。

multi_accept on

当所有 worker 都处于工作状态时,又有多个新的连接到来,那么这些新的连接是如何分配给这些工作中的 worker 呢?该属性设置的值不同,会产生不同的分配方式。

  • off:系统会逐个拿出新连接按照负载均衡策略,将其分配给相应的 worker,其会将多个请求分配给多个 worker;
  • on:系统会实时的统计出各个 worker 当前正在处理的连接个数,然后会按照“缺编”最多的 worker 的“缺编”数量,一次性将这么多的新连接分配给该 worker,其会将多个请求分配给一个worker。

对比 accept_mutex 属性,可以得出如下结论:新连接到来后,若存在空闲的worker,则会优先分配给空闲的,若没有空闲的,要么按照负载均衡分配多个 worker,要么按照缺编情况分配给一个 worker。

use epoll

设置 worker 与后端服务器连接的处理方式。Nginx会自动选择适合当前系统的最高效的方式,当前,也可以使用 use 指令明确指定所要使用的连接处理方式。use 的取值有以下几种:select | poll | epoll | rtsig | kqueue | /dev/poll。

  • select | poll | epoll:这是三种多路复用机制,select 与 poll 工作原理几乎相同,而epoll的效率最高,是现在使用最多的一种多路复用机制。
  • rtsig:realtime signal,实时信号,Linux 2.2.19+ 的高效连接处理方式,但在 Linux 2.6 版本后,不再支持的方式。
  • kqueue:应用在 BSD 系统上的 epoll。
  • /dev/poll:UNIX系统上使用的poll。

http模块下的调优

非调优属性简介

在这里插入图片描述

  • include mime.types;:将当前目录(conf目录)中的 mime.types 文件包含进来。
  • default_type application/octet-stream;:对于无扩展名的文件,默认其为 application/octet-stream 类型,即 Nginx 会将其作为一个八进制流文件来处理。
  • charset utf-8;:设置请求与响应的字符编码。
sendfile on

设置为 on 则开启 Linux 系统的零拷贝机制,否则不启用零拷贝。当然,开启后是否起作用,要看所使用的系统版本,CentOS6及其以上版本支持 sendfile 零拷贝。

tcp_nopush on
  • on:以单独的数据包形式发送 Nginx 的响应头信息,而真正的响应体数据会再以数据包的形式发送,这个数据包中就不再包含响应头信息了。
  • off:默认值,响应头信息包含在每一个响应题数据包中。
tcp_nodelay on
  • on:不设置数据发送缓存,即不推迟发送,适合于传输小数据,无需缓存。
  • off:开启发送缓存,若传输的数据是图片等大数据量文件,则建议设置为off。
keepalive_timeout 60

设置客户端与Nginx间所建立的长连接的生命超时时间,时间到达,则连接将自动关闭,单位:秒。

keepalive_requests 10000

设置一个长连接最多可以发送的请求数,该值需要在真实环境下测试。

client_body_timeout 10

设置客户端获取 Nginx 响应的超时时限,即一个请求从客户端发出到接收到 Nginx 的响应的最长时间间隔。若超时,则认为本次请求失败。

请求定位

资源访问

  • 修改配置文件:
    在这里插入图片描述
  • 创建目录:在真实目录中,必须要在 root 属性指定的目录下存在 location 指定的 URI 路径目录,所以需要在 /opt/aaa/ 下创建 xxx/ooo 目录
[root@localhost ~]# mkdir -p /opt/aaa/xxx/ooo
  • 创建文件:在 /opt/app/xxx/ooo 目录下新建一个 myfile.txt 文件,文件内容为 This is default page
[root@localhost ~]# echo "This is default page" > /opt/aaa/xxx/ooo/myfile.txt

再新建一个hello.txt 文件,文件内容为 hello nginx world

[root@localhost ~]# echo "hello nginx world" > /opt/aaa/xxx/ooo/hello.txt
  • 访问测试:http://192.168.254.120/xxx/ooo/
    在这里插入图片描述
    http://192.168.254.120/xxx/ooo/hello.txt
    在这里插入图片描述

路径匹配优先级

优先级规则

优先级由低到高依次是:
普通匹配 < 长路径匹配 < 正则匹配 < 短路匹配 < 精确匹配

  • 测试访问地址:http://192.168.254.120/xxx/ooo
普通匹配
# 只要请求是以 /xxx 开头的路径就可以命中
location /xxx {
	return 400;
}

在这里插入图片描述

长路径匹配
location /xxx {
	return 400;
}
# 当一个请求路径既可以与一个长路径相匹配,又可以与一个短路径相匹配时,长路径的优先级高
location /xxx/ooo {
	return 402;
}

在这里插入图片描述

正则匹配

以(~)开头的匹配路径称为正则匹配,在正则匹配与普通匹配(长路径匹配也属于普通匹配)均可匹配上时,正则匹配的优先级高。

区分大小写的正则匹配
  • 正则匹配默认匹配是区分大小写的。
  • 在长路径匹配与正则匹配间,正则匹配的优先级要高于长路径匹配的,即使正则匹配的要短于长路径匹配的。
location /xxx {
	return 400;
}
location /xxx/ooo {
	return 402;
}
location ~/xxx {
	return 401;
}

在这里插入图片描述

  • 当请求中的 xxx 写为大写字母,即测试访问地址为:http://192.168.254.120/XXX/ooo/ 时,会报 404 找不到资源。
    在这里插入图片描述
不区分大小写的正则匹配
  • ~ 后跟上 * 号,表示这是不区分大小写的正则表达式
location ~*/xxx {
	return 401;
}
  • 此时再访问 http://192.168.254.120/XXX/ooo/ ,返回的是401页面。
短路匹配
  • 以(^~)开头的匹配路径称为短路匹配,表示只要匹配上,就不再匹配其它的了,即使是正则匹配也不再匹配了,即其优先级要高于正则匹配的。
location /xxx {
	return 400;
}
location ~/xxx {
	return 401;
}
location ^~/xxx/ooo {
	return 403;
}

在这里插入图片描述

精确匹配
  • 以等号(=)开头的匹配称为精确匹配,其是优先级最高的匹配。
location /xxx {
	return 400;
}
location ~/xxx {
	return 401;
}
location ^~/xxx/ooo {
	return 403;
}
location =/xxx/ooo {
	return 405;
}

在这里插入图片描述

缓存配置

  • Nginx具有强大的缓存功能,可以对请求的 response 进行缓存,起到类似 CDN 的作用,甚至有比 CDN 更强大的功能。同时,Nginx缓存还可以用来“数据托底”,即当后台 web 服务器挂掉的时候,Nginx可以直接将缓存中的托底数据返回给用户。此功能就是Nginx实现“服务降级”的体现。
  • Nginx缓存功能的配置由两部分构成:全局定义与局部定义。在 http{} 模块的全局部分中进行缓存全局定义,在 server{} 模块中的各个 location{} 模块中根据业务需求进行缓存局部定义。
http{}模块的缓存全局定义

在这里插入图片描述

proxy_cache_path

用于指定 nginx 缓存的存放路径及相关配置

  • /usr/local/nginx/cache:指定 Nginx 缓存的存放路径。
  • levels=1:2:在缓存存放目录中对缓存子目录的管理,采用两级制,一级目录使用1个字符命名,二级目录采用2个字符命名。
  • keys_zone=mycache:10m:在内存中指定一块区域用来存放缓存的key,这样Nginx就可以快速判断一个 request 是否命中缓存。mycache是为这块缓存起的名字,可以随意。10m表示该缓存占用内存的大小(1M大约可以存8000个key)。
  • max_size=5g:指定缓存占用的硬盘空间大小。超出则采用缓存淘汰。
  • inactive=2h:设置未被使用的缓存的最长存活时间为2小时。
  • use_temp_path=off:是否使用 proxy_temp_path 指定的临时目录作为中转。读写比较频繁的时候设置为on,效率会高一些。
proxy_temp_path
  • 指定Nginx缓存的临时存放目录。若 proxy_cache_path 中的 use_temp_path 设置为了 off,则该属性可以不指定。
location{}模块的缓存局部定义
  • proxy_cache mycache:指定用于存放缓存 key 内存区域名称。其值为 http{} 模块中 proxy_cache_path 中的 keys_zone 的值。
  • proxy_cache_key $host $request_uri $arg_:指定 Nginx 生成的缓存的 key 的组成。
    proxy_cache_key $host $request_uri $args
    proxy_cache_key $host $request_uri $arg_name
  • proxy_cache_bypass $arg_age:指定是否越过(穿透)缓存。
  • proxy_cache_methods GET HEAD:指定客户端请求的哪些提交方法将被缓存,默认为GET与HEAD,但不缓存POST。
  • proxy_no_cache $aaa $bbb $ccc:指定对本次请求是否不做缓存。只要有一个不为0,就不对该请求结果缓存。
  • proxy_cache_purge $ddd $eee $fff:指定是否清除缓存key。
  • proxy_cache_lock on:指定是否采用互斥方式回源。例如有多个相同的请求,只让其中一个请求获得锁,并向后端请求数据并放到缓存中,那么其他的请求就可以获取到缓存的数据。
  • proxy_cache_lock_timeout 5s:指定再次生成回源互斥锁的时限。如有多个相同的请求,只让其中一个请求获得锁,并向后端请求数据,如果5s还没有返回数据,则再让剩下的一个请求获得锁,去向后端请求数据。
  • proxy_cache_valid 5s:对指定的 HTTP 状态码的响应数据进行缓存,并指定缓存时间。默认指定的状态码为 200,301,302。一般200的缓存时间设置短一点,500的缓存时间设置长一点。
proxy_cache_valid 5s;
proxy_cache_valid 403 24h;
proxy_cache_valid 404 2h;
proxy_cache_valid 500 502 2h;
  • proxy_cache_use_stale error timeout http_500:设置启用托底缓存的条件。即当nginx向后端服务器请求时,后端返回错误(error)、或者超时(timeout)、或者服务器错误(500),则启用托底缓存。
  • expires 3m:为请求的静态资源开启浏览器的缓存。
Nginx变量
自定义变量

由于 Nginx 配置文件是 perl 脚本,所以其是可以使用如下方式自定义变量的。

set $aaa "hello";
set $bbb 0;
location /xxx/ooo {
	root /opt/aaa;
	index myfile.txt;
}
内置变量

Nginx中已经内置定义了很多变量,这些变量的意义如下:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
开课吧-javaEE企业级分布式高级架构师是一门专注于培养企业级应用开发的高级技术课程。该课程旨在帮助学员全面掌握Java EE企业级开发的技能和知识,培养他们成为具备分布式应用系统设计和架构能力的高级架构师。 在这门课程中,学员将学习Java EE的核心概念和技术,包括Servlet、JSP、JDBC、EJB、JNDI等。同时,学员还将深入学习分布式应用开发的相关技术,如Web服务、消息队列、分布式缓存、负载均衡等。除此之外,课程还将涉及如何使用流行的Java EE开发框架(如Spring、Hibernate等)进行企业应用开发,并介绍分布式系统的设计原则和最佳实践。 通过学习这门课程,学员将能够了解分布式应用架构的基本原理,并具备设计和构建分布式应用系统的能力。他们将熟练掌握Java EE平台的各种技术和工具,能够灵活运用它们开发高性能、可扩展性强的企业级应用系统。此外,通过课程中的实战项目,学员还将锻炼解决实际问题和项目管理的能力。 作为一门高级架构师的课程,它将帮助学员进一步提升自己的职业发展。毕业后,学员可以在企业中担任分布式应用的架构师、系统设计师、技术经理等角色,负责企业级应用系统的设计和开发。此外,他们还可以选择独立开发,提供技术咨询和解决方案。 总之,开课吧-javaEE企业级分布式高级架构师是一门非常有价值的课程,它将帮助学员掌握Java EE企业级开发的核心技术和分布式应用架构的设计原理,培养他们成为具备高级架构师能力的软件开发专业人士。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

讲文明的喜羊羊拒绝pua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值