Clay 的技术空间

用进废退 | 艺不压身

前言

本文主要介绍 Spring + Spring MVC + MyBatis 整合(SSM),开发工具基于 Eclipse + Maven。值得一提的是,下文只给出 SSM 整合所需的最小配置内容,在生产环境需要适当优化项目的配置,尤其是 Log4j2Druid 的配置。完整的项目代码可以直接从 GitHub 下载对应章节 ssm-study

版本说明

名称版本
Spring4.3.2.RELEASE
MyBatis3.4.1
Druid1.0.25
Log4j22.6.2
MySQL5.7.26
阅读全文 »

前言

本文主要介绍如何使用 Eclipse 创建基于 Maven 的 Web 项目(动态),适用于任何版本的 Eclipse。

快速开始

创建 Maven Web 项目

  • 创建 Maven 项目,并自定义工作空间的位置

阅读全文 »

SpringBoot

SpringBoot 站点

SpringBoot 特性

  1. 创建独立的 Spring 应用程序
  2. 嵌入的 Tomcat,无需部署 WAR 文件,适用于准生产环境
  3. 简化 Maven 配置
  4. 自动配置 Spring
  5. 提供生产就绪型功能,如指标、健康检查、外部配置
  6. 开箱即用,无需 XML 配置
阅读全文 »

Eclipse 在线安装阿里巴巴 Java 开发规约插件

打开 Eclipse –> Help –> Install New Software,填写插件的 URL 地址: https://p3c.alibaba.com/plugin/eclipse/update, 然后根据界面提示一步步安装,最后重启 Eclipse。安装成功后,工具栏会新增下图所示的图标。可以通过右键菜单、Toolbar 按钮两种方式手动触发代码检测,同时结果面板中可以对部分实现了 QuickFix 功能的规则进行快速修复。

alibaba-p3c-1

alibaba-p3c-2

阅读全文 »

大纲

JUC 介绍

JDK 5 中增加了并发大师 Doug Lea 的并发库,这一引进给 Java 线程的管理和使用提供了极大的便利性。在 Java 5 提供的 java.util.concurrent(简称 JUC)包中,增加了在并发编程中很常用的实用工具类,用于定义类似于线程的自定义子系统,包括线程池、异步 IO 和轻量级任务框架。JUC 提供了可调的、灵活的线程池,还提供了设计用于多线程上下文中的 Collection(即线程安全的集合类)实现等。常用的 JUC 包有以下几个:

  • java.util.concurrent
    • java.util.concurrent.locks
    • java.util.concurrent.atomic
阅读全文 »

方案一

Hexo 官方推荐的部署方案,是在先本地编写 MarkDown 源文件,然后在本地构建静态资源文件,最后同步静态资源文件到服务器。

方案一

阅读全文 »

前言

本文将介绍在 SpringCloud 项目中,通过 Eureka + Zuul 实现网关动态路由和网关灰度发布。Zuul 实现网关灰度发布的核心思路是:通过配置中心(如数据库、Nacos、ZooKeeper 等)控制是否开启灰度发布,然后在 Zuul 的 Filter 中根据请求路径或请求参数(如 version)定义灰度标记,再结合 Ribbon 负载均衡策略按灰度标记筛选服务实例,最终基于 Eureka metadata(如 current / newest)将流量按规则路由到新旧服务,并通过按比例逐步放量(如 1% → 10% → 50% → 100%)实现可控放量,支持随时调整和快速回滚。

术语说明

  • 网关动态路由:网关根据数据库、配置中心的数据变化,动态更新路由规则(如上线新服务、下线旧服务、修改路由转发路径),无需重启网关服务即可实时生效。
  • 网关灰度发布:网关根据一定策略(如用户 ID、请求参数、随机百分比等)将部分流量路由到新版本服务,实现逐步放量发布与风险控制。
阅读全文 »

Redis 内存管理

如何查看 Redis 的内存使用情况

使用 Redis 的 INFO 命令,可以获取有关 Redis 服务器的内存信息,命令如下:

1
info memory

其中与内存使用情况相关的输出信息如下:

  • used_memory:已使用的内存
阅读全文 »

大纲

Gateway 的流量控制

Gateway 的限流概述

在开发高并发系统时可以用三把利器来保护系统:缓存、降级和限流。缓存的目的是提升系统访问速度和增大系统处理的容量,是抗高并发流量的 “银弹”;而降级是当服务出现问题或者影响到核心流程时,需要暂时将其屏蔽掉,待高峰过去之后或者问题解决后再打开;而有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀、抢购)、写服务(如评论、下单)、频繁的复杂查询等,因此需要有一种手段来限制这些场景的并发 / 请求量,即限流。限流的目的是通过对并发访问 / 请求进行限速或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务(定向到错误页或友好的展示页)、排队或等待(比如秒杀、评论、下单等场景)、降级(返回兜底数据或默认数据)。主流的中间件都会有单机限流框架,一般支持两种限流模式:控制速率和控制并发。Spring Cloud Zuul 通过第三方扩展 spring-cloud-zuul-ratelimit 也可以支持限流。Spring Cloud Gateway 是一个 API 网关中间件,网关是所有请求流量的入口;特别是像天猫双十一、双十二等高并发场景下,当流量迅速剧增,网关除了要保护自身之外,还要限流保护后端应用。常见的限流算法有漏桶和令牌桶,计数器也可以进行粗暴限流实现。对于限流算法,可以参考 Guava 中的 RateLimiter、Bucket4jRateLimitJ 等项目的具体实现。下面将介绍如何基于 Bucket4j、Gateway 内置的限流过滤器工厂(RequestRateLimiterGatewayFilterFactory)、CPU 使用率实现限流,点击下载完整的案例代码。

阅读全文 »