黑马现有java课程框架及其功能梳理
目录
高并发相关
主要用来解决IO密集型程序(大量文件读写,网络通信,数据库交互),主要使用异步IO,多线程
提高通信效率
Netty
作用:
Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。(感觉只要知道他是提高通讯效率的就行了)
哪些框架使用它:
Dubbo、zk、RocketMQ、ElasticSearch、Spring5(对HTTP协议的实现)、GRPC、Spark等大型开源项目都在使用Netty作为底层通讯框架
Netty 的三大核心组件分别为 Channel
、ChannelHandler
(以及相关的 ChannelPipeline
)和 EventLoop
(及其所在的 EventLoopGroup
)。虽然没有明确指出“三大组件”的具体定义,但结合上下文通常是指这三个主要概念。以下是它们各自常用的函数或方法:
Channel
open()
:创建一个新的 Channel 实例。bind(int port)
或bind(InetSocketAddress address)
:绑定到指定的端口或地址,开始监听连接。writeAndFlush(Object msg)
:将对象写入到 Channel 并尝试刷新输出缓冲区。close()
或close(ChannelFuture future)
:关闭 Channel。pipeline()
:获取关联的 ChannelPipeline,用于处理入站和出站事件。
ChannelHandler 和 ChannelPipeline
channelRegistered(ChannelHandlerContext ctx)
/channelUnregistered(ChannelHandlerContext ctx)
:当 Channel 注册到 EventLoop 或从 EventLoop 上解除注册时触发。channelRead(ChannelHandlerContext ctx, Object msg)
:读取到新的数据时触发,用于处理入站数据。write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise)
:处理出站数据,即将数据写入 Channel。addLast(String name, ChannelHandler handler)
:向 ChannelPipeline 添加一个处理器。remove(ChannelHandler handler)
:从 ChannelPipeline 中移除指定的处理器。
EventLoop 和 EventLoopGroup
register(Channel channel)
:将 Channel 注册到 EventLoop 上,使 EventLoop 开始处理该 Channel 的 I/O 事件。execute(Runnable task)
:在 EventLoop 上执行给定的任务。next()
:从 EventLoopGroup 中获取下一个可用的 EventLoop。shutdownGracefully()
:优雅地关闭所有 EventLoop,并释放所有相关资源。
以上只是简要列举了一些常见方法,实际上每个组件提供的方法非常丰富,覆盖了网络通信的各种需求,包括但不限于连接管理、数据读写、错误处理、定时任务调度等。在实际使用 Netty 构建网络应用时,根据业务逻辑的不同,开发者会选择相应的方法来完成特定功能。
Netty 是一个强大的 Java 网络编程框架,适用于构建高性能、高并发、低延迟的网络应用程序。以下是一些实际应用场景和功能实现中会用到 Netty 的场合:
-
高性能网络服务器:
- 实现 HTTP 或 HTTPS 服务器,替代传统的基于 Tomcat、Jetty 等容器的同步阻塞模型,提供更好的性能和扩展性。
- 构建 WebSocket 服务器,实现实时通讯、推送服务、在线聊天室等功能。
-
异步RPC框架:
- 在分布式系统中,Netty 可以作为远程过程调用(RPC)框架的底层通信库,例如 Dubbo、gRPC 等,用于服务间高效、低延迟的通信。
-
消息中间件:
- 开发消息队列系统(如ActiveMQ、RocketMQ的部分组件),利用Netty处理大量并发的发布/订阅请求和消息传输。
-
游戏服务器:
- 在游戏开发中,Netty 被广泛应用于构建多人在线游戏的后端服务器,处理玩家间的实时交互数据。
-
大数据处理:
- 大数据集群中的节点间通信,如Apache Hadoop、Spark等项目的部分组件可能会采用Netty进行高效的数据传输。
-
金融交易系统:
- 对于需要处理高频交易、实时报价等场景,Netty能够支撑高并发、低延迟的交易数据交换。
-
移动互联网后台服务:
- 移动APP的后台服务,如社交应用、新闻推送、即时通讯应用的后台服务,使用Netty构建高效的长连接通信服务。
-
TCP/UDP协议开发:
- 自定义私有协议栈,基于Netty可以方便地开发和部署基于TCP、UDP或其他自定义协议的网络应用。
-
微服务架构中的服务间通信:
- 在微服务架构中,Netty可以作为各个服务间通信的基础组件,提供可靠的异步通信机制。
总之,任何需要进行高效网络通信、处理大量并发连接、减少资源消耗、优化网络性能的场景,都可能考虑使用Netty作为其通信层的核心框架。
涉及的名词解释:
网络应用程序框架: 用于简化网络通信和开发服务器端应用程序的一系列工具、库和服务的集合。常见网络应用程序框架:Spring MVC,spring Boot,Netty等。
I/O三种模式:
这位大佬解释的太好了!原文在这里
NIO
感觉有点太底层了,先不了解,之后看看:大佬文章
通道:简化直接与Socket进行操作的复杂性
选择器:实现一个线程处理多个客户端链接
Java高级架构线路图学习路线内含Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式,高并发
Socket
感觉更底层,也是等等再看
Nginx
Nginx 不是分布式框架,而是一款高性能的 Web 服务器和反向代理服务器,同时也可作为邮件代理服务器使用。Nginx 在分布式系统中的作用主要是:
- 负载均衡:Nginx 可以作为反向代理服务器,将客户端请求分发到多个后端服务器,实现流量分摊,提高系统的并发处理能力和可用性,这是构建分布式系统的重要环节。
- 动静分离:通过配置,Nginx 可以将动态请求转发给应用服务器(如Tomcat、Node.js等),静态内容则直接由Nginx处理并返回,提高整体系统的响应速度。
- 缓存服务:Nginx 提供缓存功能,对于静态资源或者经过特别配置的动态内容,可以直接从缓存中快速响应,减轻后端服务器的压力。
- API Gateway:在微服务架构中,Nginx 可以作为 API 网关,统一处理来自客户端的请求,路由到相应的微服务,同时还可以做权限验证、限流、熔断等操作。
虽然 Nginx 不是严格意义上的分布式框架,但它在分布式系统中承担着重要角色,为分布式系统提供了关键的服务接入和流量管理能力。
feign
环境管理
Tomcat
Tomcat 是一个开源的轻量级应用服务器,专为运行Java Servlet和JavaServer Pages (JSP)技术的Web应用程序设计,是实现Java EE(Java Platform, Enterprise Edition)Web应用模型的Servlet容器(提供环境)。开发者可以将Java Web应用部署到Tomcat服务器上,使其能够处理HTTP请求并返回响应。Tomcat主要关注Web服务端的部署与管理。
主要功能
Tomcat 提供了内置的管理界面和管理接口,以便于监控和管理服务器状态、部署和卸载Web应用、查看日志等。以下是Tomcat的几个关键管理功能及其实现方式:
管理界面
-
Tomcat Web管理界面(Tomcat Manager Application):
Tomcat Manager是一个Web应用,安装在Tomcat中,默认情况下未启用。管理员可通过浏览器访问http://localhost:8080/manager/html
(请将localhost
和8080
替换为实际的服务器地址和端口)来管理部署的应用程序。访问前需要在tomcat-users.xml
中配置具有管理权限的用户账户。 -
Server Status 页面:
可通过http://localhost:8080/manager/status
查看服务器的基本状态信息,如JVM内存使用情况、线程池状态等。访问此页面也需要有适当的角色权限。
管理接口
-
Tomcat Manager REST API:
Tomcat Manager不仅提供了Web界面,还提供了REST API,允许通过HTTP请求远程部署、启动、停止和卸载应用。需要认证才能使用这些API。 -
JMX(Java Management Extensions):
Tomcat通过JMX提供了丰富的管理接口,可以使用JConsole、VisualVM等工具连接到JMX代理进行监控和管理,或者编写Java客户端程序来远程调用管理接口。
安全性
为了安全起见,通常需要在conf/tomcat-users.xml
文件中配置具有管理权限的用户,并且在conf/server.xml
中配置<Manager>
和<Context>
元素以启用管理功能和指定权限。此外,对于远程管理,可能还需要在防火墙中开放特定端口(如8005用于shutdown,8009用于AJP,以及Tomcat Manager所需的HTTP端口)。
自动化管理工具
对于大规模生产环境,往往通过自动化脚本或工具(如Ansible、Chef、Puppet等)与Tomcat的CLI工具(如catalina.sh
)相结合来实现部署和管理,或者使用专门的运维软件(如Tomee Admin Console、Apache Felix Web Console等)进行高级管理和监控。
Maven
项目管理
挂载
指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件。
Linux 系统中“一切皆文件”,所有文件都放置在以根目录为树根的树形目录结构中。在 inux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。
挂载方法
在Linux中实现挂载主要有以下几个步骤:
-
分区和格式化磁盘:
在挂载之前,你需要确保磁盘已经被正确分区并格式化为Linux支持的文件系统,如ext4、XFS、Btrfs等。可以通过fdisk
、parted
等工具进行分区,mkfs
系列命令进行格式化。# 使用fdisk创建分区(例如/dev/sdb1) sudo fdisk /dev/sdb # 格式化分区为ext4文件系统 sudo mkfs.ext4 /dev/sdb1
-
创建挂载点:
在Linux系统中,你需要一个目录作为挂载点,这个目录将成为磁盘分区在文件系统层次结构中的访问入口。# 创建一个挂载点目录 sudo mkdir /mnt/new_volume
-
挂载分区:
使用mount
命令将分区挂载到创建好的挂载点上。# 将分区/dev/sdb1挂载到/mnt/new_volume sudo mount /dev/sdb1 /mnt/new_volume
-
临时挂载 vs 永久挂载:
-
临时挂载:如上述所示,重启系统后挂载会失效。
-
永久挂载:若想在系统启动时自动挂载,需要将挂载信息写入到
/etc/fstab
文件中。打开/etc/fstab
并添加一行类似如下格式的内容:/dev/sdb1 /mnt/new_volume ext4 defaults 0 0
这行内容含义分别是:设备名、挂载点、文件系统类型、挂载选项(通常为
defaults
)、dump备份工具忽略标志(0或1)和fsck检查顺序(通常为0表示不检查)。
-
-
验证挂载:
通过df -h
或lsblk
命令查看挂载状态以确认挂载是否成功。df -h lsblk
更改时需确保有权限
yum源使用
配置方案一:通过镜像制作本地yum源
##首先需要挂载镜像--将本地镜像上传到虚拟机中的/root目录中
##创建一个挂载目录
[root@linux-server ~]# mkdir /mnt/centos7u4
##进行挂载
##语法: mount 挂载设备 挂载点
[root@linux-server ~]# mount CentOS-7-x86_64-DVD-1708.iso /mnt/centos7u4/
##将原有的yum源备份到/tmp目录下
[root@linux-server ~]# mv /etc/yum.repos.d/* /tmp
##进入yum源配置文件存放目录
[root@linux-server ~]# cd /etc/yum.repos.d/
##在编写yum配置文件是必须是.repo
[root@linux-server yum.repos.d]# vim CentOS.Base.repo
##下面为配置文件
[centos7u4] ##yum源区别名称,用来区分其他的yum源
name=centos7u4 ##yum源描述 yum源名字
baseurl=file:///mnt/centos7u4 ##指定本地yum源的路径
enabled=1 ##是否使用此yum源(1为打开,0为关闭)
gpgcheck=0 ##检查软件 (1是检查,0是不检查)
##刷新缓存
[root@linux-server ~]# yum clean all
[root@linux-server ~]# yum repolist
配置方案二:修改为阿里云yum源
##切换目录到本地yum源地址
[root@localhost ~]# cd /etc/yum.repos.d
##创建一个文件
[root@localhost yum.repos.d]# mkdir back
##将所有.repo文件转移到刚创建的目录下
[root@localhost yum.repos.d]# mv *.repo back
##自己ls 看一下是否清除
##下载安装weget以防万一本机没有weget命令
[root@localhost ~]# yum -y install weget
###下载aliyun的yum源(更换主yum源为国内的阿里云yum源)
[root@linux-server yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
##参数解释
curl -o 指定存放路径
##(知识拓展下面一条为扩展源)
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
安装扩展源--epel.repo
[root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
##进入到yum源地址进性查看
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-Base.repo epel.repo (安装成功)
配置方案三 :局域网共享yum源配置
有局域网时,当有多台机器需要配置本地同一yum源,我们不需要把每台服务器都单独配置并挂载镜像,只要在一台服务器上配置好yum源。使用httpd服务即可让其他服务器正常访问。
##安装httpd服务
yum install -y httpd
##启动httpd服务
systemctl start httpd
##临时关闭防火墙
systemctl stop firewalld
#查看httpd是否启动
systemctl status httpd
##挂载镜像
mv /mnt/* centosiso.iso
mount /mnt/centosiso.iso /var/www/html/centosiso
##查看本机IP并访问就会出现测试页面
ip a
##访问机配置
##在一台机器上配置好httpd后选择局域网内其他机器配置yum源去访问此台服务器
cd /mnt/yum.repos.d/
mv -r * ..
echo "
[local]
name=net_bendiyum
baseurl=http://192.168.220.129/centosiso/
enabled=1
gpgcheck=0" > local.repo
yum clean all
yum makecache
yum repolist
镜像:是指一种特殊的文件格式,它包含了一个存储设备、文件系统或特定数据集合的完整副本。这个副本是按照字节级别的精确复制,因此能够再现原始数据的全部内容和结构。
挂载镜像: 挂载镜像通常是指将一个存储设备(如硬盘、CD/DVD等)的镜像文件加载到系统中,使之如同真实的物理设备一样可以被访问。这类镜像文件通常包含了整个磁盘或分区的完整内容,如ISO格式的光盘镜像、VHD/VMDK等虚拟磁盘镜像,或者是硬盘克隆的备份镜像。在Linux中,可以使用loop设备和mount命令挂载ISO镜像,而在Windows中则通常需要特定的软件(如Daemon Tools)来挂载。
公司目前技术栈,前端使用nginx进行负载均衡,后端使用nacos负载均衡,feign拆分微服务,tomcat管理接口,maven管理项目,Servlet异步。
更多推荐
所有评论(0)