Skip to main content

Kubernetes和Envoy集成遇到的一个问题记录

Submitted by taotao on Tue, 08/03/2021 - 21:04

今天遇到一个奇怪的问题,Envoy的CDS数据是通过从Kubernets的Api Server获取的,大部分情况都是正常的,但是今天出现了有两个服务的状态一直没有更新,这里的状态是指CDS中没有获取到最新服务的Pod Ip,导致访问服务的时候出现了503,最后是通过重启解决了该问题,在重启后,可以看到CDS中数据滞后导致了大量的错误日志。

猜测这里的可能原因是由于K8S的Api Server没有返回最新的数据,或者是k8s-go 这个客户端有bug,也有可能是在多个命名空间下都在运行ResourceWatcher这个服务(这是一个从k8s中监听pod的变动事件,并把pod的IP写入ZK的一个服务),而这个服务有bug?

Tags

Emacs中开发Java项目

Submitted by taotao on Mon, 11/09/2020 - 20:07

 

我从2008年开始使用使用Emacs,就被它All In One的设计哲学吸引,所以我也花费了很多业余时间研究如何用Emacs开发Java项目,我研究过eclim,jdee,都不是很理想,所以这么多年我都是在IDEA和Emacs之间来回切换工作,当然很多不了解Emacs的人会认为你干嘛这么麻烦,干嘛不在IDEA里把事情都干了? 还要来回切换? 这个问题被问了好多次,但是要把Emacs的精髓和美在很短的时间内解释清楚,不是一件容易的事情,所以我每次都放弃回答这个问题,回答不好,就干脆不回答了。也许会被人认为傻X,也许会被人认为我清高,不被人理解也是一种常态。今天我写这个文章的目的就是介绍LSP,这个可以在Emacs中高效的开发Java项目的一个插件。 

LSP 安装步骤参考: https://github.com/emacs-lsp/lsp-mode

LSP-Java安装步骤:https://github.com/emacs-lsp/lsp-java

Tags

Flink的工作原理分析

Submitted by taotao on Thu, 10/22/2020 - 20:13

这篇文章主要总结下最近学习的Flink工作原理。

首先要问一个问题,Flink在内存里都干了哪些事情?

  1. 对记录进行排序、聚合、哈希;
  2. 对接受到的数据进行序列化和反序列化;
  3. 在Java里,高效的序列化工具有Avro或者Kyro, 但是Flink为了追求高效而自己开发了一套序列化工具,数据在内存磁盘之间传输或者网络之间传输之后,不再需要反序列化,接受方可以直接操作序列化后的数据;

 

在Java世界里,处理处理比较大的数据量必然会导致GC,而GC必然会导致计算效率的下降,如何解决这个问题?

How permanent change Ubuntu18.04 /etc/resolv.conf

Submitted by taotao on Tue, 03/24/2020 - 17:48

How to permanent change Ubuntu 18.04 /etc/resolv.conf ?

Setp 1 :

Change /run/systemd/resolve/resolv.conf , add the following recods:

nameserver  8.8.8.8
nameserver 127.0.0.53
options edns0
search your.domain.com

Step 2 :

remove the soft link /etc/resolv.conf

rm -rf /etc/resolv.conf

 

Step 3 : Create new soft link to file /run/systemd/resolv.conf

ln -s /run/systemd/resolv.conf /etc/resolv.conf

 

 

Kubernetes的学习总结1

Submitted by taotao on Sun, 02/16/2020 - 19:35

概述

最近陆陆续续的看了一些Kubernetes的资料,这篇文章对最近的学习做一个总结性的输出,本文主要介绍

  1. Kubernetes的设计哲学
  2. 各个构件的作用介绍
  3. 创建一个Pod的流程介绍

阅读完本文大概你会了解如上的内容,大概需要5-10分钟阅读完本文。

Kubernetes的设计哲学

Kubernetes是的前身是Google基于它的Brog论文 研发的内部的容器编排工具,据说google的员工需要签署保密协议,不能向外透露这个系统的相关信息,直到2015年左右,google才开源这个系统。所以从这里看出google对于这个系统的重视程度之高。

我们在日常的运维中遇到的最大难点就是服务的扩容和升级。因为要考虑很多方面的问题包括机柜、服务器的配置、负载均衡的设置、同时多版本在线的流量切换等等,每个方面的问题都需要花费很多的精力才能做好。Kubernetes主要就是解决这些方面的问题。

Envoy代理Jetty9出现的503问题的分析

Submitted by taotao on Sat, 02/15/2020 - 19:36

概述

最近公司在进行压力测试摸底每个服务的最大并发能力,在压力测试的过程中发现出现了大量的503现象,大概每次压测中会有3%-8%的503错误,经过调查分析,发现这是由于后端的Java服务主动关闭了connection,导致前端的代理Envoy拿着一个已经被关闭的connection发送请求,从而导致产生了503的现象。要解决这个问题的需要将服务端的idle timeout值设置的要大于前段代理服务器的idle timeout的值。下面是这个问题的解决的详细过程的描述。

详细过程

测试部门的同事在压力测试的时候发现返回了大量的503错误,服务的架构是:后端的服务是Java的,采用的是Jetty 9,前端的服务器是Envoy,当我接手这个问题的时候,压测的同事说,这个Java服务只有被Envoy代理才会返回503,如果直接压测Java服务,不会出现503,因此我把重点放在了Envoy代理上面。

相关性的一些概念学习笔记

Submitted by taotao on Sat, 01/25/2020 - 16:18

概述

我们经常会听到相关性这个词,它是如何来的?我们如何更好的理解它呢?比如我们要买入A公司的股票,我们会去考察A公司的业绩如何,就会去关注它的企业年度财报、公司业务经营范围、股东成员股权分配情况等,这些都了解之后才会决定是否购买这家公司的股票,这就是一个相关性的例子。我们如何衡量每一个因素在决定我们是否购买股票这个事情中所占据的比例? 通过阅读本文我们会了解如下内容:

  1. 如何判断两个事件是否具备相关性;
  2. 什么是线性相关性;
  3. 什么是自相关性;

通过上述内容的理解,你将会掌握如何识别出两个事件之间是否具备相关性,如果具备相关性,那么二者的相关性的因数是多少?掌握这个知识后,可以帮组我们更好的对这个世界作出科学的分析和预测,从而可以指导我们的工作和生活。

如何判断两个事件是否具备相关性

我们在现实的世界中会有很多因素影响我们做决策,比如上文提到是否买入A公司的股票这个事情,我们就会考虑那些因素。那么我们如何衡量这些因素是否真正的对于我们做当前的决策产生了影响呢?我们可以把要分析的两个事件分别抽象成为A和B,我们要研究A和B之间的关系,就要考察如下的情况: