Prometheus 快速入门通常情况下说 Prometheus 可能只是指“Prometheus 指标”或者“Prometheus 告警”,而不是单纯的 Prometheus Server。完整的 Prometheus 是一个由多种组件组成的体系,每种组件都有其特定的应用场景,它们之间的关系如下图所示。Laeni2024-07-03~2024-11-22
使用cfssl工具签发包含中间CA的https证书链,并让浏览器和java信任根CA本文先使用 cfssl 生成根CA证书,然后使用根证书签发中间CA证书(模拟中间颁发机构),再通过中间CA证书签发实际使用的https证书,这样可以通过内置一个根证书来验证该根证书直接或间接生成的所有证书的有效性。以此来模拟目前常见的证书颁发流程,从而更好地理解和学习证书颁发流程及证书验证原理,如果仅仅只是想生成一个用于测试的证书,那可以百度一下CSR文件在线生成工具等工具可以快速在线生成。Laeni2021-05-22~2024-03-03
从 Let’s Encrypt 申请免费证书并自动续签Let’s Encrypt 是一个证书颁发机构(CA),对外提供ACME协议的API,可以通过该API申请证书。而可以与ACME协议的API交互的客户端工具有很多,官方列举了一些比较好的实现。这里我们选用其中的lego工具使用,选它的一个重要原因是该工具使用Go编写,直接到项目的releases页下载可执行二进制即可使用,并且它不会尝试编辑Web服务器的配置文件,只专注于证书的申请和续期,而证书续期完成后可以通过钩子命令来处理一些后续逻辑(比如 reload nginx)。Laeni2022-11-29~2024-03-03
MyBatis 常用笔记记录当搜索“MyBatis 的优势”之类的词时总会“灵活性”这个词。确实,因为用 MyBatis,你可以仅查询一张表中的部分字段、轻松关联多张表。由于可以关联多张表,所以只需要将查询结果共同用一个类对应接收即可,不需要每张表创建一个类,这简直不要太爽。如果你也觉得这样很爽,那你可能大部分时间都只是自己写,很少去看他人写的代码。然而,这种·约束性很弱的写法,说好听点是“灵活”,说难听点就是“无规范章法的乱来”,这种代码自己写着可能很爽,但别人维护起来一定很痛苦。Laeni2023-11-11
流式加密(加密超大文件)当需要加密时,很多时候都是网络随便搜索一个示例来改一下即可。但是这些示例大部分都只适合加密少数据,当加密数据量过大,比如加密文件时很容易OOM。所以当加密大量数据时,不能一次性将待加密的密文一次性读取到内存,然后再一次性加密得到密文,而是应该边读边加密,并且边将得到的密文写到磁盘,这样就能以少量内存使用量加密大量数据。Laeni2023-10-27
NIO 框架 NettyNetty 是一个 NIO 客户端服务器框架,可以快速轻松地开发网络应用程序,例如协议服务器和客户端。它极大地简化和简化了网络编程,如 TCP 和 UDP 套接字服务器开发。Laeni2023-05-14~2023-05-15
Containerd ctr、crictl、nerdctl 客户端命令由于 Containerd 已经从 Docker 独立,这代表 Docker 底层也是使用的是 Containerd。而 Containerd 是实现了 CRI 规范的,所以 k8s 是可以直接使用 Containerd 而无需再使用 Docker 的。但是大部分时候我们还是使用 Docker 作为 k8s 的容器运行时,原因是因为我们习惯了 Docker,如果换为 Containerd 必定要使用新的工具来替换 Docker,而这些命令就是 ctr、crictl 等(不同的运行时会有一定差异)。Laeni2022-12-11
cfssl工具帮助文档CFSSL 是 CloudFlare 的 PKI/TLS 瑞士军刀。它既是一个命令行工具,也是一个用于签署、验证和捆绑 TLS 证书的 HTTP API 服务器。Laeni2022-01-03~2022-11-05
生成K8s所需的证书和密钥及用户配置文件根据PKI证书和要求创建符合K8s集群所需要的全部证书,目的是为了熟悉证书生成过程并且了解各个证书的作用。这里先生成根CA,然后再通过根CA创建K8s中需要的几个CA,最后通过这些CA来签发对应的证书。Laeni2022-08-01
JSON Web Token (JWT) 结构与工作机制JSON Web Token (JWT) 是一个开放标准 ( RFC 7519 ),它定义了一种紧凑且自包含的方式,用于在各方之间以 JSON 对象的形式安全传输信息。此信息可以验证和信任,因为它是数字签名的。Laeni2022-03-29
HTTP接口响应格式定义参考(restful风格)做的好的情况下,一般需要根据不同的类型返回不同的错误响应,比如直接通过浏览器地址栏打开时可以返回HTML,通过js等API访问时可以JSON或者XML等。不过这里只考虑全部返回JSON格式,因为目前大部分系统为前后分离的,所有API一般都不直接通过浏览器访问。Laeni2022-02-22~2022-03-22
shardingsphere-jdbc 4.1版本 SpringBoot 版本配置数据分片这里简单记录一下SpringBoot通过配置方式使用shardingsphere-jdbc进行数据分片,虽然目前已经更新到5.1.0版本,但是单凭一个shardingsphere-jdbc-core依赖就能让项目大小增加56MB+,再加上其依赖及其复杂,很容易发生依赖冲突,所以不考虑使用该版本。但是从功能看还是很期待,期待6.x版本会不会有所改善。Laeni2022-03-04~2022-03-05
RxJS简单使用笔记RxJS 是一个使用可观察序列编写异步和基于事件的程序的库。它提供了一种核心类型Observable、卫星类型(Observer、Scheduler、Subjects)和受Array#extras启发的操作符(map、filter、reduce、every 等),以允许将异步事件作为集合处理。Laeni2021-07-28~2021-09-16
WEB中同时使用多张SVG图片导致颜色混乱在同一个页面上同时使用多张SVG图片(直接将SVG代码嵌入到HTML中)可能会导致部分图片颜色错乱,原因是大部分SVG都是通过软件制作的,软件制作时往往会增加一些样式,这些样式一般又是以类似CSS内联的方式申明的,这就需要给元素进行标记(一般是用id),而id是由软件自动生成,这就很容易造成id重复。而同一个id在一张SVG图片中是唯一的,但是在整个页面中就不一定了,所以这些冲突就是导致颜色等错乱的根本原因。Laeni2021-09-04
Spring Cache 入门先从缓存中读取数据,如果没有再从慢速设备上读取实际数据(数据也会存入缓存)。缓存什么经常读取且不经常修改的数据、缓存昂贵(CPU/IO)的且对于相同的请求有相同的计算结果的数据。Laeni2021-08-27~2021-08-28
Spring Reactive Web 入门及常见使用案例Spring 5 - Spring webflux 是一个新的非堵塞函数式 Reactive Web 框架,可以用来建立异步的,非阻塞,事件驱动的服务,并且扩展性非常好。把阻塞(不可避免的)风格的代码迁移到函数式的非阻塞 Reactive 风格代码,需要把商业逻辑作为异步函数来调用。这可以参考 Java 8 的方法或者 lambda 表达式。由于线程是非阻塞的,处理能力能被最大化使用。Laeni2021-08-24
领域驱动设计(DDD)入门DDD似乎一直都比较神秘,不同的人对它的理解不同,导致实际应用也差别很大。以下文章几乎全部摘录自博客园,手动搬一遍(略有删改)除了作为笔记查阅之外主要是为了加深印象。原文链接在文末可找到。Laeni2021-08-18~2021-08-21
@umijs/plugin-dva 的相关概念和使用笔记dva 是一个基于 redux 和 redux-saga 的数据流方案,为了简化开发体验,dva 额外内置了 react-router 和 fetch。@umijs/plugin-dva目的是能在umi中快速集成dva。Laeni2021-06-13~2021-08-14
修改系统和常用应用的缓存路径到非系统分区大部分应用程序都有缓存,而且一般都会将缓存数据放在当前用户的用户目录下,默认配置情况下将会导致系统分区数据越来越多,从而经常出现空间不够的情况。数据全部放在系统分区,在重装系统时也会越到数据备份的问题。所以一般情况下需要更改大部分软件的安装目录和缓存目录到非系统分区。Laeni2021-08-12~2021-08-13
Webpack5 Module Federation微前端初探最近看到微前端相关的一些东西,就去对比了下很多微前端框架的实现思路和使用方式,虽然目前微前端技术还不是很成熟,但是也涌现出很多框架,比如蚂蚁的qiankun(基于single-spa系)、bit和webpack5 module-federation等。Laeni2021-06-20
关于博客最初有搭建自己博客想法的时候还是在大一的时候了,那时候刚刚接触编程,对计算机相关的东西都充满了好奇,很多接触的新鲜东西都想自己去尝试,自然对自建博客也不例外。座右铭是:只要给我一台电脑,我就能敲动地球。但那时候对我来说,自建博客除了想自己动手尝试下之外更多的就是炫耀而已,没有其他更有意义的想法,再加上当时的自己能力欠缺,唯一在学的一门语言就是C语言,以至于这件事就这样不了了之了。2021-05-10~2021-06-01