黑马现有java课程框架及其功能梳理

在这里插入图片描述

高并发相关

主要用来解决IO密集型程序(大量文件读写,网络通信,数据库交互),主要使用异步IO,多线程

提高通信效率

Netty

作用:

Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。(感觉只要知道他是提高通讯效率的就行了)

哪些框架使用它:

Dubbo、zk、RocketMQ、ElasticSearch、Spring5(对HTTP协议的实现)、GRPC、Spark等大型开源项目都在使用Netty作为底层通讯框架

Netty 的三大核心组件分别为 ChannelChannelHandler(以及相关的 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 的场合:

  1. 高性能网络服务器

    • 实现 HTTP 或 HTTPS 服务器,替代传统的基于 Tomcat、Jetty 等容器的同步阻塞模型,提供更好的性能和扩展性。
    • 构建 WebSocket 服务器,实现实时通讯、推送服务、在线聊天室等功能。
  2. 异步RPC框架

    • 在分布式系统中,Netty 可以作为远程过程调用(RPC)框架的底层通信库,例如 Dubbo、gRPC 等,用于服务间高效、低延迟的通信。
  3. 消息中间件

    • 开发消息队列系统(如ActiveMQ、RocketMQ的部分组件),利用Netty处理大量并发的发布/订阅请求和消息传输。
  4. 游戏服务器

    • 在游戏开发中,Netty 被广泛应用于构建多人在线游戏的后端服务器,处理玩家间的实时交互数据。
  5. 大数据处理

    • 大数据集群中的节点间通信,如Apache Hadoop、Spark等项目的部分组件可能会采用Netty进行高效的数据传输。
  6. 金融交易系统

    • 对于需要处理高频交易、实时报价等场景,Netty能够支撑高并发、低延迟的交易数据交换。
  7. 移动互联网后台服务

    • 移动APP的后台服务,如社交应用、新闻推送、即时通讯应用的后台服务,使用Netty构建高效的长连接通信服务。
  8. TCP/UDP协议开发

    • 自定义私有协议栈,基于Netty可以方便地开发和部署基于TCP、UDP或其他自定义协议的网络应用。
  9. 微服务架构中的服务间通信

    • 在微服务架构中,Netty可以作为各个服务间通信的基础组件,提供可靠的异步通信机制。

总之,任何需要进行高效网络通信、处理大量并发连接、减少资源消耗、优化网络性能的场景,都可能考虑使用Netty作为其通信层的核心框架。

涉及的名词解释:

网络应用程序框架: 用于简化网络通信和开发服务器端应用程序的一系列工具、库和服务的集合。常见网络应用程序框架:Spring MVC,spring Boot,Netty等。
I/O三种模式:
这位大佬解释的太好了!原文在这里
在这里插入图片描述

NIO

在这里插入图片描述
感觉有点太底层了,先不了解,之后看看:大佬文章
通道:简化直接与Socket进行操作的复杂性
选择器:实现一个线程处理多个客户端链接
Java高级架构线路图学习路线内含Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式,高并发

Socket

感觉更底层,也是等等再看

Nginx

Nginx 不是分布式框架,而是一款高性能的 Web 服务器和反向代理服务器,同时也可作为邮件代理服务器使用。Nginx 在分布式系统中的作用主要是:

  1. 负载均衡:Nginx 可以作为反向代理服务器,将客户端请求分发到多个后端服务器,实现流量分摊,提高系统的并发处理能力和可用性,这是构建分布式系统的重要环节。
  2. 动静分离:通过配置,Nginx 可以将动态请求转发给应用服务器(如Tomcat、Node.js等),静态内容则直接由Nginx处理并返回,提高整体系统的响应速度。
  3. 缓存服务:Nginx 提供缓存功能,对于静态资源或者经过特别配置的动态内容,可以直接从缓存中快速响应,减轻后端服务器的压力。
  4. API Gateway:在微服务架构中,Nginx 可以作为 API 网关,统一处理来自客户端的请求,路由到相应的微服务,同时还可以做权限验证、限流、熔断等操作。

虽然 Nginx 不是严格意义上的分布式框架,但它在分布式系统中承担着重要角色,为分布式系统提供了关键的服务接入和流量管理能力。

feign

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的几个关键管理功能及其实现方式:

管理界面

  1. Tomcat Web管理界面(Tomcat Manager Application)
    Tomcat Manager是一个Web应用,安装在Tomcat中,默认情况下未启用。管理员可通过浏览器访问 http://localhost:8080/manager/html (请将localhost8080替换为实际的服务器地址和端口)来管理部署的应用程序。访问前需要在tomcat-users.xml中配置具有管理权限的用户账户。

  2. Server Status 页面
    可通过 http://localhost:8080/manager/status 查看服务器的基本状态信息,如JVM内存使用情况、线程池状态等。访问此页面也需要有适当的角色权限。

管理接口

  1. Tomcat Manager REST API
    Tomcat Manager不仅提供了Web界面,还提供了REST API,允许通过HTTP请求远程部署、启动、停止和卸载应用。需要认证才能使用这些API。

  2. 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中实现挂载主要有以下几个步骤:

  1. 分区和格式化磁盘
    在挂载之前,你需要确保磁盘已经被正确分区并格式化为Linux支持的文件系统,如ext4、XFS、Btrfs等。可以通过fdiskparted等工具进行分区,mkfs系列命令进行格式化。

    # 使用fdisk创建分区(例如/dev/sdb1)
    sudo fdisk /dev/sdb
    
    # 格式化分区为ext4文件系统
    sudo mkfs.ext4 /dev/sdb1
    
  2. 创建挂载点
    在Linux系统中,你需要一个目录作为挂载点,这个目录将成为磁盘分区在文件系统层次结构中的访问入口。

    # 创建一个挂载点目录
    sudo mkdir /mnt/new_volume
    
  3. 挂载分区
    使用mount命令将分区挂载到创建好的挂载点上。

    # 将分区/dev/sdb1挂载到/mnt/new_volume
    sudo mount /dev/sdb1 /mnt/new_volume
    
  4. 临时挂载 vs 永久挂载

    • 临时挂载:如上述所示,重启系统后挂载会失效。

    • 永久挂载:若想在系统启动时自动挂载,需要将挂载信息写入到/etc/fstab文件中。打开/etc/fstab并添加一行类似如下格式的内容:

      /dev/sdb1    /mnt/new_volume   ext4    defaults    0 0
      

      这行内容含义分别是:设备名、挂载点、文件系统类型、挂载选项(通常为defaults)、dump备份工具忽略标志(0或1)和fsck检查顺序(通常为0表示不检查)。

  5. 验证挂载
    通过df -hlsblk命令查看挂载状态以确认挂载是否成功。

    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异步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浪里摸鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值