自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 收藏
  • 关注

转载 Nacos Config源码分析(四)- 客户端

Nacos Config服务的client也在nacos-client.jar包中,通过ConfigService接口来获取/监听/发布/删除配置项。 config client为了做到高可用,会在本地文件系统中缓存配置项。本地缓存的配置项又分为两大类: failover缓存 - 可...

2019-08-08 19:07:00 292

转载 Nacos Config源代码分析(三) - 配置监听

Nacos Config客户端通过http长轮询请求来订阅配置变更。Server支持两种形式的长轮训机制: 固定间隔轮训(Fixed Polling)- 每次长轮询的时间是固定的,在固定间隔轮询时间结束后,计算期间发生的配置变更,返回group keys。 非固定间隔轮训 - 长轮...

2019-08-08 19:05:00 938

转载 Nacos Config源代码分析(二) - 核心类结构

Nacos Config Server核心类如下图: PersistService - 数据库访问服务,封装了所有SQL操作 ConfigService - 本地文件 & 内存Cache 数据结构维护 DumpService - 通过PersistService & ...

2019-08-08 19:01:00 552

转载 Nacos Config源代码分析(一) - 存储模型

Nacos Config提供了配置管理的功能,它允许用户在nacos上配置key-value对,并在客户端订阅需要的配置。当配置发生变更时,订阅的客户端会获得通知,随后拉取最新的key-value对。 Config Server为了最大程度保证可用性采用了一种三层的存储架构设计,mysql ...

2019-08-08 18:58:00 607

转载 Nacos Naming源码分析(五)- 客户端

Nacos Naming客户端核心代码封装nacos-client包内,主要通过NamingService接口来实现服务的注册/发现等一系列操作。client会在内存中保存订阅的所有服务的信息,并通过UDP协议接受来自server的更新。client相关的核心类如下图: HostR...

2019-08-08 18:03:00 286

转载 Nacos Naming源码分析(四)- 活跃检测

临时服务实例在注册到naming server上之后,会周期性得发送心跳信息来保持节点的活跃。同时,naming server会周期性检测每个实例最后一次收到心跳信息的时间戳,摘除超时的节点并通知所有订阅的客户端。 实例活跃性检测的定时任务封装在Service类中,在init方法里启动: ...

2019-08-08 18:03:00 354

转载 Nacos Naming源码分析(三) - 服务管理

Nacos Naming节点会在内存中保存所有服务的Service/Cluster/Instance三层元信息以及用户订阅关系,通过ConsistencyService来持久化并在节点间保持数据一致。naming服务用来做元信息管理的核心类是ServiceManager,核心类关系图如下: ...

2019-08-08 17:51:00 412

转载 Nacos Naming源码分析(二) - 数据模型

Nacos Naming服务提供了Service - Cluster - Instance的一种数据模型。一个service可以包含多个cluster,一个cluster又包含多个instance,相互嵌套形成完整的服务定义。 Naming服务模型类结构如下图: Naming服务提供了...

2019-08-08 17:48:00 225

转载 Nacos Naming源码分析(一)- 持久化存储

Nacos主要包括两个核心服务 - config & naming。config主要用来托管应用配置,naming用作服务发现。Nacos Naming服务引入了一种Service - Cluster - Instance的数据结构模型,用来存储服务的元信息。在Naming服务中实际来...

2019-08-08 17:45:00 1807

转载 Sentinel源代码分析 - 2.主要slot实现

在CtSph.entryWithPriority方法中,会为每种资源分配一个ProcessorSlotChain实例。默认是通过DefaultSlotChainBuilder类来创建相应的slot chain,构造过程如下: public ProcessorSlotChain build()...

2019-07-31 17:50:00 172

转载 Sentinel源代码分析 - 1.流量控制主流程

Sentinel是阿里开源的一个轻量级流量控制框架,它可以从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。 Sentinel相关的介绍文档请参见:https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5 S...

2019-07-31 17:46:00 318

转载 Arthas源代码分析 - 3.cmd集合

Arthas(阿尔萨斯)采用command设计模式来封装核心的操作命令逻辑。用户通过telnet/http协议连接到ShellServerImpl之后,终端上执行的命令都会被解析成AnnotatedCommand子类,之后会被套进ProcessImpl/JobImpl结构中,在合适的环境中被执...

2019-07-31 17:43:00 251

转载 Arthas源代码分析 - 2.shell交互

Arthas(阿尔萨斯)在bootstrap过程中,会在目标java进程内部启动一个shell server。shell server将在特定端口监听telnet/http协议,解析并执行用户发送的命令。 shell相关主要类图如下: ShellServerImpl - shell s...

2019-07-31 17:42:00 421

转载 Arthas源代码分析 - 1. Bootstrap

