阿里云云函数2023年试用体记

之前体验过两次阿里云云函数,当时因为限制较多、部署费事、没有合适的场景而放弃了。近期于无意中看到云函数支持容器作为运行时,环境完全可控,一下子来了兴趣。

由于本人最近在学习CV方面的知识,所以容器运行时支持GPU实例是最吸引我的一个点,参照官方文档 https://help.aliyun.com/document_detail/337825.html 部署了一个实例用于对图片做边缘检测,过程还挺顺利。

不过有几个点需要注意下:

  1. 地区、命名空间、仓库、OSS等根据自己的实际情况修改;
  2. OSS bucket需要是公共读写权限;
  3. 教程中漏了一点,使用Dockerfile打好在本地打好镜像后,需要先手动把镜像push上去;
  4. 实例有其生命周期,3~5分钟无请求才释放,可预留实例以减少冷启动时间,可根据实例实际运行时的指标来配置CPU、内存、GPU等参数,避免资源浪费。

这种根据请求来按需启动实例的模式很新颖,其颗粒度比起弹性云服务器(如EC2)更小,不由升起一个念头:用它来做Web服务或者代理服务不就可以自动伸缩了吗?而且自带负载均衡。

Web服务简单测了下,部署了一个nginx镜像,选用最小的实例配置(0.05核128M内存),访问nginx默认的Welcome页面,单实例可支撑50/秒的并发。看官网文档介绍了如何部署WordPress,看来用它做常规的网站还是没问题的。

代理服务是我研究测试的重点,先后尝试了Squid代理和Python做代理。

由于云函数的限制,只支持HTTP/Socket/gRPC三种请求方式,并对header有诸多限制,Docker内的Squid虽然可以跑起来,但实际不能代理成功,网关直接返回404错误而没有路由到实例上,这个是硬性限制,没办法。而本地和EC2上的Docker运行相同的Squid镜像是完全没问题的。

再说说Python的,用Python作代理自不能像Squid那样方便,只能接收网址和参数的请求并返回,比如可以传要请求的url,请求方式是GET还是POST,请求的参数体,必要的时候带上cookie信息,云函数端的Python接收这些参数后,代理请求并返回相应的信息。通过Flask、FastAPI等框架可以快速实现这一需求。当然语言不只局限于Python,用PHP/Java/NodeJs也同样可以实现这个功能。

如果代理仅仅能实现这点功能还是远远不够的,好在有这想法的不只我一个人,Github上有个开源的用Go写的能跑在多家云函数的库,不过需要配合客户端来使用,虽说麻烦了点,但还是能满足部分人的需求的。地址如下:https://github.com/shimmeris/SCFProxy

这次体验暂时就到这了,下面该想想当前的业务有哪些适合迁移到云函数上,以及挖掘更多的适用场景。

Leave a Comment

豫ICP备19001387号-1