函数计算-建立一个简单的数学计算函数场景

Serverless作为一种微服务是一种概念,Serverless允许你提供代码或可执行程序提交给云厂商的解析服务(如阿里云的FunctionComputer等),由解析服务来为你执行它们,而你无需自己管理服务器、配置环境、Web环境等。这就是所谓的执行即服务execution-as-a-service,这样的一种概念听起来非常吸引人,实际上也可以算是一场革命,引用一张经典图轨迹图,让大家看看整个IT运维运行的发展轨迹,如下图:

图解:犹如我们从爬行动物猩猩一样,最初靠两只手和两只脚慢慢的挪动,到逐步站立走稳,到最后解放双手直立行走成为真正的人,这种演变过程犹如整个IT发展的过程,首先经过笨重的物理机--》虚拟化--》云计算--》容器--》微服务整个演变,这样的演变,开发者变得更加纯粹、自由、更加轻量。开发者开始无需关注硬件资源,无需考虑多线程,无需考虑扩容,无需考虑流量瞬间峰值的未雨绸缪,极大解放研发生产力,专注做自己擅长的事情(Coding),我甚至觉得,未来的开发者或许就剩下前端开发而无了后端开发。

哪么Serverless到底特点都在哪里,适用那些业务场景?

其特点:

1、细粒度的计算资源分配

2、不需要预先分配资源

3、真正意义上的高度扩容和弹性

4、按需使用,按需计费。

根据Serverless的这些通用特点,我归纳出几种典型使用场景,供大家参考。

事件请求场景

A、网店中的商品图片维护,根据商品陈列位置,要求需要动态切割成不同尺寸图片,或者打上不同水印,当店家把图片上传到阿里云OSS上,会通过Function computer上定制的trigger来触发函数计算,根据计算规则,生成不同尺寸的图片,满足电商陈列使用,整个过程无需再搭建额外服务器,也无需网站美工干预。

B、物联网行业中,由于物联网设备传输数据量小,且往往是固定时间间隔进行数据传输,因此经常涉及低频请求场景。例如:物联网应用程序每分钟仅运行一次,每次运行50ms,这意味着CPU的使用率为0.1%/小时,这也意味着其实有1000个相同的应用可以共享计算资源。而Serverless架构下,用户可以购买每分钟100ms的资源来满足计算需求,通过这种方式就能够有效解决效率问题,降低使用成本。

C、用户注册时发邮件验证邮箱地址,同样通过定制的事件来触发后续的注册流程,而无需再配置额外的应用无服务器来处理后续的请求。

事件触发固定时间触发,例如在夜间或者服务空闲时间来处理繁忙时候的交易数据,或者跑批量数据,来生成数据报表,通过serverless方式,不用再额外购买利用率并不高的处理资源。

流量突发场景

A、移动互联网应用经常会面对突发流量场景,例如:移动应用的通常流量情况是QPS 20,但每隔五分钟会有一个持续10s的QPS 200流量(10倍于通常流量),传统架构下企业必须扩展QPS 200的硬件能力来应对业务高峰,即使高峰时间仅占整个运行时间的4%;而在Serverless架构下,用户可以利用弹性扩展特性,快速构建新的计算能力来满足当前需求,当业务高峰后,资源能够自动释放,有效节省成本。

B、视频直播某次专场活动,由于无法预估会有多少点播的观众视频接入,把转码和流量扩容这部分内容通过Function来处理,无需考虑并发和流量扩容。

处理大数据场景

A、由于安全审计问题,你需要从存放在OSS(多个region)里过去一年的数据拿出来(1个小时一个文件),你需要从中找出特定关键字访问的日志,同时做聚合运算(计算出总值)。如果使用阿里云Function Compute。你可以把访问高峰期每两小时的日志,或者访问低谷期每四小时的日志交给一个计算函数处理,处理结果存入RDS,使用一个函数分派数据给另一个函数,使其执行成千上万个相同的实例。这样会同时运行近千个计算函数(24 x 365 / 10),在不到一分钟的时间内完成整个工作。同样的事情交给ECS+计算脚本来做计算,单单为这些instance配置网络就让人头疼(不同region无法走内网下载OSS文件):instance的数量可能已经超出了子网中剩余IP地址的数量(比如,你的VPC使用了24位掩码)。


