美文网首页
阿里serverless函数计算HTTP触发器对接flask

阿里serverless函数计算HTTP触发器对接flask

作者: 萌木盖 | 来源:发表于2019-04-24 14:05 被阅读0次

    先看啥是serverless

    无服务器架构

    假设您计划采购服务器开发一款短视频社交应用,那么您需要考虑很多的问题,例如:

    • 如何构建和运维一套弹性的稳定的视频处理后端服务?
    • 需要采购多少台服务器?
    • 服务器采用什么规格?
    • 如何配置网络和操作系统?
    • 如何部署环境?
    • 如何负载均衡?
    • 如何动态伸缩?
    • 如何升级配置?
    • 如何应对服务器宕机?
    • 如何应对用户请求峰值?
    • 如何应对系统监控报警?

    这么多情况就是一个字——麻烦

    服务的演化

    serverless演化

    当我们自己买机器搭建,就是物理机层。
    之后我们可能买阿里云或者腾讯云的ECS服务器,就到了云计算层。这个时候我们已经不用考虑硬件方面的问题。但是还有运维方面的问题。
    直到出现了serverless,我们只管写我们的代码,放上去。不需要考虑并发情况。不需要考虑cpu占用等等问题。他全解决了!美滋滋。
    如果我们把搭建的服务比喻成开旅店:

    服务 旅店
    物理机 从盖大楼开始干
    云计算 楼有了,从装修毛坯房开始干
    容器 有公版的装修图(配置文件),可以安排别人把每个毛坯装修成一个样子
    serverless 客人可直接拎包入住,你接待就行了

    使用文档

    阿里云serverless使用文档

    Flask的部署

    首先改代码

    启动函数不再使用以下方式

    if __name__ == "__main__":
        app.run(host='0.0.0.0', port=15005, debug=False)
    

    改为:

    base_path=""
    def handler(environ, start_response):
        parsed_tuple = urlparse(environ['fc.request_uri'])
        li = parsed_tuple.path.split('/')
        global base_path
        if not base_path:
            base_path = "/".join(li[0:5])
        context = environ['fc.context']
        environ['HTTP_HOST'] = '{}.{}.fc.aliyuncs.com'.format(context.account_id, context.region)
        environ['SCRIPT_NAME'] = base_path + '/'
        return app(environ, start_response)
    

    假设你文件名为main.py,那么一会在填写触发函数的时候就写main.handler
    因为他不是完全的python环境,所以还要安装包。
    要将所有包装到本地文件夹,进入到项目目录下pip install -t . flask或者pip install -t . -r requirements.txt然后将整体放上去

    阿里云新建服务

    1、进入函数计算的控制台管理界面,点击新建服务

    管理控制台
    2、输入项目名、项目简介,点击确定
    3、在新建服务那个位置,现在已经变成了新建函数,点击+!
    4、选择语言,python3,选择空白模板。点击选择
    5、
    触发器配置
    这个图里所写的验证的问题,已经解决,我会在最下面写解决方法。

    6、基础信息自己定、代码配置选文件夹上传

    image.png
    7、然后直接点下一步然后创建就完事了。

    调试及后续

    调试

    浏览器访问问题

    他这里给的那个链接不能直接用,浏览器打开之后是直接把那个页面下载下来了,如果响应是json类型,打开页面也是直接下载了xxx.json
    解决方案就是自定义域名。

    使用签名认证

    他的文档里没有python的代码,是一个js的。而且写的一点也不走心。
    这里https://github.com/aliyun/fc-python-sdk/blob/master/fc2/auth.py
    有认证的代码。

    使用签名认证(更新内容)

    虽然他自带了验证的功能,但是不能用自己的request写了需要用阿里提供的包。

    from email.utils import formatdate
    import requests
    import email
    import fc2
    client = fc2.Client(
    endpoint='https://xxxx.cn-hangzhou.fc.aliyuncs.com',
    accessKeyID='xxxx',
    accessKeySecret='xxxxxx')
    path="/2016-08-15/proxy/test/test123/"
    #headers = client._build_common_headers('GET',unescape(path),{}, {});
    header = client._build_common_headers('GET',path,customHeaders={}, unescaped_queries=None);
    print (header)
    c=client.do_http_request('GET', 'test', 'test123', '/')
    print(c.text)
    

    实现灰度发布

    通过这个进行版本管理
    https://help.aliyun.com/document_detail/96464.html?spm=a2c4g.11186623.6.676.3c13886fTYhCV0

    连接数据库

    刚开始用是无权调用数据库的。因为有一个ip的白名单。而它不在里面。
    使用专用网络,你要弄一个vpc网络。
    这边参考:https://help.aliyun.com/knowledge_detail/72959.html?spm=a2c4g.11186623.6.670.4eff29e9WiAOYx

    日志系统

    他这里类似于自带一个ELT 的功能,还要一个日志仓库。

    代码是否正常启动,是否存在异常

    对路由发送一个请求,如果有错误,就会把错误当响应一样返回。

    费用调查

    每日调用次数 函数的内存规格 函数执行一次的时间 每日函数调用费用 (单位:元)
    五万 1G 0.2S 1.18元

    阿里云serverless先说到这,因为有一些还没测,所以此篇博客日后再完善

    亚马逊的serverless

    可以使用Zappa部署
    https://github.com/Miserlou/Zappa

    相关文章

      网友评论

          本文标题:阿里serverless函数计算HTTP触发器对接flask

          本文链接:https://www.haomeiwen.com/subject/tokwgqtx.html