<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[redenval的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/redenval</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; redenval]]></copyright><item><title><![CDATA[浅谈系统线程数限制]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/91414602</link><guid>https://blog.youkuaiyun.com/redenval/article/details/91414602</guid><author>redenval</author><pubDate>Tue, 11 Jun 2019 10:38:14 +0800</pubDate><description><![CDATA[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...]]></description><category></category></item><item><title><![CDATA[详解 Kubernetes ReplicaSet 的实现原理]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/91043585</link><guid>https://blog.youkuaiyun.com/redenval/article/details/91043585</guid><author>redenval</author><pubDate>Thu, 06 Jun 2019 14:35:52 +0800</pubDate><description><![CDATA[Kubernetes 中的 ReplicaSet 主要的作用是维持一组Pod副本的运行，它的主要作用就是保证一定数量的 Pod 能够在集群中正常运行，它会持续监听这些 Pod 的运行状态，在 Pod 发生故障重启数量减少时重新运行新的 Pod 副本。

这篇文章会介绍 ReplicaSet 的工作原理，其中包括在 Kubernetes 中是如何被创建的、如何创建并持有 Pod 并在出现问题时重...]]></description><category></category></item><item><title><![CDATA[替换字符串中的通配符]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/90749739</link><guid>https://blog.youkuaiyun.com/redenval/article/details/90749739</guid><author>redenval</author><pubDate>Mon, 03 Jun 2019 11:46:41 +0800</pubDate><description><![CDATA[最近面试了阿里某部门，最后面试官让写如下算法，算法题目如下：
给定字符串（合法字符只包括0，1，？），替换字符串中的通配符？为0或者1，生成所有可能的字符串。
Example :
Input str = “1??0?101”
Output:
10000101
10001101
10100101
10101101
11000101
11001101
11100101
11101101
*/
当时思路...]]></description><category></category></item><item><title><![CDATA[etcd系列深入浅出客户端]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/89289686</link><guid>https://blog.youkuaiyun.com/redenval/article/details/89289686</guid><author>redenval</author><pubDate>Sat, 13 Apr 2019 22:06:03 +0800</pubDate><description><![CDATA[【摘要】 绪论etcd的v2可以完全使用rest方式访问，v3则也可以通过部署一个grpc-gateway实现rest访问。但是一般来说，我们代码中操作etcd的读写还是会通过etcd提供的client来做。client 屏蔽了etcd server多节点访问的负载均衡问题，v3的的client采用grpc client可以维持长连接，断链自动重连。k8s的storage也是封装了etcd的cli...]]></description><category></category></item><item><title><![CDATA[5 simple ways to troubleshoot using Strace]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/88841102</link><guid>https://blog.youkuaiyun.com/redenval/article/details/88841102</guid><author>redenval</author><pubDate>Wed, 27 Mar 2019 11:53:43 +0800</pubDate><description><![CDATA[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...]]></description><category></category></item><item><title><![CDATA[Linux（Centos7）日志管理]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/88532810</link><guid>https://blog.youkuaiyun.com/redenval/article/details/88532810</guid><author>redenval</author><pubDate>Wed, 13 Mar 2019 15:02:41 +0800</pubDate><description><![CDATA[日志管理
处理日志的进程


rsyslogd：系统的专职日志程序，将绝大部分操作系统相关的日志记录。（安全、认证、计划任务…）


应用程序日志：各类应用程序以自己的方式记录的日志。


常见日志文件
# tail /var/log/messages        //系统主日志文件
# tail -20 /var/log/messages
# tail -f /var/log/messages...]]></description><category></category></item><item><title><![CDATA[Linux系统中dmesg命令使用详解]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/88532281</link><guid>https://blog.youkuaiyun.com/redenval/article/details/88532281</guid><author>redenval</author><pubDate>Wed, 13 Mar 2019 14:47:55 +0800</pubDate><description><![CDATA[Linux数据中心服务器一般很少被黑。但也有出故障的时候，没有十全十美的，当服务器连接到网络时，你永远不知道什么时候会出现问题，会出现什么样问题。当不可避免出现了错误的时，您应该知道如何解决问题，以及所需的所有工具。

对于大多数服务（Apache，MySQL等），有单独的日志可以将您键入连接，身份验证，安全性和许多其他问题。但是，当您需要研究的系统是服务器平台本身时会发生什么？当存在硬件问题时，...]]></description><category></category></item><item><title><![CDATA[Linux内核调试方法总结之sysrq]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/88531148</link><guid>https://blog.youkuaiyun.com/redenval/article/details/88531148</guid><author>redenval</author><pubDate>Wed, 13 Mar 2019 14:06:32 +0800</pubDate><description><![CDATA[sysrq

【用途】

Sysrq被称为”魔术组合键”， 是内建于Linux内核的调试工具。只要内核没有完全锁住，不管内核在做什么事情，使用这些组合键都可以搜集包括系统内存使用、CPU任务处理、进程运行状态等系统运行信息。

【原理】【内核帮助文档kernel/Documentation/sysrq.txt】

首先，内核配置选项中要使能CONFIG_MAGIC_SYSRQ选项，这样系统启动之后...]]></description><category></category></item><item><title><![CDATA[解决 "DOES NOT SUPPORT INDEXING" ERROR IN A GO PROGRAM]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/86594990</link><guid>https://blog.youkuaiyun.com/redenval/article/details/86594990</guid><author>redenval</author><pubDate>Tue, 22 Jan 2019 15:07:46 +0800</pubDate><description><![CDATA[如果你正在读这篇文章时候，很有可能你是在谷歌怎么解决这个问题：你在函数体里面传递一个指针给一个slice或者map，当你通过*variable[0]获取其中item值时候，就会报这个错：“does not support indexing” error
如果解决呢？
方式非常简单，不要使用：
*variable[0]

而是使用
(*variable)[0]

为什么会出现这么奇怪的错误呢？
Go...]]></description><category></category></item><item><title><![CDATA[golang 单元测试进阶篇]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/86152272</link><guid>https://blog.youkuaiyun.com/redenval/article/details/86152272</guid><author>redenval</author><pubDate>Wed, 09 Jan 2019 14:49:07 +0800</pubDate><description><![CDATA[本文档说明 go 语言自带的测试框架未提供或者未方便地提供的测试方案，主要是用于解决写单元测试中比较头痛的依赖问题。也就是伪造模式，经典的伪造模式有桩对象( stub )，模拟对象( mock )和伪对象( fake )。比较幸运的是，社区有丰富的第三方测试框架支持支持。下面就对笔者亲身试用并实践到项目中的几个框架做介绍：

1.gomock

文档地址：package gomock

gomoc...]]></description><category></category></item><item><title><![CDATA[Golang GC算法解读]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/85775314</link><guid>https://blog.youkuaiyun.com/redenval/article/details/85775314</guid><author>redenval</author><pubDate>Fri, 04 Jan 2019 14:37:49 +0800</pubDate><description><![CDATA[概括

Go的垃圾回收官方形容为 非分代 非紧缩 写屏障 三色并发标记清理算法。非分代：不像Java那样分为年轻代和年老代，自然也没有minor gc和maj o gc的区别。非紧缩：在垃圾回收之后不会进行内存整理以清除内存碎片。写屏障：在并发标记的过程中，如果应用程序（mutator）修改了对象图，就可能出现标记遗漏的可能，写屏障就是为了处理标记遗漏的问题。三色：将GC中的对象按照搜索的情况分成...]]></description><category></category></item><item><title><![CDATA[HyperLogLog算法及原理]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/85205453</link><guid>https://blog.youkuaiyun.com/redenval/article/details/85205453</guid><author>redenval</author><pubDate>Sat, 22 Dec 2018 14:10:52 +0800</pubDate><description><![CDATA[基数计数基本概念

基数计数(cardinality counting)通常用来统计一个集合中不重复的元素个数，例如统计某个网站的UV，或者用户搜索网站的关键词数量。数据分析、网络监控及数据库优化等领域都会涉及到基数计数的需求。 要实现基数计数，最简单的做法是记录集合中所有不重复的元素集合S_uS​u​​，当新来一个元素x_ix​i​​，若S_uS​u​​中不包含元素x_ix​i​​，则将x_ix...]]></description><category></category></item><item><title><![CDATA[gRPC服务发现&负载均衡]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/84381256</link><guid>https://blog.youkuaiyun.com/redenval/article/details/84381256</guid><author>redenval</author><pubDate>Fri, 23 Nov 2018 11:56:13 +0800</pubDate><description><![CDATA[
构建高可用、高性能的通信服务，通常采用服务注册与发现、负载均衡和容错处理等机制实现。根据负载均衡实现所在的位置不同，通常可分为以下三种解决方案：


1、集中式LB（Proxy Model）



在服务消费者和服务提供者之间有一个独立的LB，通常是专门的硬件设备如 F5，或者基于软件如 LVS，HAproxy等实现。LB上有所有服务的地址映射表，通常由运维配置注册，当服务消费方调用某个目标服务...]]></description><category></category></item><item><title><![CDATA[Eviction Kill POD选择分析]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/84316898</link><guid>https://blog.youkuaiyun.com/redenval/article/details/84316898</guid><author>redenval</author><pubDate>Wed, 21 Nov 2018 12:28:21 +0800</pubDate><description><![CDATA[Eviction机制是当节点上的资源紧张达到自己设定的阈值时可以进行资源回收。

EvictionManager工作流程中两个比较重要的步骤是: reclaimNodeLevelResources(回收节点资源）和killPod。

killPod总会有一个优先级选择pod来kill，下面就说一下这个优先级排序的过程。


pkg/kubelet/kubelet.go
func (kl *Kube...]]></description><category></category></item><item><title><![CDATA[kubernetes CRI接口]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/84237819</link><guid>https://blog.youkuaiyun.com/redenval/article/details/84237819</guid><author>redenval</author><pubDate>Mon, 19 Nov 2018 11:45:09 +0800</pubDate><description><![CDATA[在Kubrnetes的最底层是容器运行时(Container Runtime)，他们负责启动、暂停容器。最有名的容器运行时就是Docker了，后面又支持rkt。在kubernetes 1.5版本，kubernetes引入了CRI，即Container Runtime Interface。

1. 什么是容器运行时，为什么Kubrenes需要它？

每一种容器运行时，都有自己的有点，kubernet...]]></description><category></category></item><item><title><![CDATA[kubernetes的eviction机制]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/84237654</link><guid>https://blog.youkuaiyun.com/redenval/article/details/84237654</guid><author>redenval</author><pubDate>Mon, 19 Nov 2018 11:43:02 +0800</pubDate><description><![CDATA[eviction，即驱赶的意思，意思是当节点出现异常时，kubernetes将有相应的机制驱赶该节点上的Pod。eviction在openstack的nova组件中也存在。

目前kubernetes中存在两种eviction机制，分别由kube-controller-manager和kubelet实现

1. kube-controller-manager实现的eviction

kube-co...]]></description><category></category></item><item><title><![CDATA[Kubelet PLEG源码分析]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/84025512</link><guid>https://blog.youkuaiyun.com/redenval/article/details/84025512</guid><author>redenval</author><pubDate>Tue, 13 Nov 2018 11:06:33 +0800</pubDate><description><![CDATA[
摘要：PLEG(Pod Lifecycle Event Generator)是kubelet的核心模块，在kubelet/docker相关的许多问题定位时，我们经常能看到PLEG的异常日志。通过对PLEG的源码分析，希望能让大家了解PLEG是干什么的，以及它是如何工作的、它与什么模块有交互等问题。



Based on Kubernetes 1.11.4


NewMainKubelet --...]]></description><category></category></item><item><title><![CDATA[Kubernetes PodGC Controller源码分析]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/83894299</link><guid>https://blog.youkuaiyun.com/redenval/article/details/83894299</guid><author>redenval</author><pubDate>Fri, 09 Nov 2018 10:54:25 +0800</pubDate><description><![CDATA[
Author: xidianwangtao@gmail.com


PodGC Controller配置

关于PodGC Controller的相关配置（kube-controller-manager配置），一共只有两个：


			flag
			
			
			default value
			
			
			comments
			
		
			--controllers stringS...]]></description><category></category></item><item><title><![CDATA[Go语言 map的实现]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/83652400</link><guid>https://blog.youkuaiyun.com/redenval/article/details/83652400</guid><author>redenval</author><pubDate>Fri, 02 Nov 2018 11:14:36 +0800</pubDate><description><![CDATA[Go中的map在底层是用哈希表实现的，你可以在 $GOROOT/src/pkg/runtime/hashmap.goc 找到它的实现。

数据结构

哈希表的数据结构中一些关键的域如下所示：


struct Hmap
{
    uint8   B;    // 可以容纳2^B个项
    uint16  bucketsize;   // 每个桶的大小

    byte    *buckets...]]></description><category></category></item><item><title><![CDATA[漫画：什么是分布式事务？]]></title><link>https://blog.youkuaiyun.com/redenval/article/details/83214391</link><guid>https://blog.youkuaiyun.com/redenval/article/details/83214391</guid><author>redenval</author><pubDate>Sat, 20 Oct 2018 16:21:08 +0800</pubDate><description><![CDATA[—————  第二天  —————

————————————

假如没有分布式事务

在一系列微服务系统当中，假如不存在分布式事务，会发生什么呢？让我们以互联网中常用的交易业务为例子：

上图中包含了库存和订单两个独立的微服务，每个微服务维护了自己的数据库。在交易系统的业务逻辑中，一个商品在下单之前需要先调用库存服务，进行扣除库存，再调用订单服务，创建订单记录。

正常情况下，两个数据库各自更新...]]></description><category></category></item></channel></rss>