用什么软件写python3.6_使用异步Python 3.6和Redis编写快速应用程序

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

人们对于Python和其他解释型语言(例如:Ruby,JavaScript,PHP,Perl等等),最常抱怨的就是他们太慢了。显然,网络应用中,速度更快的语言能够实现更短的响应时间以及降低服务器的消耗。

为了解决这样的问题,Python3.4引入了asyncio模块,随后,Python3.5则为它设计了新的语法。然后,随之而来的uvloop网络库为asyncio带来了速度上的极大提升:uvloop使得asyncio相当快。实际上,和nodejs,gevent以及任何其他Python中的异步网络架构相比,asyncio的速度至少是它们的2倍,基于uvloop的asyncio在性能上的表现已经接近于Go语言了。

在Paxos(译者注:一种基于消息传递的一致性算法)中,我们大量使用asyncio,既是因为它的性能更好,也是因为asyncio更加适合我们整体架构。我们的产品与来自不同的客户端的事务数据同步,同时,因为它是一个分布式系统,所以本质上讲,它又是异步的。

asyncio能够出色地将吞吐量最大化,但是我们也关心要减少延迟。就延迟而言,你的数据库本身会是一个主要的瓶颈。实践中,当我们使用例如合适的索引,或者固态磁盘这些最佳方法时,一个大约10ms响应时间的数据库查询被认为是效果不错的。

当然,RAM要比asyncio要快几个数量级,但是简单的"key-value"型的存储结构,并不能实现软件工程师们所常常依赖的许多特性。比如,多索引和基本类型检测是非常有用的,也最好能有像"ORDER BY","LIMIT"和"OFFSET"这些功能。

此外,Redis的性能、高级特性及其文档,已经给我们留下了非常深刻的印象。所以我们写了一个可被Redis支持的对象映射器:"subconscious",它依赖于asyncio和Redis的强大原语。使得你能以RAM的性能利用数据库,这就像是一个SQLAlchemy的精简版(不支持"JOIN"操作)。译者注:Redis:一个key-value存储系统

译者注:SQLAlchemy:Python编程语言下的一款开源软件。提供了SQL工具包及“对象关系映射”工具,使用MIT许可证发行。

你可以如下定义一个模型(更多细节请查阅 official repo):

a192bc33b80d481bbe273620db14938c.png

然后,你可以查询和使用你的这个模型:

31e92592d0594c2ea6f08c6d7b299d6e.png

你也会找到很多你期望在传统的ORM中有的功能。下面是如何向一个满足属性:{US, college-age, male}的用户发一个推送的过程:

3a1cb78fdca64b319af81c6066a071ea.png译者注:ORM:对象关系映射

为了证明在实际中这个工具(subconscious)是多么强大和方便使用,我们把一个类似Pastebin的网站和大约100行代码放在了一起。网站URL:http://52.170.82.45/

源代码:https://github.com/paxos-bankchain/pastey

我们用Microsoft Azure中最廉价的应用实例(称作F1,拥有1核处理器以及2GB的RAM)上加载和测试了这个APP,结果数据是很漂亮的:大约41秒内发送了10000次页面请求

页面响应时间的中位数大约是19毫秒

大约22毫秒内,90%的页面做出了服务响应

Redis可以保存在磁盘上,但是对比传统的数据库,它的持久性更弱。同时,它的事务和回滚很复杂,而且对于及数据完整性,几乎没什么保证。一些常见的用例如下:可以从日志中重播的临时数据(所以持久性不是大问题)

频繁更新的数据:写入RAM比写入磁盘要快得多

当延迟是非常重要的考虑因素时

当相同的数据被定期查询,同时数据的容量很低,以及/或者你有很充足的硬件预算时

对于低吞吐量的应用或者适用于水平缩放的应用来说,这些特性可能无法提供让人兴奋的充足的优势。但是对于高吞吐量的应用来说,延迟对它们有着不可忽略的影响,那么,这种性能的提升就存在着重大的价值。

Subconscious是使用MIT许可证发行的开源工具,所以你可以自由地在你自己的项目中使用它。英文原文:https://eng.paxos.com/write-fast-apps-using-async-python-3.6-and-redis

译者:guoziqing

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值