0%

RPC 轮子源码地址:https://github.com/killlowkey/rpc-server

RPC(remote produce call)是一个计算机协议,广泛用于分布式系统。该协议允许当前计算机程序去调用其它计算机的程序,就像调用本地方法一样,用户无需关注底层实现的细节。

最近造了个 RPC 框架轮子,通过造轮子来学习 RPC 。并阅读开源 RPC 框架源码,借鉴其优秀的设计,来发现自己设计不足,从而提升工程能力。

造完轮子后,对其整体设计进行复盘,自己得到了些感悟,通过这篇文章来记录 RPC 框架设计思路。

阅读全文 »

Arthas 是 Alibaba 开源的 Java 诊断工具,开发者无需修改代码或重启 JVM 就可以排查生产环境问题,本质上使用 agent 机制,动态的修改字节码,从而实现插桩。

本文会对 Arthas 启动流程分析,从启动流程来理解 Arthas 工作原理。

阅读全文 »

jclasslib 是一款字节码编辑工具,可以对 class 字节码进行可视化操作。

jclasslib 提供 Attach To Running JVM 操作,用于查看与修改系统运行的 JVM 加载的类。该功能借助了 Agent 和 JMX,Agent 负责将对应的 MBean 注册到 JMX 中,通过 JMX 通讯协议调用其 MBean 操作。

阅读全文 »

ja-netfilter 是一款 JavaAgent 框架,而 JavaAgent 是由 Java 提供一种动态代理机制,可以在 runtime 时修改 Class 字节码,从而实现代码注入操作。

ja-netfilter 对底层操作进行封装,提供插件系统(Plugin System)机制来向外部暴露简易的接口,使得注入操作更加的简单。

阅读全文 »

Write Ahead Log(预写日志) 简称 WAL,用于记录程序内部操作,在程序奔溃恢复后,可以根据 WAL 来恢复程序原先的状态。

WAL 与日志框架设计有异曲同工之处,两者目标都是为了持久化数据,只不过两者用处不同罢了。本文会对 Golang 的 WAL 库进行分析,从而来学习 WAL 如何设计与优化。

阅读全文 »

日志框架作为大型系统最基础的组件之一,用于快速定位和分析程序的问题。当项目采用多线程编程时,调试变的异常困难,在合适的地方打上日志,可以提高解决问题的效率。在分布式系统中,进行分布式追踪也要依靠日志框架。

阅读全文 »

本文对应的 easy-ws 源码地址:https://github.com/killlowkey/easy-ws

WebSocket(简写:WS)是基于 TCP 连接的全双工通信的协议,WS 协议在现实场景中用的很多,比如服务端和客户端之间互相推送数据。TCP 位于传输层,来保证我们的字节流数据可以稳定传输,而 WS 是位于应用层的协议,所谓的协议就是针对不同场景而诞生的东西,说白了协议就是服务端与客户端交互的方式。

阅读全文 »

panic!

不可恢复的错误

Rust 错误处理概述

Java 通过try-catch 来处理错误,而在 Rust 并没有类似的异常机制

  • Rust 的可靠性:错误处理
    • 大部分情况下:在编译时提示错误,并处理
阅读全文 »