Arthas(阿尔萨斯,https://github.com/alibaba/arthas)是Alibaba开源的一款Java诊断工具。它支持JDK 6+,以命令行的方式运行。借助Java Instrumentation的能力能够动态attach到一个运行中的java进程上,实时获取JVM信息...

2019-07-31 17:39:00 513

转载 K8S源码分析Scheduler - Scheduler简介

scheduler整体结构比较简单,基本一篇文章就解释清楚了。请参见 https://blog.csdn.net/waltonwang/article/details/54565638 ...

2019-07-31 17:33:00 213

转载 K8S源码分析Kubelet - 6、Pod驱逐

为了保证Node节点的稳定性,当资源(memory/storage)出现紧缺时,kubelet会主动选择驱逐一些Pods来释放资源。实现该功能的组件是Eviction Manager。 当驱逐一个Pod时,kubelet会将pod内的所有containers都kill掉,并把pod的状态设置...

2019-07-31 17:32:00 632

转载 K8S源码分析Kubelet - 5、Pod内部构造

Pod是K8S调度的基本单位,一个Pod中包含了一个Pause容器(根容器)和多个用户容器。Pause容器的状态代表了Pod的状态,同一个Pod中的容器共享相同的ip和数据卷。 因此,Pod的创建首先要构建一个Sandbox,包含pause容器并初始化网络/数据卷等一系列资源。 1.sa...

2019-07-31 17:28:00 178

转载 K8S源码分析Kubelet - 4、cgroups基础

Pod是k8s调度的基本单位。每个Pod拥有自己独立的命名空间、网络接口以及共享磁盘等资源。同一个pod内的containers相互可见,并可以直接通讯。 为了理解Pod如何做到资源的隔离,我们需要了解容器技术依赖的两个Linux内核级功能:namespace & cgroups。 ...

2019-07-31 17:24:00 152

转载 K8S源码分析Kubelet - 3、Pod同步细节

在上文中提到,Pod同步流程是kubelet进程的核心主流程,本文将分析该主流程中最关键的部分--Pod的创建和管理。这部分逻辑封装在kubeGenericRuntimeManager.SyncPod(kuberuntime_manager.go)方法中,主要执行以下步骤: 根据从AP...

2019-07-31 17:24:00 377

转载 K8S源码分析Kubelet - 2、Pod同步流程

1.核心流程 kubelet最核心的功能就是根据master的指示,在节点上创建并管理pod。目前对于kubelet而言,有三种途径来获取所管理的pod清单: 文件 - 通过启动参数–config指定配置目录,定期检查变更。 HTTP Endpoint - 通过--manife...

2019-07-31 17:21:00 424

转载 K8S源码分析Kubelet - 1、Kubelet关键模块

1.运行机制 在k8s集群中,每个node节点上都会运行一个kubelet进程。该进程会处理master下发的任务,定时同步自身的状态并管理Pod。总体来看,kubelet进程主要完成以下几部分工作: 节点管理 - 以固定的时间间隔同步本节点的状态信息到Api Server上。 ...

2019-07-31 17:19:00 199

转载 K8S源码分析Controller Manager - 4、Controller实现的一个例子-ReplicaSetController

Controller的实现基本上都是通过SharedInformer的结构去监听etcd上某种资源的变更,然后再执行对应的业务逻辑。 本文以ReplicaSetController为例,介绍一个controller如何与整个manager组合在一起。 controller启动 cont...

2019-07-31 17:16:00 209

转载 K8S源码分析Controller Manager - 3、Controller Manager启动

Controller Manager启动的过程比较简单,主要就是依次启动各个controllers。 启动的代码在/cmd/kube-controller-manager/app/controllermanager.go中,核心的是Run方法: // Run ru...

2019-07-29 20:40:00 239

转载 K8S源码分析Controller Manager - 2、SharedInformer结构

绝大多数Controller的实现都依赖一种特殊结构-SharedInformer,它主要负责订阅etcd上资源的变更并调用注册的Handlers。 SharedInformer相关的类结构如下图: SharedInformer是一个复杂的嵌套结构,自底向上总共包含四层 Queue ...

2019-07-29 20:38:00 248

转载 K8S源码分析Controller Manager - 1、Controller Manager简介

Controller Manger是K8S内部的控制中心,主要介绍可以参考这篇文档: https://blog.csdn.net/huwh_/article/details/75675761 在Manager内部会为不同的Controller创建不同的协程来监听各自的资源在etcd上的变动...

2019-07-29 20:36:00 309

转载 K8S源码分析API Server - 3、API Server构建

API Server利用GenericAPIServer框架依次创建了api_extension_server\api_server\aggregator_server来处理所有请求,server构建的核心逻辑如下: func CreateServerChain(r...

2019-07-29 20:35:00 257

转载 K8S源码分析API Server - 2、GenericAPIServer

API Server对外提供的是RESTful接口,GenericAPIServer结构主要解决的就是URI路由的问题,即把URI映射到对应的处理逻辑。可以把GenericAPIServer理解为一个微型的mvc框架,它是整个API Server的骨架。 GenericAPIServer相关...

2019-07-29 20:32:00 287

转载 K8S源码分析API Server - 1、API Server简介

关于API Server的整体介绍请参考以下两篇文章: https://blog.csdn.net/huwh_/article/details/75675706 https://blog.csdn.net/u010278923/article/details/79242791 特别摘录第...

2019-07-29 20:29:00 247

转载 ES源代码分析 - 2. ZenDiscovery集群组建

ES采用了自己实现的服务发现/选主机制,被称为ZenDiscovery。ZenDiscovery模块主要解决了三个问题: 选主 在集群刚启动时,所有节点都会向Seed Nodes发送Ping消息。Seed Nodes会保存接收到的所有节点的信息,并通过Ping Response的...

2019-07-27 16:49:00 317

转载 ES源代码分析 - 1. Es启动流程

Elasticsearch的bootstrap代码是我个人到目前为止见过的写得最好的server端启动代码(没有之一),当中包含了大量的自检和环境检测代码,甚至用到了JNA来做OS层面的参数获取和设置。这对于我们写server端代码有很大的参考价值。 ES的启动流程主要包含以下核心类: ...

2019-07-27 16:46:00 1686

转载 ES学习摘要 - 13. Mapping

Mapping定义了一个索引的doc中包含哪些fields,这些fields如何被存储/索引。 Field数据类型包括: 简单类型:text, keyword, date, long, double, boolean, ip 嵌套类型:object, nested 特殊类型:geo_p...

2019-07-27 16:44:00 230

转载 ES学习摘要 - 12. Query DSL

ES提供了一套基于JSON的查询语言,主要包含两种语句: 叶子查询语句 - 具体条件的查询 组合查询语句 - 用来组合不同查询 12.1 Query and filter context query语句可以存在于两种场景中: Query Context - query参数中,出了决...

2019-07-27 16:42:00 117

转载 ES学习摘要 - 7. Search APIs

7.1 Search search API提供两种模式传递查询条件:url参数,request body 所有search API都支持跨索引、跨索引类型进行查询 7.2 URI Search 可以通过url参数传递查询条件,一个例子: GET twitter/_search?q...

2019-07-27 16:41:00 120

转载 ES学习摘要 - 8. Aggregations

ES支持的aggregation操作可以分为四类 Bucketing 每个bucket关联了一个key以及一个条件,所有满足条件的doc都会落入对应的bucket中 Metric 对一组doc进行指标运算 Pipeline 将其他aggregations的结果作为输入再做aggre...

2019-07-27 16:41:00 737

转载 ES学习摘要 - 6. Document APIs

6.1 Reading and Writing documents 一个索引会被切分为多个分片,每个分片会有多个副本。一个分片的所有副本被称为replication group,彼此之间保持同步。 replication group中存在一个主分区(primary shard)。主分区承...

2019-07-27 16:40:00 107

转载 ES学习摘要 - 5. API Conventions

5.1 Multiple Indices 在REST接口需要指定index参数的地方,都可以同时指定多个索引,比如test1,test2,test3,_all,test*,te*t。还可以表达excluce语义,如test*,-test3。 所有索引类API都支持以下几个参数: ign...

2019-07-27 16:38:00 118

转载 ES学习摘要 - 2. Setup Elasticsearch

2.2 Configuring es包含三个配置文件: elasticsearch.yml - es配置项 jvm.options - jvm配置项 log4j2.properties - 日志配置项目 用压缩包安装的配置文件目录在$ES_HOME/config下 ...

2019-07-27 16:37:00 214

转载 ES学习摘要 - 1. Getting Started

1.1 Basic Concepts Cluster 每个集群都有一个唯一的名字,默认是“elasticsearch”。任意一个节点Node可以通过配置它的cluster name参数来指定它要加入的集群。 Node 一个elasticsearch node会参与集群的数据存储、索引...

2019-07-27 16:36:00 165

转载 10、包和工具

10.1 包简介 Go语言中,所有导入的包必须在每个文件的开头显式声明;禁止包的环状依赖;编译后包的目标文件不仅仅记录包本身的导出信息,目标文件同时还记录了包的依赖关系。 10.4 导入声明 过圆括号同时导入多个导入路径: import "fmt" import "os" im...

2019-07-27 16:33:00 63

转载 9、基于共享变量的并发

9.2 sync.Mutex互斥锁 sync包里的Mutex的Lock方法能够获取到token(这里叫锁),并且Unlock方法会释放这个token。 9.3 sync.RWMutex读写锁 RWMutex通过RLock和RUnlock方法来获取和释放一个读取或者共享锁;调用mu.L...

2019-07-27 16:32:00 98

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除