Night Field's Blog

Make it work, make it right, make it fast.

Apache HttpClient 模拟 SSO 登陆丢失 cookie 问题分析

背景 需要用 Java 访问一个被 SSO 保护的特殊接口获取信息。 方案设计 假如我们用浏览器来实现这个功能,步骤简单如下: 输入目标 API 地址 (浏览器自动重定向到 SSO 登陆页面) 输入用户名密码登陆 (浏览器重定向回到 API 地址,并附带认证信息) 获取目标 API 的资源信息 其中需要用户操作的是步骤 1 和步骤 3。 但要求是用 Java...

Mybatis 批量插入 Oracle 记录

基本环境 语言:Java 8 数据库:Oracle ORM 框架:MyBatis 3.4.5 需求 批量插入数据,数据需要有自增 id。每次插入有一个唯一的 sessionId 来标记这些记录,插入完成之后返回这个 sessionId。 方案 循环插入单条记录,伪代码: 1 2 3 4 5 int sessionId = dao.querySessionId(); for (R...

Redis 频繁加载数据的问题排查

背景 监控是系统的重要模块,我们给产线的 Redis 机器配置了全方位的监控,包括机器性能指标测试以及 Redis 服务测试等等。今天收到了 PagerDuty 告警,报告说 Redis 服务间歇性异常。 问题描述 Redis 是一个集群,三主三从,每个节点各配置了一个监控,监控的测试逻辑大致是,用 INFO,CLUSTER SLOTS,CLUSTER NODES 等命令查看节点以及集群的...

Typecho搬家笔记

背景 由于云主机马上就要到期了,所以最近对比了几家云服务器提供商。最终决定尝试一下 UCloud。于是不得不把原博客(typecho)迁移过来。下面是流水账式地记录一下过程。 过程记录 本想尝试按照以前的笔记重新搭建一套环境,然后再把数据导过来,但是一想到这一长串的步骤,以及可能碰到的问题就头疼,于是决定构建一个基于容器的 LNMP 环境,一劳永逸,也方便日后继续做博客迁移。当然如果有同学...

用 ThreadGroup 记录线程创建链路

背景 我们维护一个监控平台,平台跑着各种各样的插件来测试不同的场景。平台捕获插件的标准输出来得到日志,获取退出码来知道运行结果。 Java 插件就是一个可执行的 .jar 文件,它会被加载到平台的 JVM 中,运行在一个线程池里面。针对 Java 插件,我们提供了一个 SDK 给客户以降低开发难度,主要包括一些工具方法,定义标准执行流程,异常捕获等功能。 难点 在 Java SDK 中,我...

优化 maven 依赖实践

背景 Maven 是非常优秀的项目管理工具,我们可以方便地在 pom 文件里配置 Java 工程的依赖。但是随着项目的迭代和时间推移,pom 文件在新老需求的不断增删改之下变得越来越臃肿,到后来连自己都不知道哪些是有效依赖。 下面将简单介绍如何用 Maven 插件 maven dependency plugin 来解决这个问题。 maven dependency plugin maven...

漫谈zookeeper watcher单次触发特性

架构师 Hooya 正带领着他的团队着手开发一款高性能分布式协调工具,暂名 zookeeper。 Hooya开场白:同学们,作为一个分布式协调软件,通知功能是必不可少的。今天我们来 brainstorm 一下如何设计咱 zookeeper 的通知机制吧。 攻城狮小A抢先道:这简单呀,不就是实现一个大号的观察者模式嘛,Client 注册 watcher,Server 在数据改动的时候通知 ...

zookeeper的watcher是一次性的吗

zookeeper zookeeper 是流行的高性能分布式协调工具,它提供了分布式环境中需要的命名服务,配置管理,分布式锁,注册中心,Leader 选举等等功能,应用十分广泛。 zookeeper 的 watcher Client 可以在 zookeeper 的节点(znode)上设置监听器(watcher),当节点被修改时,zookeeper 会向客户端发送一个相应的通知。 可以通过 ...

漫谈分布式

前言 互联网时代,分布式是一个绕不过去的话题。本文将谈谈个人对分布式的理解。 何为分布式 维基百科上对分布式系统(Distributed System)的定义如下: A distributed system is a system whose components are located on different networked computers, which commun...

Connection Timeout 问题排查

背景 我们组开发维护了一个 Agent 工程,帮客户采集一些客户有用的网络数据。客户需要下载一个 MSI,然后安装并注册。 问题描述 某个客户下载安装 Agent 之后,提示注册失败。其实 Agent 注册就是一个用户登陆验证服务,然后创建一个 Machine ID 的过程。所谓 Machine ID,就跟用户帐号一样,是 Agent 的一个唯一标识。注册的流程大致如下: 注册的主...