1

我正在构建一个使用 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 服务器似乎有点过头了,尤其是在项目的理念是保持一切紧凑且没有不必要的绒毛的情况下。

4

0 回答 0