Kubernetes 部署 Metrics Server 获取集群指标数据

Metrics Server 是 Kubernetes 集群核心监控数据的聚合器,可以通过 Metrics API 的形式获取 Metrics 数据,不过仅仅是获取指标的最新值,不对旧值进行存储,且不负责将指标转发到第三方目标。Metrics Server 还可以与 Kubectl 工具结合使用,提供 kubectl top 命令来展示集群中的指标数据,接下来我们开始部署 Metrics Server。

Read more

解决 Docker 服务器存储资源池不足问题

最近在执行 Docker 运行命令启动镜像时候,无法正常执行 Docker 启动镜像命令,提示了 Thin Pool has 163051 free data blocks which is less than minimum required 163840 free data blocks 错误信息,能从字面意思了解这个错误跟存储有关,这里对这个问题进行一下探究及解决。

Read more

SpringBoot 接口幂等性的实现

接口幂等性是开发当中要求,也是对业系统正常执行的保障。尤其是支付、订单等与金钱挂钩的服务,保证接口幂等性尤其重要,如果幂等不能够保证,那么很可能出现重复提单、重复消费等一系列线上 Bug,这些问题是不能被接受的。这里简单调研了下业界常用接口幂等性保障方案,使用 SpringBoot 框架实现,进行一下这个过程记录。

Read more

通过 Docker 部署 Redis 6.x 集群

在 Redis 3.0 版本后正式推出 Redis 集群模式,该模式是 Redis 的分布式的解决方案,是一个提供在多个 Redis 节点间共享数据的程序集,且 Redis 集群是去中心化的,它的每个 Master 节点都可以进行读写数据,每个节点都拥有平等的关系,每个节点都保持各自的数据和整个集群的状态,且最重要的是它能够横方便向扩展数据。这里我们部署一下 Redis 6.x 版本的集群模式,这里记录下这个过程。

Read more

Java 中分布式 ID 的设计方案

互联网业务中,一套系统往往都是非常复杂的,很多时候都需要对大量数据进行处理与标识。例如,支付宝、美团、大众点评、京东商城、淘宝商城等等,都需要关联商品编号、用户下单单号、快递的快递号这样的数据,都需要使用一个唯一的 ID 进行标识。如何生成一个全局唯一的,且有序的 ID 对这些数据进行标识,成为分布式系统中很重要的考虑内容。这里我们介绍下 Java 中常用的分布式 ID 生成方案。

Read more

Spring 事务管理详解

日常开发我们经常会提及事务的概念,也会使用数据库事务进行一些列的涉及商品价格的操作,可以说事务是我们开发中必不可续的功能。Spring 框架中对事物进行了一些列封装,提供了事务接口,将事务的实现交由集成的持久层框架完成。可以说非常方便我们在使用 Spring 框架式,用简单的方式就实现事务。这里详细介绍下 Spring 中的事务相关内容。

Read more

通过 Helm 搭建 Docker 镜像仓库 Harbor

Harbor 是一个开放源代码容器镜像注册表,可通过基于角色权限的访问控制来管理镜像,还能扫描镜像中的漏洞并将映像签名为受信任。Harbor 是 CNCF 孵化项目,可提供合规性,性能和互操作性,以帮助跨 Kubernetes 和 Docker 等云原生计算平台持续,安全地管理镜像。下面将记录下,如何通过 Helm 安装 Docker 镜像仓库 Harbor。

Read more

Java 8 中使用 Stream 方式处理数据

在 Java 8 中增加了一个新的抽象接口 Stream API,它支持声明式的处理数据。使用 Stream 操作集合似于使用 SQL 语句数据库查找数据类似,提供直观的方法进行操作。 同时 Stream API 让开发者能够快速写出干净、简洁的代码,提高开发者的开发效率。

Read more

Java 8 中使用 Lambda 表达式简化代码

Lambda 表达式是在 JDK 8 中引入的一个新特性,可用于取代大部分的匿名内部类。使用 Lambda 表达式可以完成用少量的代码实现复杂的功能,极大的简化代码代码量和代码结构。同时,JDK 中也增加了大量的内置函数式接口供我们使用,使得在使用 Lambda 表达式时更加简单、高效。

Read more

Java 8 中使用 Optional 处理 null 对象

Optional 是一个容器对象,可以存储对象、字符串等值,当然也可以存储 null 值。Optional 提供很多有用的方法,能帮助我们将 Java 中的对象等一些值存入其中,这样我们就不用显式进行空值检测,使我们能够用少量的代码完成复杂的流程。

Read more