一年时间,减肥成功,撒花,感谢妹子去年送我学游泳!
Java NIO epoll bug 以及 Netty 的解决之道
发表于
|
更新于
|
分类于
Java
最近学习 Netty 时,看到 Netty 宣称解决了很多 Java 原生 NIO 的很多 bug,其中之一是 epoll 空轮询导致 CPU 利用率 100%。
MongoDB 超时配置
发表于
|
更新于
|
分类于
数据库
MongoDB 有很多超时配置,虽然它们都有各自的默认值,但为了提升应用的及时响应性、性能等,有时需根据实际情况进行修改。
不同语言、同一语言不同版本的驱动,对同一配置可能采用不同的默认值,细节需要查阅文档。
以下是比较常用的 3 个:
- 服务器选择超时;
- 连接超时;
- Socket 超时;
为什么单机应用有时也“应该”拆分为多个容器?
发表于
|
更新于
|
分类于
容器
分布式系统容器化为多个容器容易理解,但为什么单机应用有时也需要拆分为多个容器呢,直接放到一个容器中不行吗?
首先,明确下应用容器化目的:
- 资源隔离(CPU & 内存)
- 管理隔离(不同镜像由不同团队负责)
- 关注点分离(每个容器仅做一件事,并将其做好)
因此,如果单机应用有以上需求,就需要考虑将其拆分为多个容器。
当然,单机应用拆分为多个容器后,并非就变成分布式系统了,因为拆分后的容器通常借助 Kubernetes 的 Pod 运行在 同一物理节点 上,因此依然可视之为单机应用,只不过该应用现在由多个进程(容器)组成。
Kafka Streams 优雅停机
发表于
|
分类于
技术
很多框架要求应用(正常 or 异常)退出时,显式进行“善后”处理,如释放资源、防止数据不一致、主动告知自己死亡,避免被动检测带来的时间浪费等等。
下面以 Kafka Streams 为例介绍如何实现优雅停机。
应用关闭后,应显式关闭 Kafka Streams 线程,以防止数据不一致、进行 task 迁移等:
1 | // KafkaStreams#close() |
为实现优雅停机,以上代码应该放到 shutdown 钩子中:
1 | Runtime.getRuntime().addShutdownHook(new Thread(archiveStreams::close)); |
基于 Quorum 的投票机制
发表于
|
更新于
|
分类于
分布式
quorum [ˈkwɔ:rəm],法定人数
Quorum 机制是一种投票算法,核心思想是:
执行某操作之前,必须先获取足够的票数。
在分布式系统中,Quorum 投票有两种常见用法:
- 副本读写控制:保证同一数据的多个副本在每一时刻,只能用于读 or 写;
- 事务提交协议:存在网络分区时,保证分布式事务的原子性;