Monthly Archives: 二月 2017

You are browsing the site archives by month.

今天新眼镜到了,但可能是我颜值太低了,感觉换完眼镜也还是没有和帅字能搭边的可能性。

但是这个防蓝光镜片还是有点作用的,当时验光时总感觉有些山寨,但其实眼镜还不错,就是镜片有些厚,虽然验光师提前给我打了预防针,但还是不习惯,仿佛一下老了很多似的。

当开始反感扮老了,估计就是真的开始老了。

一次配了两幅眼镜,另一幅花钱买了最薄的镜片,而且镜片小一些,但愿没白花钱。

每次到公司都特别怕忘带耳机,直到周一真的变成现实,于是决定买了一副相对便宜的耳机,毕竟在办公室听对音质没什么追求。之前在办公室戴头戴式耳机很麻烦,和别人说话就要反复摘取,即使买像 Sony 的可触碰开关隔音的,感觉也对别人不尊重,夏天还热,还是买个能出声儿的耳塞得了。

白天研究了一番 VXLAN 的竟品实现,蛮有意思的,可惜今天不知道怎么效率不高,接下来还有三天时间,为了能过好周末要努力了。 Read More →

随着年纪的增长,我显然是越来越傻逼了。

就比如说这个嘴,今天一天就犯了 N 个错误。

早上到公司和同事聊 VXLAN 网络的方案和一些问题,我顺口说了句我估计这周应该可以搞定吧,结果就被坐在我对面的老板听见了,老板笑容满面地对我说,一周搞定哈,我也觉得你一周就可以搞定!

虽然我还是有信心的,但是这么嘴欠的就给定了个 due date,我还是想扇自己两下。

接下来周会,我上周大概一半时间在改 code,一半时间做客户那边的些个事情,大概说了一下,还是和 VXLAN 有关的,老板注意到一些同事对这块领域不太理解,就说做个培训吧,给大家讲解讲解,另一位老板立刻说就今晚吧!

看到群众们这么热情,我就答应下来,直到……

今天下午仔细分析这周的工作,发现其实没想象中的简单!再想到今晚给别人培训,这周还有被培训,还有考试,顿时感觉天塌了下来。

IMG_8866

没带耳机一天心情都不好,给贝总发消息吐槽,没想到贝总居然很快回复,震惊之余又嘴欠了一句,结果就作(zūo)了。

长有我这种嘴的人在电视剧里估计都不会活到两集。 Read More →

前言

说实话相比 OpenStack 往往流水式的代码且网络上分析和研究的文章比较多,ZStack 全异步、追求高稳定性和安全的代码是相对难读的,所以本文希望能通过一些简单的例子和与 OpenStack 的一些对比,将 ZStack 的特点、代码的原理尽量描述出来,降低 ZStack 的入门门槛。

第一步 前端

打开 Mevoco/ZStack 的界面,可以发现基本设计思路与其他 IaaS 或 OpenStack 是基本类似的,然而打开开发者面板就会发现大有不同。

OpenStack 的面板一般通过 HTTP 到 Web 后端,可能是一个像 Horizon 的中间件,也可能是直接把请求发到后面的具体服务的 API 服务,例如 nova-api 或 neutron-server。当然中间可能还会有负载均衡器或高可用之类的设施。

image_1b6dgt82i1rl0md5j8t8va1v4m9.png-305.3kB 图1 在OpenStack的Horizon面板上创建虚拟机出发的Post请求

而在 ZStack 的面板中开发者面板是很干净的,打开之后无论什么操作是不会触发 HTTP 请求的,数据和请求都在 WebSocket 传递,比如我们在面板上创建一个虚拟机,可以看到通过 WebSocket 发送一个 frame,发了一个 org.zstack.header.vm.APICreateVmInstanceMsg 的消息,后面跟着的是创建的参数。

image_1b6dhje891gd7rj61e551r9hv3vt.png-209.3kB 图2 ZStack面板上创建虚拟机发出的WebSocket帧

第二步 Web 后端

请求送到送到后端就需要我们登录到这个服务器上看了,我的实验环境是一个 All in One 的环境,登陆到服务器查询 5000 端口的监听情况,可以看到是一个 Python 程序在监听这个端口。

image_1b6dja8kukgq66ph0fs8m14hl1n.png-56.9kB

那么问题是这个程序怎么找到呢,现在我们不想去查部署程序是怎么部署的,然而直接在自己的 python 里直接 import 却报错提示没有这个库。

由于 Python 程序往往有比较重的依赖,因此 Python 部署是个运维中老生常谈的问题,想必这里是用了类似虚拟环境(virtualenv)之类的技术,那么问题就是那个虚拟环境在哪里。

我们知道 zstack 还有一个程序叫 zstack-cli,是 ZStack 的命令行程序,不妨查一下这个。可以看到这里定义了一个目录,到上面果然有几个目录,推测分别是 5 个 zstack 组件所使用的虚拟环境。

image_1b6djocjqbm218po1lob3c38mo2h.png-63.5kB

顺利找到 zstack-dashboard 目录后可以发现里边实际上没有多少 Python 代码,先打开 web.py,发现里边是一个小 Flask SocketIO App。

Flask SocketIO 用于实现 Web Socket 服务端,用 @socketio.on() 表示路由,参考图1,使用的是call,所以可以直接看处理call的 handle_call,跳转到server.api_call,将消息有 json 格式转换出来,然后连带一个用来发送回复的函数一起发给由CloudBus类所生成对象的send方法。

进入 CloudBus.send,通过一些检查和填充之后,设置回复的队列为zstack.ui.message.$uuid(这个 UUID 以及队列都是服务初始化时产生的)等等送给 Connection.send通过 kombu 对 P2P Exchange 以 zstack.message.api.portal 为 routing key(这里被封装为 Service ID)将消息发了出去。

Read More →

本打算早点起来出去拍拍日出的,结果醒来已是 6 点 40,拉开窗帘天光大亮不说还雾蒙蒙的,果断放弃睡了个回笼觉。

在家看了部韩国电影,可圈可点,除了前后两半部分不知道算是剧情崩坏了,还是戏剧转折了,似乎韩国电影很多都这样。

里边女主颜正还句句戳进我心里,简直要转粉。 Read More →

晚上和一帮同事出去吃火锅,不知是因为好久没吃火锅还是店家做的确实好吃,总之吃到停不下来。

本不打算发朋友圈的,但看到朋友圈有人发晚饭照片,看起来那么灰暗都发,实在为我的火锅鸣不平!于是果断发了个朋友圈。

相机导到手机里,Polarr 稍加调整搞定,一气呵成之余对火锅的同理心获得了满足。

老板今晚没去,结果在朋友圈回复 好酒好肉吃不够,还有bug入梦来。

我只好回复 葡萄美酒夜光杯,欲饮琵琶bug催。

FullSizeRender 3 Read More →