在 O 版本的 OpenStack 中,利用了 uWSGI 服务器作为 Apache 服务器和 Keystone 服务之间的桥梁。关于 uWSGI 与 CGI、FastCGI、WSGI 之间的区别,可参考博文网关协议学习:CGI、FastCGI、WSGI。
对于 Keystone 服务启动,源码的 DOC 目录下就有一个文件(doc/source/apache-httpd.rst)说明如何启动 Keystone 服务:
1 | Now configure and start the uwsgi services. Copy the |
需要注意的是,uWSGI 服务器并不直接向外提供服务,而是由 Apache 或 Nginx 这种专门服务器向外接收请求,然后转发给 uWSGI 服务器。
从上边说明,我们也可以看到,Keystone 服务是分成 admin 和 public 两种的。下边我们以 admin 为例来进行说明。首先,先看一下 keystone-uwsgi-admin.ini 的内容:
1 | [uwsgi] |
从上边配置文件我们可以看到服务的启动入口在 keystone-wsgi-admin。那这个入口在哪里呢?请看 setup.cfg 文件:
1 | [entry_points] |
接下来我们就来看看这个入口函数:
1 | # keystone/server/wsgi.py |
上边的代码逻辑很清晰,所以这里我们就不做过多解释,重点说一下 setup_backends 这个函数。
1 | # keystone/server/wsgi.py |
可以看出,setup_backends 主要做了两件事:
- 利用 PasteDeploy 加载基于 keystone-paste.ini 配置文件的 WSGI 应用
- 加载(实例化)各个模块的 Driver(实际就是各模块的 API)
到此,一个服务就启动完毕了。
最后,我们可以看一下效果(keystone-pu 和 keystone-ad 分别是 keystone-public 和 keystone-admin 的缩写):