在工作中,我们将Python 2.7用于所有微服务。我们的大多数服务都有很少的业务逻辑,但足以不使用所有现成的即插即用框架。因此,我们的前端反应仪表板主要是REST / CRUD。所以我们使用:
Python 2.7
我们还有工人和rpc插入rabbitmq。
正如我所说,服务器的大部分工作是:解析request / json,执行sql或弹性搜索查询,格式化前端,并做出响应。执行请求时有很多缓慢的IO。现在我们有越来越多的服务间呼叫,我们使用http调用或rmq-rpc与rabbitmq。我们设计了一个包装器来调用我们的路由,这样就可以在http或rmq-rpc中调用它们而没有任何区别。
拥有c#/ go后台,我习惯于拥有可以处理异步而没有太多问题的高效Web服务器,即使我们在http调用期间执行了大量IO请求,也可以扩展。但是使用uwsgi几乎是不可能的,因为每次我们通过sql-alchemy调用MySQL它会阻塞整个线程/进程,我们无法扩展那么多,我们只需添加更多服务器。我们可以为每个cpu添加更多进程,但这感觉不对,只是推迟了pb,我们可能会遇到内存问题(我们有本地缓存来加快速度。)
所以我读到了关于python,gevent,tornado,twisted等的异步内容,看起来很棒,但似乎与sql炼金术不太合作。关于烧瓶,Django的东西。但我们不需要花哨复杂的Web框架,只需简单的http路由。
筹码是3岁,我们无法改变一切。商品新闻,我们与uwsgi和金字塔有很松散的耦合,但是Spring Python和SQL炼金术的联系非常紧密。我们可以找到一种方法来使我们的路线成为线程保险箱。
所以我的问题是,鉴于我所说的,你会推荐哪些堆栈,以及那些严格的限制?
我打算测试一些想法,但如果你能指出我正确的方向,那可能会节省我很多时间。
奖励:如果你必须从头开始,你会用什么? (仍然使用python 2.7和sql alchemy)
感谢您的帮助。
免责声明:我知道这是某种开放式问题,但关于堆栈the last questions的the subject是least 3 years old。 I posted the same question on reddit without luck.
答案 0 :(得分:0)
我认为你真的需要使用支持async的db驱动程序,postgres的psycopg2我可以这样做。
这不是sqlalchemy或金字塔的直接问题(特别是因为您可以在金字塔中设置不使用全局变量的东西)。
我一直在编写一个带金字塔和gevent的websocket服务器,效果很好。它不使用sqlalchemy,但诀窍是你不得对sqlalchemy代码使用范围会话,这是异步的。