将Bjoern扩展到多个服务器

时间:2014-08-17 07:32:02

标签: python performance webserver scalability bjoern

我正在构建一个使用Bjoern作为WSGI服务器的高性能Web框架。

我现在想知道,如果你需要处理200.000 req / s,你会如何将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似乎有点过分,特别是在项目的理念努力保持一切紧凑且没有不必要的毛茸茸的情况下。

0 个答案:

没有答案