爱吃芒果

Grpc源码分析

gprc流程概括

/posts/grpc-in-practice/grpc%E6%B5%81%E7%A8%8B%E6%A6%82%E6%8B%AC.png

grpc的流程可以大致分成两个阶段,分别为grpc连接阶段和grpc交互阶段,如图所示(此图来自后面的参考文献)。

在RPC连接阶段,client和server之间建立起TCP连接,grpc底层依赖于HTTP2,因此client和server还需要协调frame的相关设置,例如frame的大小,滑动窗口的大小等。

Java线程池源码分析

阅前提示

参考文献中的文章非常的好,基本看完了就能理解很多东西,推荐阅读

源码中也提供了很多注释文本,推荐对照源码学习。

重要概念和接口

Runnable 接口

@FunctionalInterface
public interface Runnable {
    public abstract void run();
}

线程可以接受一个实现 Runnable 接口的对象,并执行对应的逻辑。

Spark开发环境搭建

通过如下的方法在idea中配置spark开发环境,最后和一般的java项目一样,使用maven面板的 clean和package进行编译。

我实际使用的编译器为java17,idea会提示配置scala编译器。

Spark内存管理

关键问题

  1. 内存被分成哪些区域,各分区之间的关系是什么,通过什么参数控制

  2. 内存上报和释放的单位是什么,上报和释放是如何实现的

  3. 如何避免内存没有释放导致资源泄露

  4. 如何避免重复上报和漏上报问题

k8s 存储

Pods

Pod 是 Kubernetes 中最小的可部署计算单元,你可以创建和管理它们。

Pod(类似于一群鲸鱼的“pod”或豌豆荚“pea pod”) 是一组一个或多个容器,这些容器共享存储和网络资源,并且有一个规范来定义如何运行它们。Pod 内部的内容始终是 共同调度(co-scheduled)并在相同的上下文中运行 的。Pod 充当一个特定应用的“逻辑主机”(logical host):它包含一个或多个 相对紧密耦合的应用容器。在非云环境下,运行在同一台物理机或虚拟机上的应用程序,可以类比于在 Kubernetes 中运行在同一逻辑主机上的应用。