我正在构建一个使用 Bjoern 作为 WSGI 服务器的高性能 Web 框架。
我现在想知道,如果您需要处理 200.000 个请求/秒,您将如何将 Bjoern 扩展/扩展到多个服务器,或者更确切地说是通常所说的负载平衡?您首选的方法是什么?
Bjoern 中是否有一些帮助程序/内置函数来帮助执行此操作?或者我应该在 Python 中使用单独的负载均衡器?
例如,让我们以下面的简单 WSGI 服务器为例:
import bjoern, os
urls = {'/':"hello world", '/greet':"hi user!"}
def application(environ, start_response):
response_body = urls[environ['PATH_INFO']]
status = '200 OK'
response_headers = [('Content-Type', 'text/plain'),
('Content-Length', str(len(response_body)))]
start_response(status, response_headers)
return [response_body]
bjoern.listen(app, "localhost", 8000)
bjoern.run()
要将其扩展到多个处理器,需要按以下方式进行修改:
import bjoern, os
# We use two workers in this case, meaning 2 processors.
NUM_WORKERS = 2
worker_pids = []
urls = {'/':"hello world", '/greet':"hi user!"}
def application(environ, start_response):
response_body = urls[environ['PATH_INFO']]
status = '200 OK'
response_headers = [('Content-Type', 'text/plain'),
('Content-Length', str(len(response_body)))]
start_response(status, response_headers)
return [response_body]
bjoern.listen(app, "localhost", 8000)
for _ in xrange(NUM_WORKERS):
pid = os.fork()
if pid > 0:
worker_pids.append(pid)
elif pid == 0:
try:
bjoern.run()
except KeyboardInterrupt:
pass
exit()
try:
for _ in xrange(NUM_WORKERS):
os.wait()
except KeyboardInterrupt:
for pid in worker_pids:
os.kill(pid, signal.SIGINT)
但是,如果我想将其扩展到多台服务器(从而也使用它们的资源)怎么办?
使用 Nginx、Lighttp 或 Monkey-http 等其他 Web 服务器似乎有点过头了,尤其是在项目的理念是保持一切紧凑且没有不必要的绒毛的情况下。