一个典型例子详析Istio v1alpha3 流量管理规则

前言

isto提供了一种简单的语法来描述如何进行流量管理。可以给服务配置熔断、超时、重试等规则,也可以配置规则来切分流量从而实现金丝雀发布、A/B测试等发布功能。一个典型场景如官方文档中的case,将一定比例的流量或者满足一定条件的请求的流量切分到一个特定版本上。

Istio的route rule从v1alpha1v1alpha3 变化特别大,可以看出对规则设计上完全进行了重构。看上去v1alpha3功能上更强了,可以预见未来1.0后alpha3风格的语法因为提供了更强的表达能力,将逐步取代alpha1成为标准语法。但是初次使用或者中alpha1直接切过来一般还会有些不适应。因为较之alpha1,v1alpha3使用上还是有点复杂。导致原来用v1alpha1配置的规则场景在v1alpha3下不是很容易的配置出来。因此本文一个典型例子来说明下v1alpha3规则的使用上的细[......]

阅读全文

Tags: , , ,

Comments { 2 }

戏(细)说Executor框架线程池任务执行全过程(下)

归档下发表于infoq.com 2015年6月的两篇文章。本来是一篇文章,经过Infoq编辑Alice Ding建议,拆分为<上>和<下>两部分。谢谢Alice对文章的细心校对,帮我发下了其中的很多问题。添加下infoq要求的声明:本文为InfoQ中文站特供稿件,首发地址为:http://www.infoq.com/cn/articles/executor-framework-thread-pool-task-execution-part-02 。如需转载,请与InfoQ中文站联系。

内容综述

基于Executor接口中将任务提交和任务执行解耦的设计,ExecutorService和其各种功能强大的实现类提供了非常简便方式来提交任务并获取任务执行结果,封装了任务执行的全部过程。本文尝试通过对j.u.c.下该部分源码的解析以ThreadPoolExecutor为例[......]

阅读全文

Tags: , , , , ,

Comments { 9 }

从Search Sort到Join

发表于《程序员》2015年4月B的一篇文章,在博客归档下。根据杂志社要求,在自己博客发表该文章亦须注明:本文为CSDN编译整理,未经允许不得转载,如需转载请联系market#csdn.net(#换成@)

想通过原理来说明一些技术白皮书上“什么时候应该使用什么”这个“应该”后面的原因。通过数据结构中经典的排序查找算法来推倒解释数据库中几种经典的表连接背后的算法原理,和原理决定的在各种数据库中不同的应用和限制。以简单的算法来讲出数据库系统中看着核心强大功能的本质的算法设计。较之白皮书中不同数据库的不同描述,尽量去除差异,通过原理来描述功能,做到深入浅出。

一、前言

Join的语义是把两张表的通过属性的关联条件值组合在一起,一般意义上数据库范式越高,表被拆分的越多,应用中要被Join的表可能会越多。在我们日常开发中几乎找不到不涉及Join的SQL语句,哪怕未显示包含Join这个关键字。[......]

阅读全文

Tags: , , , , , ,

Comments { 0 }

B树在数据库索引中的应用剖析(发表版本)

最近一篇发表于《程序员》2014年6月刊上的文章。有点遗憾发现,有些部分被编辑修改过了,读起来有点怪怪的。最典型的是习惯于对某些比较经典的定义引用wikipedia或者原始白皮书中原始的E文,在文中发现都被硬译过了,表达的意思自己都有点看不懂了!

最终修改后提交的版本归档下:

引言

关于数据库索引,随便Google一个Oracle indexMysql index总能得到“某某索引之n条经典建议”之类大量结果。笔者认为,较之直接借鉴,在搞清实际需求的基础上,对备选方案的原理尽可能深入全面的了解会更有利于我们的决策。因为某种方案或者技术呈现出某种优势(包括可能没有被介绍到但一定存在的限制),不是厂商的白皮书这样规定,是由实现机制决定的或者说本身的结构决定的。

本文重点介绍数据结构中经典的树(B树)结构在数据库索引中的经典应用,也会涉及到几种数据库中对此支持的细微不同,以期比较完整的[......]

