自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(88)
  • 资源 (4)
  • 收藏
  • 关注

转载 浅谈系统线程数限制

Linux进程与线程概念就不提了,Richard Stevens的描述:fork is expensive. Memory is copied from the parent to the child, all descriptors are duplicated in the child, and so on. Current implementations use a techniq...

2019-06-11 10:38:14 2192

转载 详解 Kubernetes ReplicaSet 的实现原理

Kubernetes 中的 ReplicaSet 主要的作用是维持一组Pod副本的运行,它的主要作用就是保证一定数量的 Pod 能够在集群中正常运行,它会持续监听这些 Pod 的运行状态,在 Pod 发生故障重启数量减少时重新运行新的 Pod 副本。这篇文章会介绍 ReplicaSet 的工作原理,其中包括在 Kubernetes 中是如何被创建的、如何创建并持有 Pod 并在出现问题时重...

2019-06-06 14:35:52 1274

原创 替换字符串中的通配符

最近面试了阿里某部门,最后面试官让写如下算法,算法题目如下:给定字符串(合法字符只包括0,1,?),替换字符串中的通配符?为0或者1,生成所有可能的字符串。Example :Input str = “1??0?101”Output:1000010110001101101001011010110111000101110011011110010111101101*/当时思路...

2019-06-03 11:46:41 3179

转载 etcd系列深入浅出客户端

【摘要】 绪论etcd的v2可以完全使用rest方式访问,v3则也可以通过部署一个grpc-gateway实现rest访问。但是一般来说,我们代码中操作etcd的读写还是会通过etcd提供的client来做。client 屏蔽了etcd server多节点访问的负载均衡问题,v3的的client采用grpc client可以维持长连接,断链自动重连。k8s的storage也是封装了etcd的cli...

2019-04-13 22:06:03 5596

转载 5 simple ways to troubleshoot using Strace

I keep being surprised how few people are aware of all the things they can use strace for. It's always one of the first debug tools I pull out, because it's usually available on the Linux systems I ru...

2019-03-27 11:53:43 472

转载 Linux(Centos7)日志管理

日志管理处理日志的进程rsyslogd:系统的专职日志程序,将绝大部分操作系统相关的日志记录。(安全、认证、计划任务…)应用程序日志:各类应用程序以自己的方式记录的日志。常见日志文件# tail /var/log/messages //系统主日志文件# tail -20 /var/log/messages# tail -f /var/log/messages...

2019-03-13 15:02:41 531

转载 Linux系统中dmesg命令使用详解

Linux数据中心服务器一般很少被黑。但也有出故障的时候,没有十全十美的,当服务器连接到网络时,你永远不知道什么时候会出现问题,会出现什么样问题。当不可避免出现了错误的时,您应该知道如何解决问题,以及所需的所有工具。对于大多数服务(Apache,MySQL等),有单独的日志可以将您键入连接,身份验证,安全性和许多其他问题。但是,当您需要研究的系统是服务器平台本身时会发生什么?当存在硬件问题时,...

2019-03-13 14:47:55 2916

转载 Linux内核调试方法总结之sysrq

sysrq【用途】Sysrq被称为”魔术组合键”, 是内建于Linux内核的调试工具。只要内核没有完全锁住,不管内核在做什么事情,使用这些组合键都可以搜集包括系统内存使用、CPU任务处理、进程运行状态等系统运行信息。【原理】【内核帮助文档kernel/Documentation/sysrq.txt】首先,内核配置选项中要使能CONFIG_MAGIC_SYSRQ选项,这样系统启动之后...

2019-03-13 14:06:32 295

翻译 解决 "DOES NOT SUPPORT INDEXING" ERROR IN A GO PROGRAM

如果你正在读这篇文章时候,很有可能你是在谷歌怎么解决这个问题:你在函数体里面传递一个指针给一个slice或者map,当你通过*variable[0]获取其中item值时候,就会报这个错:“does not support indexing” error如果解决呢?方式非常简单,不要使用:*variable[0]而是使用(*variable)[0]为什么会出现这么奇怪的错误呢?Go...

