想写nova的policy的实现, 但是发现网上,有人写的很不错了。

ref: http://blog.csdn.net/hackerain/article/details/8241691

但是,policy本身存在一点问题,其他文章没有介绍。

policy的加载是同步的,每次loader的时候,都会检测,文件是否修改,修改则重新加载。

建议策略: 改成异步监听policy的文件, 文件修改是加载。 实现时,注意 enforce函数 和 加载函数的 race。

policy的同步缺陷可能导致的问题。

当我们要在magnum/api/controllers/v1/bay.py 中调用这个policy.enfore,不同的位置调用,会导致web server的性能不同。

1. 

 class BaysController(rest.RestController):
"""REST controller for Bays."""
def __init__(self):
super(BaysController, self).__init__() ... @wsme_pecan.wsexpose(Bay, types.uuid_or_name)
def get_one(self, bay_ident):
policy.enfore("bay:get_one", pecan.request.contex)
if self.from_bays:
raise exception.OperationNotPermitted rpc_bay = api_utils.get_rpc_resource('Bay', bay_ident) return Bay.convert_with_links(rpc_bay)

2.

 class BaysController(rest.RestController):
"""REST controller for Bays."""
def __init__(self):
super(BaysController, self).__init__() ... @wsme_pecan.wsexpose(Bay, types.uuid_or_name)
def get_one(self, bay_ident):
if self.from_bays:
raise exception.OperationNotPermitted
policy.enfore("bay:get_one", pecan.request.contex) rpc_bay = api_utils.get_rpc_resource('Bay', bay_ident) return Bay.convert_with_links(rpc_bay)

magnum代码中, 和同事讨论采用1的方法,提前(第10行)做policy 的enforce。

在淘宝双11的节奏中,当请求量很大时,尤其是在self.from_bays 的条件满足的情况下, 由于 policy 自身的实现(请查看policy的代码),导致服务器的压力增大。

openstack 的 policy 问题。的更多相关文章

  1. 探索 OpenStack 之(13):研究 Keystone

    Keystone 是 OpenStack Identity Service 的项目名称.本文就试着尽可能深入地研究 Keystone. 1. Keystone 的功能 做为 OpenStack 云系统 ...

  2. OpenStack REST API使用

    以前一直想写博客,但因各种因素一直没写.最近在做OpenStack,而OpenStack对外提供REST API,今天就简要介绍一下OpenStack REST API 使用,关于什么是REST AP ...

  3. keystone policy.json 的学习总结

    keystone的policy.json文件位于:/etc/keystone/policy.json 其内容如下: 1 { 2 "admin_required": "ro ...

  4. OpenStack Identity API v3 extensions (CURRENT)

    Table Of Contents Identity API v3 extensions (CURRENT) OS-ENDPOINT-POLICY API Associate policy and e ...

  5. openstack policy 鉴权过程分析

    转:http://blog.chinaunix.net/uid-20940095-id-4144300.html 1. openstack 鉴权简单介绍       众所周知,openstack通过k ...

  6. openStack deep dive,Retake Policy

    Method of Payment: visa MasterCard American Express Discover

  7. 完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建

    公司在IDC机房有两台很高配置的服务器,计划在上面部署openstack云平台虚拟化环境,用于承载后期开发测试和其他的一些对内业务.以下对openstack的部署过程及其使用做一详细介绍,仅仅依据本人 ...

  8. RedHat 和 Mirantis OpenStack 产品的版本和功能汇总和对比(持续更新)

    Mirantis 和 Red Hat 作为 OpenStack 商业化产品领域的两大领军企业,在行业内有重要的地位.因此,研究其产品版本发布周期和所支持的功能,对制定 OpenStack 产品的版本和 ...

  9. OpenStack Mitaka 版本中的 domain 和 admin

    OpenStack 的 Keystone V3 中引入了 Domain 的概念.引入这个概念后,关于 admin 这个role 的定义就变得复杂了起来. 本文测试环境是社区 Mitaka 版本. 1. ...

随机推荐

  1. sed高级命令

    所谓高级,主要是指这里将要提到的命令都能改变sed执行或者控制的流程顺序(sed通常都是一行被读入模式空间,并用脚本中的sed命令一个接一个的应用于那一行). 高级sed命令分成3个组: 1)处理多行 ...

  2. Hadoop HA部署

    因为公司旧系统的Hadoop版本是2.2,所以在部署新系统时使用了旧系统. 但是在部署ResourceManager auto failover时发现其他nodemanager总是向0.0.0.0请求 ...

  3. fuel Explain

    http://docs.mirantis.com/openstack/fuel/fuel-5.1/ https://software.mirantis.com/quick-start/ https:/ ...

  4. Linux Makefile文件编写详细步骤与实践

    Linux Makefile文件编写详细步骤与实践 1.makefile概述 Windows环境下IDE会帮你完成makefile文件的编写,但在UNIX环境下你就必须自己写makefile了,会不会 ...

  5. Redis简介以及如何在Windows上安装Redis

    Redis简介 Redis是一个速度非常快的非关系型内存数据库. Redis提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erla ...

  6. Mina入门:mina版之HelloWorld

    一,前言: 在完成上篇文章<Mina入门:Java NIO框架Mina.Netty.Grizzly简介与对比>之后,我们现在可以正式切入Mina入门学习了. 二,搭建项目结构与解决项目依赖 ...

  7. Java基础笔记-抽象,继承,多态

    抽象类: abstract修饰 抽象方法必须定义在抽象类中,抽象类不能创建对象. 在抽象方法中可以不定义抽象方法,作用是:让该类不能建立对象. 特点是: 1.定义在抽象类中 2.方法和类都用abstr ...

  8. SQL常用函数

    SQL中常用的函数有类型转换函数.字符串函数和日期使用函数.更多具体的函数用法参见DBMS中的帮助文档. 类型转换函数 cast(值 as 类型) update 表名 set 列1=列1+cast(列 ...

  9. 查看MDB格式文件数据表

    当打开一个MDB格式的ACCESS文件后,如果里面默认的都是窗体视图,要查看数据表的信息,可以“创建-查询设计”查看表信息,或是在SQL视图中编写SQL语句来实现. 或按着Shift键打开文件.

  10. 蓝桥杯算法训练<二>

    一.最小乘积(基本型)[这个题需要认真阅读试题,内容量较大,刚开始的时候,由于练习系统上给出的输入输出的格式有问题,没看懂,最后在MikCu的博客上看到了正确的格式,参考了代码,最终得到正确的结果.为 ...