2017年在便利蜂的时候,就用python 搭建 排面自动识别的httpserver 的算法服务。当时感觉flask 还很好用的。由于是公司自己用,也没有太多的高并发卡点。
后来在敦煌网负责AI算法部的时候,我们也延顺了flask的整个框架。由于是在线网站购物,当时写的还是实时出APP首页的轮播页 banner,还是有些流量并发的,用的是gunicorn +flask启动多进程的方式,感觉也很稳定。上线一直稳定运行了一年。当时的项目名称叫神笔画banner。得到了公司的认可。
这次呢,我们做了一个产品。由于我算法出身,写python比较方便,因此招聘的后端工程师也是python的。JAVA和算法天然具有隔离。
这次我们发现flask有太多问题了。首先是SS L证书的问题,gunicorn倒入SSL证书后启动不稳定,搞了好久。
然后是多进程并发呢,奇怪。流量一上来,偶发性阻塞。莫名的故障。
首先我们怀疑是pymysql包的问题,然后把数据库连接池做了很酷炫的管理。发现没有问题了。
接着做了监控,发现确实是https的服务不健康了。
这下所有矛头都指向flask。
好好研究了下,发现python3这个语言这几年也发展了不少。已经有协程Async,包括yield,await等等。
换了一个框架,用了fastapi和 uvicorn。把整个算法框架重构成了协程的方式。
终于彻底解决了高并发的阻塞bug。感觉整个人都通畅了。整个团队都很开心。然后今天的流量就很顺利的打起来了。数据统计突破了万为单位。达到了1.24w。虽然还是微不足道,但证明我们这个方向是对的。
