Clay 的技术空间

用进废退 | 艺不压身

ZooKeeper 的应用场景

命名服务

ZooKeeper 可以用来实现分布式命名服务。命名服务是指通过指定的名字来获取资源或者服务的地址,利用 ZooKeeper 创建一个全局的路径,这个路径就可以作为一个名字,指向集群中的节点、提供服务的地址、或者一个远程的对象等等。统一命名服务的命名结构如下图所示:

  • (1)在分布式环境下,经常需要对应用 / 服务进行统一命名,以便于识别不同的服务。
    • 类似于域名与 IP 之间对应关系,IP 不容易记住,而域名容易记住。
    • 通过名称来获取资源服务的地址、服务提供者等信息。
  • (2)按照层次结构组织应用 / 服务的名称。
    • 可将服务名称以及地址信息写到 ZooKeeper 上,客户端通过 ZooKeeper 获取可用服务列表。
阅读全文 »

大纲

前言

Swagger 是一系列 RESTful API 的工具,通过 Swagger 可以获得项目的⼀种交互式 API 文档。Swagger 的目标是为 RESTful API 定义一个标准的、与语⾔言无关的接口,使人和计算机在看不到源码、或者看不到文档、或者不能通过网络流量检测的情况下,能发现和理解各种服务的功能。当服务通过 Swagger 定义,用户就能通过少量的实现逻辑与远程的服务互动。

版本说明

Swagger 的版本发展历史

Swagger 从 3.0 版本开始更名为 OpenAPI,通常所说的 Swagger 一般指的是 Swagger 2.x 版本,而 OpenAPI 则指的是 Swagger 3.x 版本。简而言之,Swagger2 是 OpenAPI 规范的前身,Swagger3 是 OpenAPI 规范的官方正式版本。更具体地说,Swagger3 引入了对 OpenAPI 的支持,提供了更简洁的依赖引入方式,接口地址有所改变,注解系统进行了更新,并对 Docket 配置进行了优化。Swagger3 实现了零配置和自动配置支持,同时兼容旧版注解,但文档页面地址和接口地址在不同版本间不兼容。

阅读全文 »

前言

SpringBoot 配置文件中的数据库账户、密码等敏感数据不能明文展示,否则代码泄露的话,数据库的数据会被恶意利用。

加密算法

  • Jasypt Spring Boot 2.x 默认使用的加密算法是 PBEWithMD5AndDES,其中的 IV 生成器是 org.jasypt.iv.NoIvGenerator
  • Jasypt Spring Boot 3.x 默认使用的加密算法是 PBEWITHHMACSHA512ANDAES_256,其中的 IV 生成器是 org.jasypt.iv.RandomIvGenerator

添加 Maven 坐标

1
2
3
4
5
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>
阅读全文 »

前言

官方教程

ELK 介绍

ELK 简介

ELK 是 Elasticsearch + Logstash + Kibana 的简称。

  • Elasticsearch 是一个分布式的搜索和分析引擎,可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 基于 Lucene 开发,现在是使用最广的开源搜索引擎之一。
  • Logstash 简单来说就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端,与此同时这根管道还可以根据不同的需求在中间加上滤网,Logstash 提供了很多功能强大的滤网以满足各种应用场景。
  • Kibana 是一个开源的分析与可视化平台,设计出来用于和 Elasticsearch 一起使用的。开发者可以使用 Kibana 搜索、查看、交互存放在 Elasticsearch 索引里的数据,并使用各种不同的图标、表格、地图显示,Kibana 能够很轻易的展示高级数据分析与可视化。
阅读全文 »

持久化

什么是持久化

持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。

持久化的实现方式

  • 快照方式持久化:在某时刻把所有数据进行完整备份,例如:MySQL 的 Dump 方式、Redis 的 RDB 方式
  • 写日志方式持久化:把用户执行的所有写指令(增删改)备份到文件中,还原数据时只需要把备份的所有指令重新执行一遍即可,例如:MySQL 的 Binlog、Redis 的 AOF、Hbase 的 HLog
阅读全文 »

优化生产环境中的 Tomcat 服务器涉及多个方面,包括性能调优、资源管理、安全性增强和稳定性保障。

性能调优

内存设置

  • 调整 JVM 内存参数

    • 设置合适的初始堆大小(-Xms)和最大堆大小(-Xmx),根据服务器的物理内存配置。典型设置如下:
      1
      2
      -Xms2048m
      -Xmx4096m
  • 调整方法区大小

    • 对于 Java 7 及以前版本,可以设置永久代大小(-XX:PermSize-XX:MaxPermSize)。
    • 对于 Java 8 及以后版本,可以调整元空间大小(-XX:MetaspaceSize-XX:MaxMetaspaceSize)。
阅读全文 »

安装环境介绍

环境名称版本
linuxCentOS Linux release 7.7.1908 (Core)
docker-ce19.03.8
docker-compose1.24.0-rc1
docker imagevimagick/privoxy:latest

初始目录结构

  • 目录结构
1
2
3
4
5
~/fig/privoxy/
├── docker-compose.yml
└── privoxy/
├── user.action
└── user.filter
阅读全文 »

前言

实现流程

创建钉钉群机器人后,得到 Webhook 与 Secret。Java 代码 实现 Admin 的 Notifier 接口,当监听到 Admin 服务状态变更后,直接调用 Webhook 发送消息给钉钉群机器人,群成员就可以收到报警消息通知,这个过程与 Github 的 Webhook 实现流程一致。

钉钉官方文档

值得一提的是,本文使用的是钉钉提供的 自定义机器人 接口,而不是 开发企业内部机器人 接口,同时 Webhook 里包含的 access_token 不存在有效期(永久有效),即不需要定时刷新 access_token

阅读全文 »

大纲

前言

排序算法有很多种,常见的包括:

  • 冒泡排序(Bubble Sort)
  • 选择排序(Selection Sort)
  • 插入排序(Insertion Sort)
  • 归并排序(Merge Sort)
  • 快速排序(Quick Sort)
  • 堆排序(Heap Sort)
  • 希尔排序(Shell Sort)
  • 计数排序(Counting Sort)
  • 桶排序(Bucket Sort)
  • 基数排序(Radix Sort)
阅读全文 »