k8s :kube-apiserver RESTful API 实现 - Storage

2018-03-30
阅读 3 分钟
10.9k
了解 k8s 的同学都知道,kube-apiserver 对外提供 RESTful API 接口提供 查询,监听集群(资源)状态的服务,kube-apiserver 主要就做一件事,就是如何将 RESTful API (CREATE, DELETE, UPDATE, GET .etc)接口调用映射到对后端存储(比如 etcd)的(增删改查)访问,在设计的时候考虑到 k8s 是个快速迭代的开源项目,...

k8s :kube-apiserver 访问 etcd 后端存储

2018-03-30
阅读 2 分钟
9k
Interface offers a common interface for object marshaling/unmarshaling operations and hides all the storage-related operations behind it(原文注释)

Jetty : Embedded Server 启动流程 - 2

2018-03-27
阅读 5 分钟
2.8k
本文接着 Jetty : Embedded Server 启动流程 - 1往下讲,上回说到 Server.start 调用 Connector.start 方法,开始接收和处理请求,Server 默认使用 Connector 的子类 SelectChannelConnector,所以我们重点来看看 SelectChannelConnector 的具体实现

k8s :kube-apiserver 启动流程 - 2

2018-03-24
阅读 3 分钟
5.1k
前言 文章字数一多,在线编辑不方便,本文是 k8s:kube-apiserver 启动流程的第2部分传送门:k8s :kube-apiserver 启动流程 - 1 回顾 上回讲到 Run 方法: {代码...} 目前系统中有以下 api server: CustomResourceDefinitions Master APIAggregator 每个 api server 都对应一个 Config(配置) apiextensionsapiserver....

k8s :kube-apiserver 启动流程 - 1

2018-03-24
阅读 5 分钟
7.4k
看 k8s 源代码有一段时间,总感觉在迷宫里乱窜,有时候觉得终于找到出口了,一下子又撞墙了,总结下来还是自己的内功不够深厚,本文是对 kube-apiserver Legacy(遗留,即将废弃)API 初始化流程(以及数据结构)的一个梳理,算是做个"路标",便于以后在"迷宫"中还能找到回来的路

Jetty : Embedded Server 启动流程 - 1

2018-03-21
阅读 7 分钟
3.7k
本文基于 Jetty 8.1.x 版本简单介绍 Jetty Embedded Server 核心概念,线程模型,启动流程。以下代码片段摘自 Jetty 源代码 中的 example-jetty-embedded 模块的 OneServletContext.java

k8s :构建系统

2018-03-17
阅读 4 分钟
3.1k
make 在源代码根目录 Makefile 文件中定位到 quick-release 目标,该目标的动作是执行 build/release.sh 脚本

k8s :部署

2018-03-15
阅读 2 分钟
3.2k
前言 k8s 集群部署是个老生常谈的问题,网上资料一大把,各路大神祭出了各种方案: 使用 linux 发行版提供的包管理器(比如 centos yum) 使用 第三方工具包(脚本) 使用 第三方二次开发包 本文介绍在 浏览 k8s 源代码过程中发现的 k8s 的一种半手工的部署方法 源头 浏览源代码的过程中发现有这么个目录 {代码...} 一看就...

k8s :源代码导入

2018-03-15
阅读 1 分钟
5.7k
最近在调研 Google kubernetes 开源的容器编排平台,刚好也在学习 Go 语言,所以想看看 Google 这样的大厂是怎么撸 Go 语言的,本文简单介绍如何下载 k8s 源代码,导入 Idea GoLand(对,我是搞 Java的~),对于这么庞大的项目,没有 IDE 看起来还是很费劲的,当然牛人除外

k8s :从源代码构建 二进制 安装包

2017-12-29
阅读 2 分钟
5.4k
如果直接构建的话会发现会卡在那动不了,原因是构建脚本会从 gcr(google container registry)拉取构建需要的基础镜像,而且是强制拉取...,如果没有 VPN 的话就悲剧了。有两种方法:

Mybatis:一种 Redis 缓存实现

2017-04-12
阅读 5 分钟
5k
通过使用 Cache 注解来标注哪些数据库访问(select)需要缓存,prefix 属性设置 Redis key 前缀,这样做的好处是将缓存的实现和业务逻辑分开,可扩展性强

Maven 工程实践

