Luobxx'Blog

Web中间件

\(\Huge{Web中间件}\)

Spring Boot

Spring Boot 中文文档

核心特性

使用Spring Boot进行开发

Springboot是什么?Springboot详解!详细介绍-CSDN博客

Spring Boot是由Pivotal团队提供的一套开源框架,可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持,可以帮助开发者更轻松快捷地构建出企业级应用。Spring Boot通过自动配置功能,降低了复杂性,同时支持基于JVM的多种开源框架,可以缩短开发时间,使开发更加简单和高效。

Spring Boot的核心功能

1、 可独立运行的Spring项目:Spring Boot可以以jar包的形式独立运行。

2、 内嵌的Servlet容器:Spring Boot可以选择内嵌Tomcat、Jetty或者Undertow,无须以war包形式部署项目。

3、 简化的Maven配置:Spring提供推荐的基础 POM 文件来简化Maven 配置。

4、 自动配置Spring:Spring Boot会根据项目依赖来自动配置Spring 框架,极大地减少项目要使用的配置。

5、 提供生产就绪型功能:提供可以直接在生产环境中使用的功能,如性能指标、应用信息和应用健康检查。

6、 无代码生成和xml配置:Spring Boot不生成代码。完全不需要任何xml配置即可实现Spring的所有配置。

Docker

什么是Docker?看这一篇干货文章就够了! - 知乎

docker是一个用Go语言实现的开源项目,可以让我们方便的创建和使用容器,docker将程序以及程序所有的依赖都打包到docker container,这样你的程序可以在任何环境都会有一致的表现,这里程序运行的依赖也就是容器就好比集装箱,容器所处的操作系统环境就好比货船或港口,程序的表现只和集装箱有关系(容器),和集装箱放在哪个货船或者哪个港口(操作系统)没有关系

docker 中有两个基本概念:镜像(Image)和容器(Container)。

Maven

Maven 中文网

Apache Maven 是一个软件项目管理和理解工具。基于项目对象模型 (POM) 的概念,Maven 可以从一条中心信息管理项目的构建、报告和文档。

maven的目标

Maven 的主要目标是让开发人员能够在最短的时间内了解开发工作的完整状态。为了实现这一目标,Maven 处理了几个关注领域:

  • 简化构建过程
  • 提供统一的构建系统
  • 提供优质的项目信息
  • 鼓励更好的发展实践

简化构建过程

虽然使用 Maven 并没有消除了解底层机制的需要,但 Maven 确实为开发人员提供了许多细节的保护。

提供统一的构建系统

Maven 使用其项目对象模型 (POM) 和一组插件来构建项目。一旦你熟悉了一个 Maven 项目,你就会知道所有的 Maven 项目是如何构建的。这可以在浏览许多项目时节省时间。

提供优质的项目信息

Maven 提供了有用的项目信息,这些信息部分来自您的 POM,部分来自您的项目源代码。例如,Maven 可以提供:

  • 直接从源代码控制创建的更改日志
  • 交叉引用的来源
  • 项目管理的邮件列表
  • 项目使用的依赖项
  • 单元测试报告,包括覆盖率

第三方代码分析产品还提供 Maven 插件,将其报告添加到 Maven 提供的标准信息中。

Redis

Redis中文学习网 - Redis开发与运维技术、Redis教程、使用手册

Redis中文教程

Redis(全称为Remote Dictionary Server)是一个开源的高性能键值对存储系统,具有快速、灵活和可扩展的特性。它是一个基于内存的数据结构存储系统,可以用作数据库、缓存和消息代理。

Redis 是互联网技术中使用最为广泛的中间件之一。

特点

速度快,完全基于内存,使用 C 语言实现,网络层使用 epoll 解决高并发问题,单线程模型避免了不必要的上下文切换及竞争条件。