以上三个场景,都是非常典型的Serverless场景。

下面我结合阿里云的Function Compute这个产品来完成一个简单场景的设置,阿里云的Function Compute目前主要组成部分有这几大块:

1、Service定义: 服务是资源管理的基本单位 ,可以授权管理等,简单理解为空间或者java中的包名。

2、Event定义: 任何能够触发函数执行的事情称之为事件 ,一个Event中可以触发多个Tigger来执行函数

3、Trigger定义: 用户通过触发器定义和管理事件的生成方式, 触发直接对应的执行函数。

4、Function定义:真正执行的执行函数, 函数是调度和运行的基本单位。

5、Project 和log Store 定义:主要是存储执行日志,整体配置稍微复杂,但是日志方便后续追踪和调试程序。

阿里云执行函数可以通过两种方式来执行,可以在控制台上配置好service,even,trigger和书写Function后执行即可看到结果,还可以通过命令行工具Fcli工具来执行函数,目前阿里云支持的脚本语言仅限于Nodejs,听说很快要推出python版本。

Fcli界面如下:

从控制台界面上看,都是很常用命名方式,可以通过config来配置account_id,access_key_id和 access_key_secret等,每一个命令行都给了相对详细的帮助,可以通过-help来查看。

Fcli的使用整体流程:

1、用户先授权,要填写accout_id,access_id,access_key,如果设置失败,还需要重新用config进行重置,或者删除.fcli下的配置文件

2、 创建service

3、创建project,store

4、授权grant service(4步骤,包括role,policy name,log project,log store)

5、进入service空间,开始写function程序。

6、执行Function程序即可看到结果

一个科学计算的例子

明白上面概念后,我来简单实现一个计算一个随机数的例子,通过控制台进行配置:

1、配置Service,见图:

2、配置Trigger,见图:

3、编写Function(函数执行时间最长300秒),见图:

代码段:

'use strict';
console.log('Loading function');
exports.handler = (event, context, callback) => {
    var min_nmu = 1000;
    var max_nmu = 10000;
    var generatedNumber = Math.floor(Math.random() * max_nmu) + min_nmu;
    callback(null, generatedNumber);
};

4、查看执行结果:配置Project+Store,略微复杂,后续使用方便,注意这块内容是收费的,费用较低。配置完成后,点击执行看看执行结果:

现状:

目前Function compute和OSS产品能无缝集成,后续阿里云推出API Gateway可以完美地连接到任何其他的云产品,也非常容易构建出控制流量、安全认证、标准化的WEB服务等,后续阿里云还承诺再推出Python、Java等执行环境。

时间: 2024-11-08 19:07:40

函数计算-建立一个简单的数学计算函数场景的相关文章

Basic程序,能进行简单的数学计算

达特茅斯学院早期开发的Basic程序,能进行简单的数学计算,运行在该校分时系统(DTSS)的模拟器上.DTSS的电传打字机使用黄色纸张,打印速度很慢.新浪科技讯 北京时间5月5日下午消息,1964年的5月1日,美国达特茅斯学院的一台电脑运行了世界上第一个BASIC程序,从此改变了世界.BASIC语言由约翰·开米尼(John Kemeny)和托马斯·库尔茨(Thomas Kurtz)两位教授以及一组学生共同创造,其全称为Beginner's All-Purpose Symbolic Instruc

《趣题学算法》—第1章1.2节简单的数学计算