2017-03-23
阅读 6 分钟
2.7k
前言 虽然 Gradle 势头很猛,但是 Maven 依然是 Java 项目构建的优先选择,本文简要介绍一些 Maven 工程实践 多模块(multiple module) 如果工程比较复杂,或者预期后续会变的比较复杂,可以将工程分成多个模块,常用的分模块的方法: core,核心代码) util/common,工具 service,服务 web/front,web 前端 在 root(...

Jedis 源代码分析:客户端设计与实现的套路

2017-03-17
阅读 5 分钟
3.7k
要访问(Redis)服务,首先需要与服务建立连接,因此客户端库首先需要对连接进行抽象和封装,Jedis 使用 Connection 类来封装与服务器的一个 socket 连接:

Log42j 源代码分析:日志回滚

2017-03-16
阅读 4 分钟
3.8k
initialize 方法用于初始化策略,isTriggeringEvent 方法用于判断是否需要回滚,TriggeringPolicy 接口的不同实现类对应不同的策略

Log42j 源代码分析:plugin(插件)机制

2017-03-13
阅读 4 分钟
9k
前言 log4j2 使用插件机制加载各种组件:appender, logger .etc,本文简要分析 log4j2 插件机制实现 Plugin Annotation(注解) Plugin 注解提供了一种便捷的方法将一个类声明成 log4j2 的插件,比如 {代码...} name,name of the plugin category, category to place the plugin under name of the corresponding categ...

OpenJDK9 Hotspot : synchronized 浅析

2017-03-01
阅读 6 分钟
6.4k
网上各路大神总结过各种关于 hotspot jvm synchronized 内部实现,看别人的文章总觉得不过瘾,所以有了这篇文章,尝试再扒一次 synchronized 的“底裤”

LeetCode 241 - Different Ways to Add Parentheses

2017-02-27
阅读 3 分钟
2.3k
Given a string of numbers and operators, return all possible results from computing all the different possible ways to group numbers and operators. The valid operators are +, - and *

OpenJDK9 Hotspot : Object wait/notify 方法浅析

2017-02-24
阅读 4 分钟
3.8k
Object wait/notify 方法是早期 JVM 提供的一种基于 Object Monitor 的线程同步方法,本文先介绍相关的数据结构(类),然后从 wait/notify 方法的内部实现入手,简单分析 Object Monitor 相关的原理和实现

OpenJDK9 Hotspot : Thread

2017-02-24
阅读 3 分钟
3.3k
前言 本文从 Java Thread 类的 start 方法的内部实现入手,分析 Hotspot JVM 多线程相关的数据结构(类)和原理 Thread 类 start 方法 Thread 类的 start 方法用于启动线程,方法内部调用了 native 方法 start0 {代码...} 在 openjdk 源代码中搜索 start0,可以看到 start0 对应 JVM_StartThread native 函数 {代码...} ...

LeetCode 236 - Lowest Common Ancestor of a Binary Tree

2017-02-21
阅读 1 分钟
2.4k
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree

OpenJDK9 Hotspot :Zero 解释器 - 字节码 new

2017-02-19
阅读 2 分钟
4.2k
前言 本文结合 zero 解释器窥探 字节码 new 的实现逻辑,相关概念可以参考之前的文章 opcode new 参考之前的文章,可以在 bytecodeInterpreter.cpp 文件中找到字节码 new 对应的 case 语句块: {代码...} 可以看到大致有两条执行路径 fast case allocation,要创建对象的类已经加载 slow case allocation,要创建对象的...

OpenJDK9 Hotspot :Zero 解释器 - BytecodeInterpreter

2017-02-19
阅读 3 分钟
4.1k
本文简要介绍 hotspot zero 解释器中 BytecodeInterpreter 类解释执行字节码过程,用到的相关的概念可以参考之前关于 zero 解释器相关的文章

OpenJDK9 Hotspot :Zero 解释器 - Stack & Frame

2017-02-19
阅读 4 分钟
4.8k
虚拟机在解释执行字节码的时候一个重要的抽象就是要模拟 堆栈(Stack) 以及函数(方法)调用的栈帧(Frame),本文简要介绍 Zero 解释器中关于 Stack 和 Frame 的具体实现,相关源代码:

LeetCode - 292 Nim Game

2017-02-17
阅读 1 分钟
1.6k
问题 思路 提交 TLE {代码...} O(n) 时间复杂度,直接 TLE 了!好吧,稍微归纳一下实际上很简单 O(1) {代码...}

LeetCode - 496 Next Greater Element I

2017-02-16
阅读 2 分钟
2.3k
You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of nums2. Find all the next greater numbers for nums1's elements in the corresponding places of nums2.

OpenJDK9 Hotspot :oops,klass 与 handle

2017-02-15
阅读 7 分钟
4.9k
前言 Klass A Klass provides: language level class object (method dictionary etc.) provide vm dispatch behavior for the object both functions are combined into one c++ class 说白了 Klass 就是 Java 中的类在 JVM 中的内部表示 类层次结构 {代码...} MetaspaceObj 类重载了 new 运算符来保证 Klass 分配在 me...

OpenJDK9 Hotspot : ClassLoader

2017-02-15
阅读 5 分钟
2.4k
The entire input stream is present in a buffer allocated by the caller.The caller is responsible for deallocating the buffer and for using ResourceMarks appropriately when constructing streams

LeetCode 500 - Keyboard Row

2017-02-15
阅读 4 分钟
2.2k
Given a List of words, return the words that can be typed using letters of alphabet on only one row's of American keyboard like the image below.

OpenJDK9 Hotspot 虚拟机内部对象内存管理

2017-02-14
阅读 2 分钟
3.3k
C++ 语言可以精确控制对象内存分配,出于性能考虑 C++ 框架 or 系统程序基本都会自己 "造轮子" 开发各种内存管理模块. hotspot 也不例外,它通过 new 和 delete 方法的访问级别以及重载 new 和 delete 方法来管理虚拟机内部 C++ 对象的内存.

OpenJDK9 Hotspot Ubuntu 编译和调试

2017-02-14
阅读 3 分钟
6.4k
前言 源代码下载 如果使用 hg 下载源代码会很漫长而且经常掉线,可以使用 github 上的源代码镜像 {代码...} 构建 configure 在构建之前建议仔细阅读源代码目录下的 README-builds.html or README-builds.md 文件 {代码...} configure 错误输出很 nice,如果缺少库,使用 apt install 即可,例如: {代码...} 配置完成后...