摘要:如何编写一个 SendFile 服务器 前言 之前讨论零拷贝的时候,我们知道,两台机器之间传输文件,最快的方式就是 send file,众所周知,在 Java 中,该技术对应的则是 FileChannel 类的 transferTo 和 transferFrom 方法。 在平时使用服务器的时候,比如 阅读全文
posted @ 2019-10-29 14:03 莫那-鲁道 阅读 (35) 评论 (0) 编辑
摘要:当前的大部分 Java web 容器基于 Bio 线程模型,例如常见的 tomcat ,默认 200 线程,即 200 连接。由此带来的问题是,如果想提高并发,或者提高资源利用率,就得加大线程数。 如下图: 于是出现了类 Netty 的 Reactor 线程模型。同时,Java 官方也设计了 Ser 阅读全文
posted @ 2019-06-02 15:55 莫那-鲁道 阅读 (568) 评论 (6) 编辑
摘要:前言 零拷贝这三个字,一直是服务器网络编程的关键字,任何性能优化都离不开。在 Java 程序员的世界,常用的零拷贝有 mmap 和 sendFile。那么,他们在 OS 里,到底是怎么样的一个的设计?本文将简单聊聊 mmap 和 sendFile 这两个零拷贝。 传统数据读写的劣势 初学 Java 阅读全文
posted @ 2019-06-01 18:49 莫那-鲁道 阅读 (284) 评论 (1) 编辑
摘要:前言 canal 是什么? 引用一下官方回答: 阿里巴巴mysql数据库binlog的增量订阅&消费组件 canal 能做什么? 基于日志增量订阅&消费支持的业务: 1. 数据库镜像 2. 数据库实时备份 3. 多级索引 (卖家和买家各自分库索引) 4. search build 5. 业务cach 阅读全文
posted @ 2019-02-26 17:26 莫那-鲁道 阅读 (390) 评论 (1) 编辑
摘要:上周晚上,某环境 ES 出现阻塞, 运行缓慢。于是开始排查问题的过程。 开始 思路:现象是阻塞,通常是 CPU 彪高,导致业务线程分配不到 CPU 时间片,或者内存吃紧,频繁 GC 导致的 STW。 登录到目标服务器,由于 ES 的用户不是 LZ,因此找运维要了 root 权限,登录到服务器。sud 阅读全文
posted @ 2019-01-25 12:50 莫那-鲁道 阅读 (756) 评论 (2) 编辑
摘要:目录 1. 三个状态 Raft 设计了 3 个状态,用于表示节点的状态,分别是跟随者,候选者,领导者。 3 个角色的转换关系和流程: 可以看到,这张图里的几个概念: 2. 什么是任期 目录: 背景:由于机器的物理时间是不可靠的,所以需要一个逻辑时间。称之为任期(term)。 从 2 个阶段开始说起: 阅读全文
posted @ 2019-01-19 14:29 莫那-鲁道 阅读 (443) 评论 (2) 编辑
摘要:前言 像我这样的菜鸟,总会有各种疑问,刚开始是对 JDK API 的疑问,对 NIO 的疑问,对 JVM 的疑问,当工作几年后,对服务的可用性,可扩展性也有了新的疑问,什么疑问呢?其实是老生常谈的话题:服务的扩容问题。 正常情况下的服务演化之路 让我们从最初开始。 1. 单体应用 每个创业公司基本都 阅读全文
posted @ 2019-01-16 09:14 莫那-鲁道 阅读 (1182) 评论 (1) 编辑
摘要:本文旨在讲述如何使用 Java 语言实现基于 Raft 算法的,分布式的,KV 结构的存储项目。该项目的背景是为了深入理解 Raft 算法,从而深刻理解分布式环境下数据强一致性该如何实现;该项目的目标是:在复杂的分布式环境中,多个存储节点能够保证数据强一致性。 阅读全文
posted @ 2019-01-12 12:49 莫那-鲁道 阅读 (1350) 评论 (2) 编辑
摘要:如果面试官问你:你了解 Java 内存模型吗?你怎么回答? 阅读全文
posted @ 2018-10-21 21:19 莫那-鲁道 阅读 (1146) 评论 (3) 编辑
摘要:读梁飞博客和其分享的 PPT 总结笔记。期待和对此感兴趣的人一起讨论 :) 阅读全文
posted @ 2018-10-20 23:19 莫那-鲁道 阅读 (1784) 评论 (2) 编辑
摘要:谈谈中间件开发 阅读全文
posted @ 2018-10-20 17:02 莫那-鲁道 阅读 (5550) 评论 (9) 编辑
摘要:本人开源项目 Lu-Rpc 阅读全文
posted @ 2018-10-16 22:08 莫那-鲁道 阅读 (482) 评论 (4) 编辑
摘要:目录: 1. 粘包 & 拆包及解决方案 ByteToMessageDecoder 2. 基于长度编解码器 3. 基于分割符的编解码器 4. google 的 Protobuf 序列化介绍 5. 其他的 前言 Netty 作为一个网络框架,对 TCP 连接中的问题都做了全面的考虑,比如粘包拆包导致的半 阅读全文
posted @ 2018-10-13 21:39 莫那-鲁道 阅读 (370) 评论 (0) 编辑
摘要:前言 即使这是一本小册,但基于“不提笔不读书”的理念,仍然有必要总结一下。此小册对于那些“硬杠 Netty 源码 却不曾在千万级生产环境上使用实操”的用户非常有用。当然,对那些没有 Netty 编程经验的人来说,更为有用。 放个小册地址: "[Netty 入门与实战:仿写微信 IM 即时通讯系统" 阅读全文
posted @ 2018-10-13 21:38 莫那-鲁道 阅读 (749) 评论 (0) 编辑
摘要:广义的 IOC IoC(Inversion of Control) 控制反转,即“不用打电话过来,我们会打给你”。 两种实现: 依赖查找(DL)和依赖注入(DI)。 IOC 和 DI 、DL 的关系(这个 DL,Avalon 和 EJB 就是使用的这种方式实现的 IoC): DL 已经被抛弃,因为他 阅读全文
posted @ 2018-10-12 16:40 莫那-鲁道 阅读 (3309) 评论 (3) 编辑
摘要:Spring AOP ,SpringMVC ,这两个应该是国内面试必问题,网上有很多答案,其实背背就可以。但今天笔者带大家一起深入浅出源码,看看他的原理。以期让印象更加深刻,面试的时候游刃有余。 Spring AOP 原理 简单说说 AOP 的设计: 1. 每个 Bean 都会被 JDK 或者 Cg 阅读全文
posted @ 2018-10-12 16:39 莫那-鲁道 阅读 (1460) 评论 (2) 编辑
摘要:前言 由于 Cglib 本身的设计,无法实现在 Proxy 外面再包装一层 Proxy(JDK Proxy 可以),通常会报如下错误: 错误来源代码: net.sf.cglib.proxy.Enhancer generateClass(ClassVisitor v) 通过 dump 出来的字节码查看 阅读全文
posted @ 2018-10-05 08:43 莫那-鲁道 阅读 (381) 评论 (0) 编辑
摘要:目录 1. Redis 特性 2. 使用场景 3. 初次使用 安装(Linux) 配置 启动 redis 的 3 种方法 使用 redis 客户端 关闭 redis 服务 4. Redis 版本说明 5. 引用 1 Redis 特性 1. 速度快(基于内存,C 语言,单线程) 2. 基于 key v 阅读全文
posted @ 2018-08-15 08:40 莫那-鲁道 阅读 (177) 评论 (0) 编辑
摘要:目录 1. UI 界面 2. Portal 服务 3. admin 服务 4. 总结 1. UI 界面 2. Portal 服务 当我们点击上面的发布按钮的时候,调用的当然是 portal 的接口。具体代码如下: 接口职责不多:是否符合紧急发布的数据校验,调用 Service, 发布“配置发布”事件 阅读全文
posted @ 2018-08-15 08:35 莫那-鲁道 阅读 (636) 评论 (1) 编辑
摘要:目录 1. Controller 层 2. Service 层 publish 方法 3. 发送 ReleaseMessage 消息 4. 总结 1. Controller 层 主版本发布即点击主版本发布按钮: 具体接口位置: 包下 实际上灰度版本发布也是调用这个接口的。 代码: 该层主要做了 2 阅读全文
posted @ 2018-08-05 22:36 莫那-鲁道 阅读 (591) 评论 (0) 编辑