阅读全文

Tags: , , ,

Comments { 0 }

也说说蓝绿、金丝雀和ABTesting

前言

关于灰度发布描述网上说法非常多,蓝绿、金丝雀、ABTesting分别是啥,怎么搞的都有各自的说法,有些不太一致。笔者基于自己的实践中描述下。本来也就是一种工程上的实践的风格,也不是什么非常严格理论定义,所以要区分的非常清楚也没有必要。其实只要搞清楚发明这几种实践是干什么用的,侧重点分别是什么即可。

蓝绿

蓝绿发布的主要思路是在新版本在另外一套独立的资源上上线,新版本起来后将所有的流量从老版本切到新版本上来。当新版本工作正常,则删除老版本;当新版本工作有问题,则快速能切回到老版本。因此蓝绿发布看上是一种热部署的方式,目的是减少发布过程中的服务停止时间。

可以看到因为两个版本都是可用,其升级切换和回退速度非常快。为了达到这种快速切换复出的代价是要搞冗余的资源,即2倍的原有资源,分别部署新老版本。此外一个问题是全量的切流量,如果新版本有问题,则所有的用户将受到影响。

 [......]

阅读全文

Tags: ,

Comments { 0 }

Opentracing 调用链服务端埋点

1 前言

通过一个最简单的代码例子来看使用opentracing在服务端埋点的逻辑。因为调用链的抽象模型都是来自dapper这篇论文,所以其他的方式也是类似,只是接口方法上稍有不同。

2 关于服务端埋点

主要流程看上是:

  • 1) 收到请求
  • 2) 从通信协议(如常用的HTTP header)中解出客户端传递的trace;
  • 3) 构造span
  • 4) 保存span
  • 5) 服务端返回请求
  • 6) 关闭span,将span的数据结构上传到调用链的数据存储节点。

下面结合一个例子中的额使用看下2 3 4 6四个调用链埋点步骤具体做了哪些事情。

3 主要流程

以最典型的http服务端为例。如下面是个http服务端的里,一般的最简单的一个http服务端写出来可能是这样,从request中解到请求的参数,然后执行服务端处理的逻辑,然后结果写到response。
[c[......]

阅读全文

Tags: , , ,

Comments { 0 }

论CAS在幼儿园点名中的应用

宝贝的幼儿园老师都是漂亮活泼又富有爱心的小天使一样的人物,非常神奇的教会了宝贝们很多我们家长们都搞不定的事情,非常有办法的完全不用发火的将这些淘气的小家伙们修理的服服贴贴,在小宝贝们眼里简直就是神一般的存在,当然在家长眼里也是。

如果你以为这就是全部,那就大错特错了。就在这两天发现了,她们居然也是深谙各种计算机中的算法。不得不偷着怀疑这些白天在学校里的陪孩子们玩的小姑娘们下班后是不是在菊厂或者其他公司写代码。IMG_20171029_214307

这不这两天在家长群里发了消息,就小露了一手。这个案例的背景是要收集到每个宝贝的家长对一个重要通知的确认。上级的重要通知,每个家的家长都要确认。如果你说请在群里回复“收到”那简直弱爆了。最终怎么确认每个都收到了。

看看我们美女老师设计的算法。如右图所示,每个家长的回复一个序号+宝贝名+收到,序号是根据前面的回复次序i++上来,并且每个回复要求追加在前面一个回复的后面。[......]

阅读全文

Tags: ,

Comments { 0 }

kubernetes liveness probe 流程

1 概述

kubernetes提供了的Probe可以进行健康检查。
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/
对pod中的每个容器通过配置liveness或者readiness。
当liveness probe failed后,该container会杀掉,并重新创建;而readinessProbe失败,则该pod ip 会从service的endpoints列表中删除,即隔离到该后端的请求。
如liveness 配置如下:

文中尝试端到端的看下整个过程有哪些组件参与进来,怎么配合工作的。

2 配置

pkg/api/types.go#Probe结构描述了Probe的[......]

阅读全文

Tags: , ,

Comments { 0 }