美文网首页
阿里serverless服务

阿里serverless服务

作者: 我叫Aliya但是被占用了 | 来源:发表于2020-08-19 10:15 被阅读0次

serverless常用的以FaaS为主,即函数为粒度的服务。特点是成本低、自动扩缩容、事件驱动、无状态性。每次都要冷启动,本地级缓存不可用。

市面上的服务商最早是amazon、谷歌云这些,国内的有阿里和腾讯。网上的一些教程以amazon为主,本来也想用amazon,但是被要求绑定信用卡(或者visa借记卡,但老实讲,这年头谁还有那么多卡,我只有工资卡,非visa),所以选择了阿里

阿里函数计算服务可以计量收费,且每月有一定的免费额度,对于学习来说足够了。后面在函数服务中使用数据库时选用的mysql,也是因为mysql可以免费用一个月,so

注册、登录完成后,会引导你新建一个函数


选择http函数,以做为接口api
image.png

页面下方有执行按钮,可以看到运行结果


image.png

红圈的地址可以拿到公网访问,但返回的是流(原因见上方蓝底黑字,这个不重要,且我没钱买域名)。使用fetch在浏览器中访问

fetch('https://xxxxxxx.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/test2/mysqltest/').then(res => res.json()).then(res => console.log(res));

访问成功~

开发调试

vscode有一个叫Aliyun Serverless的阿里官方插件(v1.27.12这个版本有bug,避开这个版本)。此插件需要配合docker使用,配置方法和插件使用方法见插件介绍页

vscode开发插件 阿里介绍

  • 在vscode中绑定AccessKey时建议你创建子帐户,创建后要记得分配权限
  • 我的docker配置 docker run --rm -it -e FC_ACCESS_KEY_ID=LTAI***cKm -e FC_ACCESS_KEY_SECRET=nVmM***VWJw -v $(pwd):/code nodejs10

访问数据库

看官网文档发现,想让函数计算服务访问数据器,需要:专用网络(PVC)、云服务器(ECS)和数据库(RDS),且它们最好都在一个地区下的一个区里,如都在 华东 1(杭州) 可用区 G

PVC下建立交换机、ECS要设置安全组、RDS要设置白名单(交换机、ECS的ip)。其中ECS需要单独购买,虽然计量收费也不贵,但是

来来回回设置这设置那,好麻烦啊!!!

如果你看到这里还没开始动手,可以去看看腾讯[哭笑]

将代码下载到本地,并修改为

const { Server } = require('@webserverless/fc-express')
const express = require('express');
const app = express();

app.all("/", (req, resp) => {
 // resp.setHeader('Content-Type', 'text/html');
 // resp.send('hello world');
 var mysql = require('mysql');
 var connection = mysql.createConnection({
   host  : 'rm-bp13z2113ts31os09.mysql.rds.aliyuncs.com',
   user  : 'root',
   password : 'Ss123456!',
   database : 'test_fn'
 });

 connection.connect();
   connection.query('SELECT * from user', function (error, results, fields) {
   connection.end();
   if (error) throw error;
   console.log('The solution is: ', results[0].solution);
   resp.send(results);
 });
}); 

const server = new Server(app);
// http trigger entry
module.exports.handler = function(req, res, context) {
 server.httpProxy(req, res, context);
};

因为它是基于dorker运行的,且这个服务阿里不允许指定端口,所以需要使用他们的插件 @webserverless/fc-express 中转一下

注意事项

上面提到,serverless的优点是

  1. 将服务器管理的工作抽象给了供应商
  2. 按量付费,成本低
  3. 自动扩缩容、高可用(一个函数、服务崩溃,不对其它造成影响)
  • 避免多个依赖:按量付费中的量是函数执行(活动)时长。
    所以当 异步函数A 内部依赖 异步函数B、C...时,A的时长就会被拉长,但空闲的函数也是活跃的状态。且每个函数都可能超时或错误,A会变的不稳定且不可控。
    如controller模式,最好去掉controller,仅留具体功能。

  • 避免多层依赖:serverless函数应该是独立且高度分离的。
    所以当 异步函数A 内部依赖 异步函数B, B又依赖C时,导致的超时、错误、停机等风险成倍增加。
    如C因为错误让B超时,A就有可能永远处于等待中;又或者一旦C改变了,发生灾难性的链锁错误。

  • 避免递归:因自动扩缩容特性,递归可能会导致资源指数级的浪费,尤其是递归函数还调用了其它函数时。

它不适用于业务逻辑紧凑(网状依赖)的业务,适用于依赖异步逻辑、线性依赖

相关文章

网友评论

      本文标题:阿里serverless服务

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