2019-01-22 15:07:46 4360

转载 golang 单元测试进阶篇

本文档说明 go 语言自带的测试框架未提供或者未方便地提供的测试方案,主要是用于解决写单元测试中比较头痛的依赖问题。也就是伪造模式,经典的伪造模式有桩对象( stub ),模拟对象( mock )和伪对象( fake )。比较幸运的是,社区有丰富的第三方测试框架支持支持。下面就对笔者亲身试用并实践到项目中的几个框架做介绍:1.gomock文档地址:package gomockgomoc...

2019-01-09 14:49:07 2219

转载 Golang GC算法解读

概括Go的垃圾回收官方形容为 非分代 非紧缩 写屏障 三色并发标记清理算法。非分代:不像Java那样分为年轻代和年老代,自然也没有minor gc和maj o gc的区别。非紧缩:在垃圾回收之后不会进行内存整理以清除内存碎片。写屏障:在并发标记的过程中,如果应用程序(mutator)修改了对象图,就可能出现标记遗漏的可能,写屏障就是为了处理标记遗漏的问题。三色:将GC中的对象按照搜索的情况分成...

2019-01-04 14:37:49 2209

转载 HyperLogLog算法及原理

基数计数基本概念基数计数(cardinality counting)通常用来统计一个集合中不重复的元素个数,例如统计某个网站的UV,或者用户搜索网站的关键词数量。数据分析、网络监控及数据库优化等领域都会涉及到基数计数的需求。 要实现基数计数,最简单的做法是记录集合中所有不重复的元素集合S_uS​u​​,当新来一个元素x_ix​i​​,若S_uS​u​​中不包含元素x_ix​i​​,则将x_ix...

2018-12-22 14:10:52 3081

转载 gRPC服务发现&负载均衡

构建高可用、高性能的通信服务,通常采用服务注册与发现、负载均衡和容错处理等机制实现。根据负载均衡实现所在的位置不同,通常可分为以下三种解决方案:1、集中式LB(Proxy Model)在服务消费者和服务提供者之间有一个独立的LB,通常是专门的硬件设备如 F5,或者基于软件如 LVS,HAproxy等实现。LB上有所有服务的地址映射表,通常由运维配置注册,当服务消费方调用某个目标服务...

2018-11-23 11:56:13 327

转载 Eviction Kill POD选择分析

