前言

说实话相比 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 →

作者很懒,没有留下摘要 Read More →

昨天提到今天也要写一个文档给客户,写的过程发现精神一直在分裂。

一方面在考虑客户的需求和客户的背景,一方面在想自己需要实现的部分怎么设计,一方面在如何让设计能够在一定长的时间内不需要大改。

想着想着就懵逼了。

以致上午基本没出什么活,下午和晚上总算写了一个 v0.1 发给老板刷了个赞。

晚上培训兼会议,结果培训没有好好听,这个不是重点,重点是后面考试要是不会怎么破,试用期过不过的玩笑我已经不关心了,只要不要剃头就好~

晚饭吃的不满足,回家又晚,赌气式的又吃了点东西,吃完就后悔了。

连着写了好几天,感觉才思已经枯竭,果然不是做职业段子手的料~

很想换博客以及主题,但是 SAE 这个折腾起来不太方便,而且 SAE 上还有不少余额,余额用掉再换吧。

强行插一张照片,在花莲拍的。

7D1A9728 Read More →