读书人

Glance源码架构探秘(2)

发布时间: 2013-03-13 10:56:58 作者: rapoo

Glance源码架构探秘(二)

Glance源码架构探秘(一)

Glance源码架构探秘(二)


上一章的最后,为大家介绍了Glance服务的对外启动接口/bin/glance-api,其中最用要的部分就是通过server = eventlet.wsgi.Server()生成了一个http server,并通过server.start()启动了一个WSGI程序。

首先为大家说说这个WSGI程序的作用。WSGI(web server gateway interface)web服务器网关接口。简单来说,WSGI的作用就是将client发给web server的请求转发给要实际处理这个请求的程序。

WSGI在Python中有官方的参考实现wsgiref,http://docs.python.org/2/library/wsgiref.html#module-wsgiref。

import eventletdef handle(client):    while True:        c = client.recv(1)        if not c: break        client.sendall(c)server = eventlet.listen(('0.0.0.0', 6000))pool = eventlet.GreenPool(10000)while True:    new_sock, address = server.accept()    pool.spawn_n(handle, new_sock)

上面是eventlet一个简单服务器端的示例,首先用eventlet.GreenPool(1000)生成一个最大容量为1000的“协程”缓冲池,server.accept()等待,服务器server端收到一个客户端的连接请求,就用pool.spawn_n()启动一个“协程”进行处理响应。

回到glance中,OpenStack将Python原版的CGIHTTPServer进行“绿化”,提供了eventlet.wsgi.server进行http的响应,其内部实现结构和作用和上面的代码相似,同样都是来一个http请求,就会启动一个协程server进行响应。参数custom_pool就是我们上面刚刚申请的GreenPool协程池。参数self.application为WSGI程序入口。这样我们就成功运行了一个WSGI服务程序。

本章结束,我们已经成功运行启动了Glance的WSGI服务,下一章将会开始具体介绍WSGI程序所使用的请求分发组件Routes和request与response的包装类webob的相关内容。


本章提到了些高并发访问处理方面的相关内容,实际上eventlet协程的设置上也使用了eventlet.hubs.use_hub('poll'),欢迎大家继续展开阅读与讨论Select I/O poll epoll等相关内容。

读书人网 >云计算

热点推荐