很久之前发现一个现象,在生产环境中配置了保留内存reserved_host_memory_mb以及 没配置 内存超分比ram_allocation_ratio的情况下,虚拟机使用的内存居然已经快将物理内存耗尽了。

比如物理机内存300G,方便举例忽略掉一些系统占用,当设置了reserved_host_memory_mb为20G,那么理论上所有虚拟机最大占用内存量为280G,而查看居然已经使用了290G的内存,还是在虚拟机并没有将各自申请的内存全部使用掉的情况下(比如申请一台4G的虚拟机,但物理机操作系统层面并没有分配4G给对应的进程,除非虚拟机内部把内存占满)。

单单就nova而言,如果在集群启动时就指定了保留内存大小和超分比为1的话,是不应该出现上述情形的。除非后期对这2个参数进行过修改,但由于年代久远已经没法追溯,这也就成了一桩悬案。

不过在追踪这个问题的过程中,顺便也学习了下主机热迁移的过程,这里的代码是 N版

阅读全文

今天遇到一个诡异的问题,对某个有问题的计算节点进行疏散,结果有些虚拟机的根磁盘居然消!失!了?首先能够确定的是ceph不会自动删除,那么一定是某个地方触发了删除根磁盘的操作。

这如果发生在生产环境可是一个极其严重的问题,正好借此排查的机会梳理一下nova关于主机疏散的流程。

以下代码为N版,但大体流程相差应该不大。

阅读全文

外观模式(Facade Pattern)

这个模式即便没听说过,也很可能在很多地方已经使用了,是非常常用的设计模式之一,完美体现了面向对象“封装”的特性。简单说就是通过一个“外观”将系统内部的实现隐藏起来,将外部系统和内部系统进行解耦。

阅读全文

装饰器模式(Decorator Pattern)

在python中有一个非常常用的语法糖@,本质上就是装饰器。这种模式可以不改变原文件的情况下动态的扩展一个对象的功能而不用创建子类,避免了类膨胀,是一种比较常用的模式,有个细节需要注意的就是装饰的顺序。

阅读全文

设计模式-组合模式

发布在 设计模式

组合模式(Composite Pattern):将对象组合成树形结构表示来“部分-整体”的层次结构,使用户对单个对象和组合对象的使用具有一致性。

看上去有点抽象,其实就是一种树形结构。比如二叉树,每个非叶子节点都有2个子节点,叶子节点除了没有子节点外和父节点、根节点都是一样的。在通俗来说,比如公司的层级架构,从老板(根节点)到经理(非叶子节点)再到员工(叶子节点),他们有很多共性的东西,比如都有姓名、工号,老板和经理有添加、移除手下员工的能力,而作为员工则只能干活。

从代码实现来说,就是老板、经理、员工使用一个抽象类,而老板和经理实现某些特定的方法,这就是组合模式,十分容易理解。

阅读全文

设计模式-桥接模式

发布在 设计模式

桥接模式(Bridge Pattern)

桥接模式核心原理是将抽象部分和实现部分分析,使二者可以独立的变化。再具体一点,当某个类型由于自身逻辑可以有两个或多个维度的变化,使用桥接模式可以令这些维度变化时不影响其他维度。再举个例子,手机——可以按照品牌来分类,比如苹果华为三星,也可以按照功能分类,比如拍照手机,游戏手机等等。

桥接模式有2个设计原则:

  1. 使用聚合而不使用继承。(使用继承一定是在is-a的关系时再考虑使用)
  2. 抽象和实现分离。
阅读全文

这篇文章记录nova创建快照时候的过程,根据文档,创建快照其实是向/servers/{server_id}/action发送了一个POST的请求,内容则是类似:

1
2
3
4
5
    "createImage" : {
"name" : "image-name",
"metadata": {}
}
}
阅读全文

原文,向原作者表示感谢。不过不知道作者是不是在国内学过作文,让我想起了小学时老师教的作文要多引用名人名言哈哈。


几年前当我还是个菜鸟的时候,我过得十分潇洒。

写代码——交给别人review——改代码,绳命是多磨美好!工作内容就是仔细阅读我收到的评论、建议,学着成为一个更优秀的开发者。如今我成长为了一名高级开发人员,给别人做code review成为了我的职责之一,这时我意识到我的经验还不足以完成这种职责转变。

每次给别人做code review时我都感觉到害怕,感觉自己像是一个骗子,很多问题都困扰着我:

我该给这行代码提建议吗?

应该有更好的办法写这段代码,我应该告诉他吗?

他会怎么想?他的经验比我丰富。

改了这一行代码会不会使程序崩溃?

这时我的导师给了我建议。

好的code review聚焦于获得额外的产出,而非仅仅是找到bug。别把review当做是审讯,而当做是一种提高代码质量、发现其他方案、增加学习能力以及加强友谊的办法。

作为reviewer,你对代码的反馈是将渴望贡献的开发者组建成社区的一种主要方法。通过培养一个活跃的社区,你将提升产品、团队、和人生的质量。

这里有一些做好code review的建议。

阅读全文
作者的图片

Roy

君以国士待我,我必以国士报君。


野生程序猿


China