0. 前言 阅读了一段时间 Golang 开源代码,准备正式阅读 Kubernetes 项目代码(工作机 Golang 版本为 Go 1.12) 参照 <k8s 源码阅读> 选择 1.13 版本 参考原文:100 - k8s源码分析-准备工作 1. 方法论 第一步:熟悉 k8s 的基本功能,理解各个组件的分工,做到心中有数,但是不拘泥于掌握每一个功能细节,因为很多特性在日常开发中很难用到 第二步:选定第一个要深入研究的组件,概览其支持的所有子命令和 flag,知道该组件能实现哪些功能(知道基于…
零基础学习hadoop到上手工作线路指导初级篇:hive及mapreduce:http://www.aboutyun.com/thread-7567-1-1.html mapreduce学习目录总结 MapReduce学习指导及疑难解惑汇总:http://www.aboutyun.com/thread-7091-1-1.html 什么是Map/Reduce:http://www.aboutyun.com/thread-5541-1-1.html Mapreduce 整个工作机制图:http://…
0. 前言 继续上一篇博客阅读 Kubernetes 源码,参照<k8s 源码阅读>首先学习 Kubernetes 的一些核心组件,首先是 kube-scheduler 本文严重参考原文:<k8s 源码阅读>之 2.2 章节:scheduler,加入部分自己阅读的体会作为自己的阅读笔记 感谢<k8s 源码阅读>的作者们辛苦编写教材,在此郑重表示感谢,望大家多多支持!~ 1. 整体设计 1.1 概述 官网描述: The Kubernetes scheduler runs…
本文收录在容器技术学习系列文章总目录 一.简介 1.Kubernetes代码托管在GitHub上:https://github.com/kubernetes/kubernetes/. 2.Kubernetes是一个开源的,容器集群管理系统,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制.通过Kubernetes你可以: 快速部署应用 快速扩展应用 无缝对接新的应用功能 节省资源,优化硬件资源的使用 3…
1. 写在前面 对于做Java开发的同学来说,Spring就像是一条绕不过去的路,但是大多数也只是停留在对Spring的简单使用层面上,对于其背后的原理所知不多也不愿深究,关于这个问题,我在平时的生活及工作中也在不断思考. 为什么要阅读Spring的源码? 不是为了读源码而读源码,Spring有很好的设计思想,值得学习: Spring是当前使用最广泛的一个开发框架,学习其原理可以帮助我们更好的应对工作中出现的各种框架相关的问题: 在开发中越来越多的使用到了各种各样的框架,渐渐的开发人员只会引入j…
这一篇讲讲不常用的一些方法. 1 sd_setImageWithPreviousCachedImageWithURL: placeholderImage: options: progress: completed: 取得上次缓存的图片,然后作为占位图的参数再次进行一次图片设置. - (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options…
一.概述 1.通过此前描述可以知道k8s是以后运行我们生产环境中重要应用程序的尤其是无状态程序的一个非常重要的平台.这里面能托管一些核心应用以及核心数据,很显然对于k8s对应接口的访问不是任何人都可以轻易使用的,比如kubectl 这种工具进行访问,如果人人都可以通过kubectl 进行访问那么很显然它能够随意操作我们的应用程序,这是非常危险的,因此k8s对于我们整个系统的认证,授权和访问控制等做了非常精密和精心的设计,考虑到k8s诞生到今天为止还不算太长,但是到目前为止模型设计上已经做的足够安…
shuffle读过程源码分析 上一篇中,我们分析了shuffle在map阶段的写过程.简单回顾一下,主要是将ShuffleMapTask计算的结果数据在内存中按照分区和key进行排序,过程中由于内存限制会溢写出多个磁盘文件,最后会对所有的文件和内存中剩余的数据进行归并排序并溢写到一个文件中,同时会记录每个分区(reduce端分区)的数据在文件中的偏移,并且把分区和偏移的映射关系写到一个索引文件中. 好了,简单回顾了写过程后,我们不禁思考,reduce阶段的数据读取的具体过程是什么样的?数据读取的…
  此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结.五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解:hadoop分为hadoop1.X.hadoop2.X,并且还有hadoop生态系统.这里只能慢慢介绍了.一口也吃不成胖子. hadoop 1.x分为mapreduce与hdfs 其中mapreduce是很多人都需要迈过去的槛,它比较难以理解,我们有时候即使写出了mapreduce程序,但是还是摸不着头脑.我们不知道…
一:为什么要阅读rocketmq的源码? 1 可以了解mq的底层实现逻辑. 二:打算怎么读,行动路径是哪儿些? 1: 本地启动 2 分步调试 3  fork项目,添加中文注释,提交到自己的代码库.并改写重构代码.…
  为了让我们第一时间知道程序的运行状态,Asp.Net Core 添加了默认的日志输出服务.这看起来并没有什么问题,对于开发人员也相当友好,但如果不了解日志输出的细节,也有可能因为错误的日志级别配置导致性能问题,笔者的同事在一次进行性能测试的时候被输出日志误导,与其讨论分析了测试源码,排除业务代码因素,后来联想到应该是由于默认的日志输出导致(默认的日志级别 Microsoft 是 Inforamtion),随后将日志级别调高,性能立即飙升,问题解决.   虽然问题得到解决,但笔者脑中的对于到底…
一.概述 1.在应用程序中我们有两类,一种是有状态一种是无状态.此前一直演示的是deployment管理的应用,比如nginx或者我们自己定义的myapp它们都属于无状态应用. 2.而对于有状态应用,比如redis,mysql,还有etcd,还有zookeeper等等需要存数据的都属于有状态.它们不光有所谓的节点之分,每一个对应的pod还有角色之分,有的是主节点,有的是从节点.而后,从节点不光有所谓的从之分可能还有先后次序之分,我们不同的分布式系统它们的运维管理,逻辑和运维操作过程是不相同的,因…
flask.app该模块2000多行代码,主要完成应用的配置.初始化.蓝图注册.请求装饰器定义.应用的启动和监听,其中以下方法可以重点品读和关注 def setupmethod(f): @setupmethoddef register_blueprint(self, blueprint, **options): @setupmethoddef add_url_rule(self, rule, endpoint=None, view_func=None, provide_automatic_opt…
源码 # -*- coding: utf-8 -*-""" flask._compat ~~~~~~~~~~~~~ Some py2/py3 compatibility support based on a stripped down version of six so we don't have to depend on a specific version of it. :copyright: © 2010 by the Pallets team. :license: B…
架构 Kubernetes历史…
一.概述 1.上集中我们说到,官方文档提示说从k8s 1.11版本开始,将监控体系指标数据获取机制移向新一代的监控模型.也就意味着对于我们的k8s来讲现在应该有这样两种资源指标被使用.一种是资源指标,另一种是自定义指标.意思是说HeapSter提供了指标数据的收集,存储和监控的基本功能.并支持多个数据接收器.比如influxdb来存储指标数据,而后每个存储后端的代码本身都驻留在HeapSter仓库中.意思是HeapSter为了能够支持各种各样的存储后端他就不得不去适配驱动每一个存储后端,这其中包…
一.概述 1.接下来介绍在k8s上运行pod对象时我们如何去监控我们系统级的资源指标以及业务级别的资源指标.数据如何获取和监控.在此之前先介绍一下Pod对象的资源请求和资源限制.即容器的资源需求和资源限制.在docker中说到过容器是可以资源限额的,在启动容器时候我们可以定义一个容器可以使用多少的cpu和内存资源.在当时说过cpu资源是可压缩资源,一个pod或一个容器在应该获取指定资源获取不到时等待即可,但是对内存来讲就不是这样的,假如他用到的资源不够就有可能会因为内存资源耗尽而被killd .…
一.概述 1.我们在pvc申请的时候未必就有现成的pv能正好符合这个pvc在申请中指定的条件,毕竟上一次的成功是我们有意设定了有一些满足有一些不满足的前提下我们成功创建了一个pvc并且被pod绑定所使用了.但是正常情况下刚好让二者之间符合或者在一众pv中正好有存在符合需要的这么一个pv未必在多种情况下都能满足.所以k8s的设计者也注意到了这些问题,因此他们为此有意设计了一种工作逻辑能够让pvc在申请pv时不针对某个pv进行或者是我们可以直接针对某个存储类(k8s之上的标准资源之一,叫Storag…
一.概述 1.我们此前讲过根据应用本身是否需要持久存储数据以及某一次请求和之前的请求是否有联系,可以分为四类应用 a.有状态,要存储 b.有状态,无持久存储 c.无状态,要存储 d.无状态,无持久存储 其中,大多数和数据存储服务相关的应用和有状态应用几乎都是需要持久存储数据的.在docker中说过,容器有生命周期,为了使容器将来终结以后可以把其删除,甚至是编排到其它节点上去运行,意味着我们数据不能放在容器本地,不能放在容器自己的名称空间中.注意这是两套逻辑,以k8s为例,pod运行时应该是运行在…
一.上集回顾 1.Service 3种模型:userspace,iptables,ipvs 2.Service类型 ClusterIP,NodePort NodePort:client -> NodeIP:NodePort -> ClusterIP:ServicePort -> PodIP:containerPort LoadBalancer ExternelName No ClusterIP: Hedless Service serviceName -> PodIP 二.ingr…
一.kubernetes是有一个restful风格的 API,把各种操作对象都一律当做资源来管理.并且可通过标准的HTTP请求的方法 GET,PUT,DELETE,POST,等方法来完成操作,不过是通过相应的命令反馈在kubectl 之上,如kubectl run,get,edit,.... 二.k8s常用的资源实例化后我们称之为对象.k8s相关的核心资源如下. 1.workload(工作负载型资源对象):Pod,ReplicaSet,Deployment,StatefulSet,DaemonS…
一.相关命令 1.kubectl 通过连接api server 进行各k8s对象资源的增删改查,如pod,service,controller(控制器),我们常用的pod控制器replicaset,deployment,statefulet,daemonset,job,cronjob等,甚至node都是对象. [root@k8smaster ~]# kubectl --help kubectl controls the Kubernetes cluster manager. Find more…
我们在开发lightning的时候,常常会在controller.js中写 component.get('v.label'), component.set('v.label','xxValue'); 小伙伴肯定有疑问这些方法是怎么定义的,lightning到底有多少已经声明的方法可供我们使用,此篇主要讲述aura framework为我们提供的 component的js的主要方法. 本人salesforce环境切换到lightning,URL为:https://zero-zhang-dev-ed…
idea搭建spring源码阅读环境 安装gradle Github下载Spring源码 新建学习spring源码的项目 idea搭建spring源码阅读环境 安装gradle 在官网中下载gradle二进制文件下载地址…
  上周Erlang讨论群里面提到lists的++实现,争论大多基于猜测,其实打开代码看一下就都明了.贴出代码截图后有同学问这代码是哪里找的?   "代码去哪里找?",关于Erlang源码阅读的路线图江湖上只有一份残卷了.我觉得"代码在哪儿?"这类问题是信息不对称造成的,本身难度不大,就像<贫民窟的百万富翁>里面的情节:贾马尔知道市井生活中的零零碎碎却说不出国徽上的文字,我们就从电影中的这一幕开始本文的探索吧     内景,演播室—夜晚 普瑞姆:这个问题…
最近在跟着一个大佬学习Hadoop底层源码及架构等知识点,觉得有必要记录下来这个学习过程.想到了这个废弃已久的blog账号,决定重新开始更新. 主要分以下几步来进行源码学习: 一.搭建源码阅读环境二.源码项目结构概览及hdfs源码包结构简介三.NameNode介绍 第一步,搭建源码阅读环境. 把Hadoop源码包导入到开发工具,eclipse或者idea都行.这里我的环境是mac os,使用的工具是idea,Hadoop版本为2.6.5. 首先,解压缩Hadoop源码包,可以选择移动解压之后的源…
LevelDB(v1.3) 源码阅读系列使用 LevelDB v1.3 版本的代码,可以通过如下方式下载并切换到 v1.3 版本的代码: $ git clone https://github.com/google/leveldb.git $ cd leveldb $ git checkout -b v1.3 v1.3 本文涉及的代码文件为: include/slice.h 1. Slice 简介 LevelDB Slice 对经常使用的字符串进行了简单的封装,它自己不管理内存,仅仅提供对已有字符…
koa源码阅读的第四篇,涉及到向接口请求方提供文件数据. 第一篇:koa源码阅读-0第二篇:koa源码阅读-1-koa与koa-compose第三篇:koa源码阅读-2-koa-router 处理静态文件是一个繁琐的事情,因为静态文件都是来自于服务器上,肯定不能放开所有权限让接口来读取.各种路径的校验,权限的匹配,都是需要考虑到的地方.而koa-send和koa-static就是帮助我们处理这些繁琐事情的中间件.koa-send是koa-static的基础,可以在NPM的界面上看到,static…
koa源码阅读[2]-koa-router 第三篇,有关koa生态中比较重要的一个中间件:koa-router 第一篇:koa源码阅读-0第二篇:koa源码阅读-1-koa与koa-compose koa-router是什么 首先,因为koa是一个管理中间件的平台,而注册一个中间件使用use来执行.无论是什么请求,都会将所有的中间件执行一遍(如果没有中途结束的话)所以,这就会让开发者很困扰,如果我们要做路由该怎么写逻辑? app.use(ctx => { switch (ctx.url) { c…
本文转载自JDK源码阅读-FileInputStream 导语 FileIntputStream用于打开一个文件并获取输入流. 打开文件 我们来看看FileIntputStream打开文件时,做了什么操作: public FileInputStream(File file) throws FileNotFoundException { String name = (file != null ? file.getPath() : null); SecurityManager security =…