研究网卡地址注册时的一点思考

我曾经写过一篇和本文标题类似的文章《研究优雅停机时的一点思考》,上文和本文都有一个共同点:网卡地址注册和优雅停机都是一个很小的知识点,但是背后牵扯到的知识点却是庞大的体系,我在写这类文章前基本也和大多数读者一样,处于“知道有这么个东西,但不了解细节”的阶段,但一旦深挖,会感受到其中的奇妙,并有机会接触到很多平时不太关注的知识点。

另外,我还想介绍一个叫做”元阅读“的技巧,可能这个词是我自己造的,也有人称之为”超视角阅读“。其内涵指的是,普通读者从我的文章中学到的是某个知识点,而元阅读者从我的文章中可能会额外关注,我是如何掌握某个知识点的,在一个知识点的学习过程中我关注了哪些相关的知识点,又是如何将它们联系在一起,最终形成一个体系的。这篇文章就是一个典型的例子,我会对一些点进行发散,大家可以尝试着跟我一起来思考”网卡地址注册“这个问题。

查看更多

分享到

【Dubbo3.0新特性】集成RSocket,新增响应式支持

响应式编程

响应式编程现在是现在一个很热的话题。响应式编程让开发者更方便地编写高性能的异步代码,关于响应式编程更详细的信息可以参考 http://reactivex.io/ 。很可惜,在之前很长一段时间里,Dubbo 并不支持响应式编程,简单来说,Dubbo 不支持在 rpc 调用时,使用 Mono/Flux 这种流对象(reactive-stream 中流的概念),给用户使用带来了不便。

RSocket 是一个支持 reactive-stream 语义的开源网络通信协议,它将 reactive 语义的复杂逻辑封装了起来,使得上层可以方便实现网络程序。RSocket 详细资料:http://rsocket.io/。

Dubbo 在 3.0.0-SNAPSHOT 版本里基于 RSocket 对响应式编程提供了支持,用户可以在请求参数和返回值里使用 Mono 和 Flux 类型的对象。下面我们给出使用范例,源码可以在文末获取。

查看更多

分享到

Dubbo2.7 三大新特性详解

1 背景介绍

自 2017 年 7 月阿里重启 Dubbo 开源,到目前为止 github star 数,contributor 数都有了非常大的提升。2018 年 2 月 9 日阿里决定将 Dubbo 项目贡献给 Apache,经过一周的投票,顺利成为了 Apache 的孵化项目,也就是大家现在看到的 Incubator Dubbo。预计在 2019 年 4 月,Dubbo 可以达成毕业,成为 Apache 的顶级项目。

查看更多

分享到

一文探讨堆外内存的监控与回收

引子

记得那是一个风和日丽的周末,太阳红彤彤,花儿五颜六色,96 年的普哥微信找到我,描述了一个诡异的线上问题:线上程序使用了 NIO FileChannel 的 堆内内存(HeapByteBuffer)作为缓冲区,读写文件,逻辑可以说相当简单,但根据监控,却发现堆外内存(DirectByteBuffer)飙升,导致了 OutOfMemeory 的异常。

由这个线上问题,引出了这篇文章的主题,主要包括:FileChannel 源码分析,堆外内存监控,堆外内存回收。

查看更多

分享到

Dubbo 的前世今生 & Dubbo Meetup 南京

Dubbo 的前世今生

2011 年 10 月 27 日,阿里巴巴开源了自己的 SOA 服务化治理方案的核心框架 Dubbo,服务治理和 SOA 的设计理念开始逐渐在国内软件行业中落地,并被广泛应用。自开源后,许多非阿里系公司选择使用 Dubbo,其中既有当当网、网易考拉等互联网公司,也有中国人寿、青岛海尔等传统企业。

查看更多

分享到

Java文件IO操作之DirectIO

在前文《文件IO操作的一些最佳实践》中,我介绍了一些 Java 中常见的文件操作的接口,并且就 PageCache 和 DIrect IO 进行了探讨,最近我自己封装了一个 Direct IO 的库,趁着这个机会,本文重点谈谈 Java 中 Direct IO 的意义,以及简单介绍下我自己的轮子。

查看更多

分享到

一致性哈希负载均衡算法的探讨

前言

一致性哈希算法在很多领域有应用,例如分布式缓存领域的 MemCache,Redis,负载均衡领域的 Nginx,各类 RPC 框架。不同领域场景不同,需要顾及的因素也有所差异,本文主要讨论在负载均衡中一致性哈希算法的设计。

在介绍一致性哈希算法之前,我将会介绍一些哈希算法,讨论它们的区别和使用场景。也会给出一致性哈希算法的 Java 通用实现,可以直接引用,文末会给出 github 地址。

友情提示:阅读本文前,最好对一致性哈希算法有所了解,例如你最好听过一致性哈希环这个概念,我会在基本概念上缩短篇幅。

查看更多

分享到

定时器的几种实现方式

1 前言

在开始正题之前,先闲聊几句。有人说,计算机科学这个学科,软件方向研究到头就是数学,硬件方向研究到头就是物理,最轻松的是中间这批使用者,可以不太懂物理,不太懂数学,依旧可以使用计算机作为自己谋生的工具。这个规律具有普适应,看看“定时器”这个例子,往应用层研究,有 Quartz,Spring Schedule 等框架;往分布式研究,又有 SchedulerX,ElasticJob 等分布式任务调度;往底层实现看,又有多种定时器实现方案的原理、工作效率、数据结构可以深究…简单上手使用一个框架,并不能体现出个人的水平,如何与他人构成区分度?我觉得至少要在某一个方向有所建树:

  1. 深入研究某个现有框架的实现原理,例如:读源码
  2. 将一个传统技术在分布式领域很好地延伸,很多成熟的传统技术可能在单机 work well,但分布式场景需要很多额外的考虑。
  3. 站在设计者的角度,如果从零开始设计一个轮子,怎么利用合适的算法、数据结构,去实现它。

回到这篇文章的主题,我首先会围绕第三个话题讨论:设计实现一个定时器,可以使用什么算法,采用什么数据结构。接着再聊聊第一个话题:探讨一些优秀的定时器实现方案。

查看更多

分享到

提问前,请先让自己成为值得被教的人

每一个不恰当的提问都在消耗别人对你的耐心,程序员届早已经有了诸如《提问的智慧》之类的经典文章介绍了什么是蠢问题,如何避免问蠢问题。然而,常年混迹于十几个技术交流微信群的我,发现很多小白程序员并不懂得这一点,为改善微信群的技术交流氛围,转此文,意图是让大家在担任提问者的角色时,尽可能提高提问的素质,让自己成为值得被教的人。

原文出处:https://github.com/aptx4869yuyang2017/How-To-Ask-Questions-The-Smart-Way

查看更多

分享到

一种心跳,两种设计

1 前言

在前一篇文章《聊聊 TCP 长连接和心跳那些事》中,我们已经聊过了 TCP 中的 KeepAlive,以及在应用层设计心跳的意义,但却对长连接心跳的设计方案没有做详细地介绍。事实上,设计一个好的心跳机制并不是一件容易的事,就我所熟知的几个 RPC 框架,它们的心跳机制可以说大相径庭,这篇文章我将探讨一下如何设计一个优雅的心跳机制,主要从 Dubbo 的现有方案以及一个改进方案来做分析

查看更多

分享到