Eviction机制是当节点上的资源紧张达到自己设定的阈值时可以进行资源回收。EvictionManager工作流程中两个比较重要的步骤是: reclaimNodeLevelResources(回收节点资源)和killPod。killPod总会有一个优先级选择pod来kill,下面就说一下这个优先级排序的过程。pkg/kubelet/kubelet.gofunc (kl *Kube...

2018-11-21 12:28:21 1160 1

转载 kubernetes CRI接口

在Kubrnetes的最底层是容器运行时(Container Runtime),他们负责启动、暂停容器。最有名的容器运行时就是Docker了,后面又支持rkt。在kubernetes 1.5版本,kubernetes引入了CRI,即Container Runtime Interface。1. 什么是容器运行时,为什么Kubrenes需要它?每一种容器运行时,都有自己的有点,kubernet...

2018-11-19 11:45:09 3620

转载 kubernetes的eviction机制

eviction,即驱赶的意思,意思是当节点出现异常时,kubernetes将有相应的机制驱赶该节点上的Pod。eviction在openstack的nova组件中也存在。目前kubernetes中存在两种eviction机制,分别由kube-controller-manager和kubelet实现1. kube-controller-manager实现的evictionkube-co...

2018-11-19 11:43:02 8296

转载 Kubelet PLEG源码分析

摘要:PLEG(Pod Lifecycle Event Generator)是kubelet的核心模块,在kubelet/docker相关的许多问题定位时,我们经常能看到PLEG的异常日志。通过对PLEG的源码分析,希望能让大家了解PLEG是干什么的,以及它是如何工作的、它与什么模块有交互等问题。Based on Kubernetes 1.11.4NewMainKubelet --...

2018-11-13 11:06:33 1861

转载 Kubernetes PodGC Controller源码分析

Author: [email protected] Controller配置关于PodGC Controller的相关配置(kube-controller-manager配置),一共只有两个: flag default value comments --controllers stringS...

2018-11-09 10:54:25 247

转载 Go语言 map的实现

Go中的map在底层是用哈希表实现的,你可以在 $GOROOT/src/pkg/runtime/hashmap.goc 找到它的实现。数据结构哈希表的数据结构中一些关键的域如下所示:struct Hmap{ uint8 B; // 可以容纳2^B个项 uint16 bucketsize; // 每个桶的大小 byte *buckets...

2018-11-02 11:14:36 151

转载 漫画:什么是分布式事务?

—————  第二天  —————————————————假如没有分布式事务在一系列微服务系统当中,假如不存在分布式事务,会发生什么呢?让我们以互联网中常用的交易业务为例子:上图中包含了库存和订单两个独立的微服务,每个微服务维护了自己的数据库。在交易系统的业务逻辑中,一个商品在下单之前需要先调用库存服务,进行扣除库存,再调用订单服务,创建订单记录。正常情况下,两个数据库各自更新...

2018-10-20 16:21:08 183

原创 centos7下docker1.10.3 rpm 源码编译小记

下载rpm源码包比如从https://cbs.centos.org/koji/buildinfo?buildID=16801上下载源码发布包:docker-1.10.3-59.el7.centos.src.rpm提取源码通过如下命令将打了所有的patch后的源码输出到/root/rpmbuild目录下rpm -ivh docker-1.10.3-59.el7.centos.src.rpm...

2018-10-19 12:19:28 618

原创 Kubernetes调度之亲和性和反亲和性

背景Kubernetes中的调度策略可以大致分为两种,一种是全局的调度策略,要在启动调度器时配置,包括kubernetes调度器自带的各种predicates和priorities算法;另一种是运行时调度策略,包括nodeAffinity(主机亲和性),podAffinity(POD亲和性)以及podAntiAffinity(POD反亲和性)。podAffinity 主要解决POD可以和哪些P...

2018-10-10 10:11:26 3455

转载 Actor模型和CSP模型的区别

  Akka/Erlang的actor模型与Go语言的协程Goroutine与通道Channel代表的CSP(Communicating Sequential Processes)模型有什么区别呢?  首先这两者都是并发模型的解决方案,我们看看Actor和Channel这两个方案的不同:Actor模型  在Actor模型中,主角是Actor,类似一种worker,Actor彼此之间直接...

2018-09-28 16:00:23 448

转载 Kubernetes Informer 详解

Informer 简介这边文章只是个人爱好转载,不提供任何的意见和建议Informer 基础功能Informer 是 Client-go 中的一个核心工具包。在 Kubernetes 源码中,如果 Kubernetes 的某个组件,需要 List/Get Kubernetes 中的 Object,在绝大多 数情况下,会直接使用 Informer 实例中的 Lister()方法(该方法包...

2018-08-30 18:02:46 474

转载 深入浅出kubernetes之client-go的Indexer

记得大学刚毕业那年看了侯俊杰的《深入浅出MFC》,就对深入浅出这四个字特别偏好,并且成为了自己对技术的要求标准——对于技术的理解要足够的深刻以至于可以用很浅显的道理给别人讲明白。以下内容为个人见解,如有雷同,纯属巧合,如有错误,烦请指正。本文基于kubernetes1.11版本,后续会根据kubernetes版本更新及时更新文档,所有代码引用为了简洁都去掉了日志打印相关的代码,尽量只保留有价值...

2018-08-30 17:24:58 592

转载 kubernetes之Scheduler分析

1. kubernetes Scheduler 简介kubernetes Scheduler 运行在 master 节点,它的核心功能是监听 apiserver 来获取 PodSpec.NodeName 为空的 pod,然后为每个这样的 pod 创建一个 binding 指示 pod 应该调度到哪个节点上。从哪里读取还没有调度的 pod 呢?当然是 apiserver。怎么知道 pod 没...

2018-08-22 17:45:27 1507

原创 kubernetes调度实践及原理分析

kubernetes调度策略分析Kubernetes调度器根据特定的算法与策略将pod调度到工作节点上。在默认情况下,Kubernetes调度器可以满足绝大多数需求,例如调度pod到资源充足的节点上运行,或调度pod分散到不同节点使集群节点资源均衡等。但一些特殊的场景,默认调度算法策略并不能满足实际需求,例如使用者期望按需将某些pod调度到特定硬件节点(数据库服务部署到SSD硬盘机器、CPU/...

2018-08-21 18:04:11 3985 1

转载 redis底层原理

Redis对象类型简介Redis是一种key/value型数据库,其中,每个key和value都是使用对象表示的。比如,我们执行以下代码:[plain] view plain copyredis>SET message "hello redis"  其中的key是message,是一个包含了字符串"message"的对象。而value是一个包含了"hello redis"的对象。Redis共...

2018-07-15 14:30:33 436

转载 微服务熔断与隔离

原文地址为什么需要做服务隔离与熔断        微服务是当前业界的一个趋势,其原理是将职责单一的功能独立化成子服务,一个后台服务依赖多个微服务。假设某服务由30个微服务组成,每个微服务的可用性是99.99%,那么99.99%的30次方≈99.7%,也就是说有0.3%的请求会失败,若有一亿次请求则有300000次失败。        微服务间通过RPC来进行数据交换,所以我们可以做一个假设:在IO...

2018-07-06 19:55:38 918

转载 在redis中使用lua脚本让你的灵活性提高5个逼格

原文链接在redis的官网上洋洋洒洒的大概提供了200多个命令,貌似看起来很多,但是这些都是别人预先给你定义好的,但你却不能按照自己的意图进行定制,所以是不是感觉自己还是有一种被束缚的感觉,有这个感觉就对了。。。 一:Lua脚本      说来也巧,redis的大老板给了你解决这种问题的方法,那就是Lua脚本,而且redis的最新版本也支持Lua Script debug,这应该也是未来Redis...

2018-07-04 20:06:16 400

转载 psutil--系统监控模块

文章转载于:http://www.cnblogs.com/liu-yao/p/5678157.html一、psutil模块1. psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要应用于系统监控,分析和限制系统资源及进程的管理。它实现了同等命令行工具提供的功能,如ps...

2018-07-04 16:32:58 481

转载 Golang 中关于闭包的坑

所谓闭包是指内层函数引用了外层函数中的变量或称为引用了自由变量的函数,其返回值也是一个函数,了解过的语言中有闭包概念的像 js,python,golang 都类似这样。python 中的闭包可以嵌套函数,像下面这样:def make_adder(addend): def adder(augend): return augend + addend return add...

2018-07-03 11:22:49 1889

转载 Kubernetes调度核心解密:从Google Borg说起

一个容器平台的主要功能就是为容器分配运行时所需要的计算,存储和网络资源。容器调度系统负责选择在最合适的主机上启动容器,并且将它们关联起来。它必须能够自动的处理容器故障并且能够在更多的主机上自动启动更多的容器来应对更多的应用访问。目前三大主流的容器平台Swarm, Mesos和Kubernetes具有不同的容器调度系统。Swarm的特点是直接调度Docker容器,并且提供和标准Docker API一...

2018-07-03 10:50:03 675

转载 使用awk命令获取文本的某一行,某一列

1、打印文件的第一列(域)                 : awk '{print $1}' filename2、打印文件的前两列(域)                 : awk '{print $1,$2}' filename3、打印完第一列,然后打印第二列  : awk '{print $1 $2}' filename4、打印文本文件的总行数                : awk '...

2018-07-02 16:52:28 7276

转载 Scribe日志收集工具

Scribe日志收集工具 概述Scribe是facebook开源的日志收集系统,在facebook内部已经得到大量的应用。它能够从各种日志源上收集日志,存储到一个中央存储系统(可以是NFS,分布式文件系统等)上,以便于进行集中统计分析处理。它为日志的“分布式收集,统一处理”提供了一个可扩展的,高容错的方案。当中央存储系统的网络或者机器出现故障时,scribe会将日志转存到本地或者另一个位置,当中央...

2018-06-26 15:55:44 1050

转载 Tair 分布式K-V存储方案

tair 是淘宝的一个开源项目,它是一个分布式的key/value结构数据的解决方案。作为一个分布式系统,Tair由一个中心控制节点(config server)和一系列的服务节点(data server)组成,config server 负责管理所有的data server,并维护data server的状态信息;为了保证高可用(High Available),config server可通过h...

2018-06-26 15:51:13 334

转载 Golang开发新手常犯的50个错误

《50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs》原文地址:http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/index.html一、初级1、不允许左大括号单独一行2、不允许出现未使用的变量3、不允许出现未使用...

2018-06-20 10:50:45 422

转载 golang线程同步WaitGroup简介

WaitGroup用于线程同步,WaitGroup等待一组线程集合完成,才会继续向下执行。 主线程(goroutine)调用Add来设置等待的线程(goroutine)数量。 然后每个线程(goroutine)运行,并在完成后调用Done。 同时,Wait用来阻塞,直到所有线程(goroutine)完成才会向下执行。对官方的代码做简单修改:package main    import (     ...

2018-06-01 12:04:17 270

转载 Go语言的方法接受者类型用值类型还是指针类型?

概述很多人(特别是新手)在写 Go 语言代码时经常会问一个问题,那就是一个方法的接受者类型到底应该是值类型还是指针类型呢,Go 的 wiki 上对这点做了很好的解释,我来翻译一下。何时使用值类型1.如果接受者是一个 map,func 或者 chan,使用值类型(因为它们本身就是引用类型)。2.如果接受者是一个 slice,并且方法不执行 reslice 操作,也不重新分配内存给 slice,使用值...

2018-05-31 20:19:46 173

转载 iptables中DNAT、SNAT和MASQUERADE的理解

IPtables中可以灵活的做各种网络地址转换(NAT),网络地址转换主要有两种:SNAT和DNATSNAT是source network address translation的缩写,即源地址目标转换。比如,多个PC机使用ADSL路由器共享上网,每个PC机都配置了内网IP,PC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip,当外部网络的服务器比如网站web服务器接到访问请...

2018-05-21 16:03:32 232

亿级流量网站架构核心技术

亿级流量网站架构核心技术》一书总结并梳理了亿级流量网站高可用和高并发原则,通过实例详细介绍了如何落地这些原则。本书分为四部分:概述、高可用原则、高并发原则、案例实战。从负载均衡、限流、降级、隔离、超时与重试、回滚机制、压测与预案、缓存、池化、异步化、扩容、队列等多方面详细介绍了亿级流量网站的架构核心技术,让读者看后能快速运用到实践项目中。

2018-12-21

老钱 Redis深度历险:核心原理和应用实践

钱文品(老钱),互联网分布式高并发技术十年老兵,目前任掌阅服务端技术专家。熟练使用 Java、Python、Golang 等多种计算机语言,开发过游戏,制作过网站,写过消息推送系统和 MySQL 中间件,实现过开源的 ORM 框架、Web 框架、RPC 框架等

2018-12-21

OpenStack设计与实现

OpenStack最佳入门资料 Open Stack设计与实现》是一本介绍OpenStack设计与实现原理的书。《Open Stack设计与实现》以Juno版本为基础,覆盖了OpenStack的学习方法到设计与实现等各个方面内容,致力于帮助读者形成OpenStack及其各个主要组件与项目的拓扑。 《Open Stack设计与实现》语言通俗易懂,能够带领读者更为快速地走入OpenStack的世界并做出自己的贡献。《Open Stack设计与实现》适合希望能够参与OpenStack开发的读者,也适合对OpenStack茫然的初学者,以及有一定使用部署经验但是希望了解OpenStack实现原理的广大用户

2017-09-26

空空如也

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

TA关注的人

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