Istio
Istio: 一个开源平台去链接, 管理和保障微服务: 分布式微服务代理。
传统代理: 类似于一个线, 任何服务都经过这个代理。
分布式代理: 代理运行在每个应用上,接管应用进出的流量并和统一的控制中心通信获取动态配置。
微服务代理: service mesh: 互连的分布式代理。
Istio:
Pilot: 基于http做流量的;
Mixer: 做数据统计, 授权认证
CA-Auth: 做安全认证
Envoy: 微服务代理。
Istio: 一个开源平台去链接, 管理和保障微服务: 分布式微服务代理。
传统代理: 类似于一个线, 任何服务都经过这个代理。
分布式代理: 代理运行在每个应用上,接管应用进出的流量并和统一的控制中心通信获取动态配置。
微服务代理: service mesh: 互连的分布式代理。
Istio:
Pilot: 基于http做流量的;
Mixer: 做数据统计, 授权认证
CA-Auth: 做安全认证
Envoy: 微服务代理。
今天在执行一个命令是遇到一个which路径与实际执行不同步的问题, 如下:
1 | shentao@shentao-ThinkPad-T450:~/blog$ which ss-local |
which 现实路径是/usr/local/bin/ss-local, 但实际执行的路径却是/usr/bin/ss-local. 查看which的文档, 发现which是按顺序搜索PATH环境变量来查找的:
1 | shentao@shentao-ThinkPad-T450:~/blog$ echo $PATH |
所以最先在/usr/local/bin中找到.
于是去调查了下bash的执行过程和顺序. 得到了答案. https://crashingdaily.wordpress.com/2008/04/21/hashing-the-executables-a-look-at-hash-and-type/
原来在每一次执行过程中shell都会有一个hash table作为cache将调用过的可执行命令存入hash table, 这样再下次调用的时候就可以直接从缓存中读取, 而不用每次去搜索PATH. 我们通过type命令可以查看:
1 | shentao@shentao-ThinkPad-T450:~/blog$ type ss-local |
可以通过hash命令删除:
1 | shentao@shentao-ThinkPad-T450:~/blog$ hash -d ss-local |
我们再来回顾下关于bash 的一些知识:
Aliases: An alias is a word that is mapped to a certain string, 命令的别名.
1 | $ alias nmapp="nmap -Pn -A --osscan-limit" |
Functions: A function contains shell commands, and acts very much like a small script. 用function定义一个函数:
1 | function gcc { echo “just a test for gcc”; } |
Builtins: 内置函数, cd之类的
Keywords: Keywords are like builtins, with the main difference being that special parsing rules apply to them. For example, [ is a Bash builtin, while [[ is a Bash keyword. They are both used for testing stuff. [[ is a keyword rather than a builtin and is therefore able to offer an extended test:
1 | $ [ a < b ] |
第一个< 是重定向, 第二个加了[[的关键词之后 < 成了小于号.
Executables: (Executables may also be called external commands or applications.) Executables are commonly invoked by typing only their name. This can be done because a pre-defined variable makes known to Bash a list of common, executable, file paths. This variable is called PATH. 外部命令, 也就是PATH中找到的那些命令
Script: 脚本. 比如test.sh
bash搜索的顺序是: 当前路径和绝对路径的目录->alias->keyword->function->built-in->Executables, Script(hash)->Executables, Script($PATH)
bash, hash, type, which, alias, function
写了一个简单的程序, 想通过外部环境变量传递给程序的全局变量, 这个全局变量又被另一个全局变量使用, 发现另一个变量无法改变, 然后发现一些有意思的golang程序初始化顺序, 需要稍微注意一下.
1 | package main |
输出如下:
1 | /home/shentao/.IdeaIC2016.1/config/plugins/Go/lib/dlv/linux/dlv --listen=localhost:34206 --headless=true exec "/tmp/Build initializetest.go and rungo" -- -size=10 |
注释标记的是实际运行顺序, 先是变量的初始化, 此时size还没传入解析, 所以使用默认值”3”; 其次是调用init函数; 最后是main函数, main函数再进行flag.Parse(), 此时size改变, 但是其他变量不会再变.
苗艳强,闫学安
ZTE 工程师,主要从事容器相关开源工作,Kubernetes 社区 member, containerd 社区 member
课程详情:
演讲主题:
目前跟 Kubernetes 对接的默认容器运行时是 docker,然而 docker 从 1.12 版本开始加入了 swarm 功能,随着版本的演进,功能越来越庞大,已经成为一个跟 Kubernetes 同级甚至高一级的编排工具,且前不久又宣布在编排测要无缝对接 Kubernetes,因此,docker 作为 Kubernetes 默认容器运行时的位子必将被其他工具代替。本次分享首先简单介绍 Kubernetes 的运行时接口规范,然后着重为大家分享一款新的容器运行时工具 containerd,包括项目介绍,功能组成等,以及使其原生对接 Kubernetes 的插件 cri-containerd。
纲要/提纲:
Kubernetes 容器容器运行时接口(CRI)
containerd 项目介绍
containerd 的 CRI 实现
Containerd的CRI实现
kubelet -> cri-containerd -> containerd
在hexo中, 在themes目录下git clone了一个子目录themes/next. git push 到远程仓库后没有看到themes/next中的内容, 也无法git add
1 | shentao@shentao-ThinkPad-T450:~/blog$ git commit -m "fix" themes/next/ |
当创建一个子git项目是, 项目就叫做git submodule结构, 外部无法对子模块进行控制, 有两种方式(我知道的):
1.
1 | cd themes/next |
再到外部提交
1 | git add themes/next |
1 | git rm --cached themes/next |
本书评不涉及剧透,请大胆的往下看。
阿加莎的书的特点是将你往某种定势思维上引,然后打破这种定势思维。《无人生还》亦是如此。那么如何排解定势思维呢?这本书在侦破的过程中提供了两个思维。
第一个是排除。即一开始不去想最可能的结果,而是将所有已知的证据放在桌面,然后不断排除所有不可能的结果,最后得到的结果无论多么离谱,都是在已有证据下的唯一结果。
第二个思维是回溯。当我们得到一个唯一结果,或者得不到唯一结果,也就是所有结果都被排除掉,那么只有一种可能就是证据本身是错的,这就是有证人在说谎,或者有人伪造了证据,这时候需要回溯到证据提出的过程中,提供假证据必然要掩盖某个事实,从某个最容易甄别的假证据出发找到一个真事实,通过这个真事实,按照第一个思维,可以继续推倒出其他与之相违背的证据,从而重新得到证据链。
我不禁有一个有意思的理论和想法:如果每个人做的事情都看做一条平面上的直线,那么我们肉眼所能看到的案发现场,就是这所有直线的有且仅有的一个交点。有任何一个人在任何时候说谎,那条直线就会发生偏折,就无法相交于一点,此时为了相交于一点,有两种方法:说更多的慌让直线折回来;让其他人也说谎,找一个新的交点。本书的犯人无疑是后者。但想找一个新的交点何其难,终究被识破。
其实还有第三种方法。昨晚看了《黑镜》最新一季的某一集,女主角与男友因为酒驾撞死了一个男子,然后抛尸。时隔多年男友良心不安想要去告诉被害者家属,女主角将他杀害,而杀害的过程被正在调查车祸的女调查员发现,于是女主角杀害了女调查员,并得知她的家庭,于是杀害了她的所有家人。所以这个方法就是把平面上所有其他直线擦掉,平面上只有一条直线,和一个看起来不相交的点。
在跑自己的golang程序时遇到死锁, 查看stack, 发现一些奇怪的goroutinue:
1 | goroutine 17 [syscall, 12 minutes, locked to thread]: |
这些goroutine显示: locked to thread, 但上网查找有回复说到, 这并不是一个真正的死锁, 而是正常的goroutine拿线程锁的过程. 可能调用了cgo或者runtime.LockOSThread. 这个问题可以忽略掉, 以防绕进死胡同.
1 | That is not a deadlock, at least not a deadlock in the Go program. It |