1.2 简单的数学计算以上那样利用循环重复将部分数据简单地累加,可以解决很多计数问题.然而,如果计数问题可以通过数学计算直接得出结果,往往可以大大改善算法的时间效率,请看下列问题. 问题1-5 小小度刷礼品图片 7 问题描述 一年一度的百度之星大赛又开始了,这次参赛人数创下了吉尼斯世界纪录.于是,百度之星决定奖励一部分人:所有资格赛提交ID以x结尾的参赛选手将得到精美礼品一份. 小小度同学非常想得到这份礼品,于是他就连续提交了很多次,提交的ID从a连续到b.他想知道能得到多少份礼品,你能帮帮他吗

java 自学 新手-一个简单的Java 计算问题

问题描述 一个简单的Java 计算问题 输出结果总是0,大牛们,可不可以告诉我错在哪里了!代码如下package HelloWorld;import java.util.Scanner;public class Tax { public static void main(String[] args) { double a = 0.0b=0.0;//定义工资为a个人所得税为b; System.out.println(""请输入您的月工资,我们将严密计算您的个人所得税!"&quo

求一个简单的算法计算2个时间间隔的工作日。

问题描述 我要的是一个简单的算法计算2个时间间隔的工作日,也就是除去周六和周日,哪位能提供个算法思路,多谢!尽量详细点,谢谢! 解决方案 解决方案二:monday->wednesdaytuesday->tursday......sunday->tuesday解决方案三:看下是不是对的.publicstaticvoidmain(String[]args){try{System.out.println(check(string2Date("2010-4-29"),stri

计算问题-一个简单的运算的问题

问题描述 一个简单的运算的问题 计算问题-一个简单的运算的问题-简单运算放大器设计">求解释运算过程. 解决方案 (b=4) * (a=3)把4赋值给b,3赋值给a,表达式的值为3 * 4=12 a-=(b=4) * (a=3)即a=3-12=-9 a+=a-=(b=4) * (a=3)即a=-9+-9=-18 解决方案二: 一个简单的问题[VB.NET]一个简单的问题?一个简单的背包问题

Ultradev实例教程:2.1 建立一个简单的access数据库

access|教程|数据|数据库 第二章:设置数据库 第一节.建立一个简单的access数据库 这一节我们将学习有关数据库创建的内容,用过Access创建数据库的朋友可以略过不看. 打开Microsoft Access,选择 文件 -〉新建数据库,然后选择一个位置保存你的数据库文件,这里我们按它默认的db1.mdb命名保存. 保存数据库后我们看到的是下面的界面,双击使用设计器创建表,开始创建一个数据表.我们这里的应用你只需照着步骤一步步做下去,即使你以前从没接触过数据库也没有问题,如果你想做深层

如何使用SQLyogEnt来建立一个简单的数据库

如果你选择PHP进行网站建设,那你必须懂得php建立数据库,那用mysql数据就是必须的了.刚接触php的朋友也许对这个mysql数据库很陌生,但如果有一款非常好用的数据库管理工具,那是用起来就方便多了,笔者几天就向大家介绍一款mysql的管理工具SQLyogEnt,笔者是用的 SQLyogEnt是英文版,目前好像没有中文版,由于功能强大,所以SQLyogEnt很受PHP用户的喜爱,接下就用实例来讲解下如何使用 SQLyogEnt来建立一个简单的数据库. 今天我建立的数据库名叫"mydb&quo

SQL点滴3—一个简单的字符串分割函数

原文:SQL点滴3-一个简单的字符串分割函数 偶然在电脑里看到以前保存的这个函数,是将一个单独字符串切分成一组字符串,这里分隔符是英文逗号","  遇到其他情况只要稍加修改就好了 CREATE FUNCTION dbo.f_splitstr(     @str varchar(8000))RETURNS @r TABLE(id int IDENTITY(1, 1), value varchar(5000))ASBEGIN /* Function body */    DECLARE @

C++写的一个简单类模版 友元函数求最大最小值

问题描述 C++写的一个简单类模版 友元函数求最大最小值 如题 , 编译时总是说 [Error] ld returned 1 exit status (编译器dev c++) using namespace std; template <typename t> class CValue { t data[5]; public: CValue(); friend t Max(CValue <t> a); friend t Min(CValue <t> a); }; tem