注意:单线程仅仅是说在网络请求这一模块上用一个请求处理客户端的请求,像持久化它就会重开一个线程/进程去进行处理。

  • 高性能:Redis 数据存储在内存中,因此能够提供极快的读写操作。它采用单线程模型和异步 I/O,避免了多线程的竞争和阻塞,从而达到了非常高的性能。

  • 数据结构多样:Redis 有 8 种数据类型,当然常用的主要是 String、Hash、List、Set、 SortSet 这 5 种类型,他们都是基于键值的方式组织数据。每一种数据类型提供了非常丰富的操作命令,可以满足绝大部分需求,如果有特殊需求还能自己通过 lua 脚本自己创建新的命令(具备原子性);

  • 持久化支持:Redis 提供了两种持久化方式,即快照(Snapshotting)和日志追加(Append-only file,AOF)。快照方式将 Redis 内存数据以二进制格式写入磁盘,而 AOF 则通过追加记录 Redis 的操作命令来实现持久化。

  • 发布/订阅:Redis 支持发布/订阅模式,可以用作消息代理。发布者将消息发送到指定的频道,订阅者则可以接收和处理这些消息。这种模式在构建实时通信、事件驱动系统和消息队列等场景中非常有用。

  • 分布式缓存:Redis可以通过主从复制和分片来实现数据的分布式存储和高可用性。主从复制可以将数据复制到多个从节点,实现读写分离和数据备份。而分片则可以将数据分布在多个Redis节点上,实现横向扩展和负载均衡。

  • 事务支持:Redis 支持事务,开发者可以将多个操作组合成一个原子性的操作序列,保证这些操作要么全部执行成功,要么全部不执行。

  • 功能丰富:Redis不仅仅是一个简单的缓存,它还提供了许多其他功能,如事务支持、Lua脚本执行、定时任务、原子操作等。这使得开发者可以在Redis中实现更复杂的应用逻辑。

  • Redis 的代码开源在 GitHub,代码非常简单优雅,任何人都能够吃透它的源码;它的编译安装也是非常的简单,没有任何的系统依赖;有非常活跃的社区,各种客户端的语言支持也是非常完善。另外它还支持事务(没用过)、持久化、主从复制让高可用、分布式成为可能。

Redis适用场景

缓存,毫无疑问这是 Redis 当今最为人熟知的使用场景,再提升服务器性能方面非常有效。

  1. 排行榜,如果使用传统的关系型数据库来做,非常麻烦,而利用 Redis 的 SortSet 数据结构能够非常方便搞定;
  2. 计算器/限速器,利用 Redis 中原子性的自增操作,我们可以统计类似用户点赞数、用户访问数等,这类操作如果用 MySQL,频繁的读写会带来相当大的压力;限速器比较典型的使用场景是限制某个用户访问某个 API 的频率,常用的有抢购时,防止用户疯狂点击带来不必要的压力;
  3. 好友关系,利用集合的一些命令,比如求交集、并集、差集等,可以方便搞定一些共同好友、共同爱好之类的功能;
  4. 简单消息队列,除了 Redis 自身的发布/订阅模式,我们也可以利用 List 来实现一个队列机制,比如到货通知、邮件发送之类的需求,不需要高可靠,但是会带来非常大的 DB 压力,完全可以用 List 来完成异步解耦;
  5. Session 共享,以 PHP 为例,默认 Session 是保存在服务器的文件中,如果是集群服务,同一个用户过来可能落在不同机器上,这就会导致用户频繁登陆;采用 Redis 保存 Session 后,无论用户落在那台机器上都能够获取到对应的 Session 信息。

Web服务器软件

什么是Apache Web服务器?

Web服务器王者之争:该选择Apache还是Nginx

可以在同一台服务器上运行Tomcat和Apache。此设置使服务器能够轻松处理HTTP和Java请求。

Apache

Web服务器是存储站点文件并处理来自访问者浏览器的请求的计算机。

Apache在HTTP Web服务器之上运行。当有人访问您的站点时,他们的浏览器将向服务器发送HTTP请求。Apache将收到该请求,然后交付网站的文件,以便用户可以查看您的内容。从本质上讲,Apache充当您的网站和用户浏览器之间的中介。

Apache Tomcat

Tomcat 中文官网 下载 安装

Tomcat是常见的免费的web服务器。

8080是tomcat默认使用的端口号。

NGINX

Nginx中文手册

HTTP和反向代理web服务器

在Linux系统中,通常用

Caddy

欢迎 — Caddy 文档 - Caddy 服务器

