欢迎

Slowdown 是一种基于协程架构的异步服务器和开发框架。可以作为静态文件服务器使用,并可通过 Python 来进行扩充,亦可使用 PHP 这样的(URL 脚本路径映射)机制来编写动态页面脚本。 可以认为 Slowdown 在功能上其实非常类似于 Apache 以及 Nginx 这样的 HTTP 服务器, 区别在于 Apache 或 Nginx 是使用 C 语言来编写 module 进行扩充,而 Slowdown 则使用 Python 来进行扩展和实际项目的开发。

随着移动端开发的出现,和基于 MVVM 等模式的富客户端的流行,给过去习惯于使用“服务器端页面 模板”来编写界面的 WEB 开发者提出了不小的挑战。在当前阶段 Slowdown 选择不对前端方案下任何 定论,用户可以选择将前端界面交给 Vue 或 React 等这些“日新月异”、“层出不穷”的富客户端 工具,而认真处理服务器后端的任务,并介由 HTTP 协议将应用的 API 发布给前端界面使用。

Slowdown 目前仍处于高速发展的过程中,在后续版本中,在向前兼容的基础上,预计会有更多的功能 与特性增加进来。欢迎大家对本项目予以持续关爱。


Slowdown 是一款集成了 WEB 开发框架的协程架构的服务器软件,开发方便、部署便捷。
本项目由沈崴使用 Python 开发, 采用 MIT 协议。

项目简史

Slowdown 的作者于 2007 年开源了 Eurasia 高性能服务器,这也是当时较早投入实用的一批异步协程服务器之一。 经过十多年的应用,作者将形成的开发理念和技术积累进行适当整理之后构建了全新的 Slowdown 项目。目前 Slowdown 已经在一些项目中投入实用,并在使用中持续改进。

省力帮手

与许多 WEB 开发框架不同,Slowdown 本身就是一套支持高并发的生产级服务器,所以无需在 Slowdown 前端放置额外的承压服务器(比如 nginx),而在协程架构下许多传统的辅助服务 (比如常见的 redis 缓存服务,甚至消息队列)都不是必须的,减少了不少的配置工作, 也方便了调试,让项目的维护成本可以下降许多。

在许多时候用户只需安装和维护一份 Slowdown 服务器就够用了,着实省力不少。

开发利器

尽管众所周知,基于协程架构的异步服务器具有良好的性能,但 Slowdown 的主要关注点仍是在如何 提高开发效率上。在 Slowdown 中,协程架构主要被用来简化临界资源调度,并能够精简掉大量传统 架构中因受限于并发连接数而存在的辅助类服务。同时 Slowdown 还提供了一套轻量级的开发框架, 框架接口数被控制在一个合理范围,并使用了类似 PHP 这样的“URL/脚本映射”,简单实用。

创业神器 1

服务器性能测试

硬件:Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz (单核)

⑴ 页面无数据库载荷

Concurrency Level:      600
Failed requests:        0
Total transferred:      880000 bytes
HTML transferred:       90000 bytes
Requests per second:    6416.19 [#/sec] (mean)
Time per request:       93.513 [ms] (mean)
Time per request:       0.156 [ms] (mean, across all concurrent
requests)
Transfer rate:          551.39 [Kbytes/sec] received

⑵ 页面携带一次随机 SQL 查询

Concurrency Level:      1000
Failed requests:        0
Total transferred:      12800000 bytes
HTML transferred:       4800000 bytes
Requests per second:    4121.92 [#/sec] (mean)
Time per request:       242.605 [ms] (mean)
Time per request:       0.243 [ms] (mean, across all concurrent
requests)
Transfer rate:          515.24 [Kbytes/sec] received

Slowdown 并没有单纯地在性能测试中追求极致的成绩,而是试图在各种真实场景中获得“绰绰有余” 的性能。真实的项目场景中,一次完整的响应一般由一定数量的数据库操作、日志操作,以及其他的 IO 及运算组成。在这种具有完整实际载荷的情况下,Slowdown 在一般硬件条件下,单核 2 一般能够每秒完成 1000 次以上动态页面请求。这使得一台普通服务器每天可以响应数千万至数亿次 的真实请求,对于中小型项目,已经够用。对于超大型项目,Slowdown 作为“突发式应用服务器集群 节点 3 ”使用也相当合适。

下面是一个简单的测试用例:

def GET(rw):
    rw.send_html_and_close(content='<html>Hello, World!</html>')

执行测试:

$ sudo /usr/bin/cpufreq-set -g powersave -u 800MHz
$ cpufreq-info
current policy: frequency should be within 500 MHz and 800 MHz.
                The governor "powersave" may decide which speed to use
                within this range.
current CPU frequency is 798 MHz
$ cat /proc/cpuinfo
model name      : Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz
cpu MHz         : 798.269
bogomips        : 4389.98

$ ab -c 1000 -n 20000 http://127.0.0.1:8080/
Benchmarking 127.0.0.1 (be patient)
Finished 20000 requests

Document Path:          /
Document Length:        26 bytes

Concurrency Level:      1000
Failed requests:        0
Total transferred:      2120000 bytes
HTML transferred:       520000 bytes
Requests per second:    1445.75 [#/sec] (mean)
Time per request:       691.680 [ms] (mean)
Time per request:       0.692 [ms] (mean, across all concurrent
requests)
Transfer rate:          149.66 [Kbytes/sec] received

Connection Times (ms)
             min  mean[+/-sd] median   max
Connect:       0    23 143.2       0  1036
Processing:   14   652 160.5     682   830
Waiting:       1   651 160.5     682   829
Total:        66   674 191.4     683  1574

Percentage of the requests served within a certain time (ms)
50%    683
66%    774
75%    795
80%    799
90%    807
95%    815
98%   1388
99%   1481
100%   1574 (longest request)
$ tail logs/access-202009.log
2020-09-17 15:03:05 200 GET '/' 127.0.0.1 'ApacheBench/2.3'
2020-09-17 15:03:05 200 GET '/' 127.0.0.1 'ApacheBench/2.3'
2020-09-17 15:03:05 200 GET '/' 127.0.0.1 'ApacheBench/2.3'
_images/ecs5y.jpg

可见,即便在模拟使用 800MHz CPU(bogomips 4390)这种特殊的低配硬件的情况下,服务器性能 依然在线。事实上在此类硬件上,对每个请求走完完整的 HTTPS(TLS)握手、数据库及日志操作 流程,服务器每秒仍能响应 100-400 个动态页面,除非是超大型应用,Slowdown 在多数情况下 依然仅需一台服务器就能解决问题。

目前,类似配置的服务器租用价格着实非常亲民。

1

这里出于方便,使用了 ab 对本机进行性能测试,这的确忽略了网络状况波动对测试产生 的影响,然而对具备 C10K 能力的服务器来说,具有一定抹平网络波动的能力,所以即便 使用这种简单测试方法,仍有一定参考价值。

2

目前服务器仅支持使用一个 CPU 核心,多核支持会在后续版本中加入。

3

突发式应用服务器集群节点,指可根据用户请求数随时增加或减少的应用服务器。在最简单 的情况下,在使用中心化存储的情况下应用服务器互相之间有时能够完全解耦,可以方便地 增减节点。