更好用的 Web 服务器:Caddy - 知乎

Caddy是一个适用Go实现的Web Serve。

特点

  • 全自动支持HTTP/2协议,无需任何配置。
  • Caddy 使用 Let’s Encrypt 让你的站点全自动变成HTTPS,无需任何配置。
  • 合理使用多核多核 得益于go的特性
  • 完全支持IPv6环境
  • Caddy 对WebSockets有很好的支持
  • 自动把Markdown转成 HTML
  • Caddy 对log格式的定义很容易
  • 易于部署 得益于go的特性,caddy只是一个小小的二进制文件,没有依赖,很好部署
  • 得益于Go的跨平台特性,Caddy很容易的支持了三大主流系统:Windows、 Linux、Mac

“几乎所有的功能在Caddy里的都是插件,HTTP服务器是插件,高级的TLS特性也是插件,每一行命令实现的功能都是一个插件”

Servlet 容器

Servlet 容器 是一种用于管理和执行 Java Servlet 的组件。它在 Web 服务器和 Servlet 之间起到桥梁作用,负责处理客户端的请求并生成动态网页。

Servlet 容器在 Web 应用中扮演着重要角色,它不仅负责管理和执行 Servlet,还提供了处理 HTTP 请求和生成动态响应的机制。通过了解 Servlet 容器的工作原理和生命周期,可以更好地开发和优化 Web 应用。

什么是 Servlet 容器?

Servlet 容器是 Web 服务器和 Servlet 进行交互的必不可少的组件。它的主要作用是接收客户端的 HTTP 请求,将请求转发给相应的 Servlet 进行处理,并将生成的响应返回给客户端。

Servlet 容器的工作原理

  1. 接收请求:Web 服务器接收到 HTTP 请求后,将请求转发给 Servlet 容器。
  2. 加载 Servlet:如果容器中不存在所需的 Servlet,容器会加载并初始化该 Servlet。
  3. 处理请求:容器调用 Servlet 的 service() 方法来处理 HTTP 请求,生成响应。
  4. 返回响应:Web 服务器将动态生成的结果返回给客户端。

Servlet 的生命周期

Servlet 的生命周期包括三个主要阶段:初始化、服务和销毁。

  1. 初始化:当 Servlet 容器加载 Servlet 时,会调用init()方法进行初始化。
  2. 服务:每次接收到请求时,容器都会调用service()方法来处理请求。
  3. 销毁:当 Servlet 容器需要销毁 Servlet 时,会调用destroy()方法来释放资源。

常见的 Servlet 容器

  • Tomcat:一个免费的开源 Web 应用服务器,属于轻量级应用服务器。
  • Jetty:一个开源的 Servlet 容器,为基于 Java 的 Web 容器提供运行环境。

示例代码

以下是一个简单的 Servlet 容器实现示例:

class SimpleServletContainer {
    public static void main(String[] args) throws Exception {
        ServerSocket server = new ServerSocket(8080);
        while (true) {
            Socket socket = server.accept();
            // 处理请求并调用相应的 Servlet
        }
    }
}

在实际应用中,Servlet 容器如 Tomcat 和 Jetty 提供了更复杂和高效的实现,支持多种协议和 IO 方式。

MINIO

MinIO官网

MinIO对象存储 Linux — MinIO中文文档 | MinIO Linux中文文档

MinIO 是一个高性能的对象存储服务器,用于构建云存储解决方案。它使用Golang]编写,专为私有云、公有云和混合云环境设计。它是兼容Amazon S3 API的,并可以作为一个独立的存储后端或与其他流行的开源解决方案(如Kubernetes)集成。

简单解释:

MinIO 允许你存储非结构化数据(如图片、视频、日志文件等)以对象的形式。与传统的文件系统(如NFS)或块存储(如iSCSI)相比,对象存储更易于扩展和管理。MinIO 提供简单的部署选项和易于使用的界面,允许你快速设置和访问存储资源。

Mybatis

MyBatis中文网

什么是Mybatis

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.6</version>
</dependency>
posted @ 2026-01-15 22:15  鱼香_rose  阅读(0)  评论(0)    收藏  举报