[云框架]FaaS & Serverless架构

栏目: 后端 · 发布时间: 6年前

内容简介:[云框架]FaaS & Serverless架构

[云框架]FaaS Serverless架构

FaaS (Function as a Service)/ Serverless 概念在最初并不为大众所接受,但随着微服务架构及 事件驱动架构 的发展成熟,越来越多人认识到了其中价值。( Serverless架构综述

简单来说,FaaS/Serverless是一种新的计算范例,为开发者和运营商提供简单、高效、可扩展的计算方法,我们可以把它看作是比微服务更细粒度的架构模式。FaaS/Serverless并不意味着没有服务器,而是通过将复杂的服务器架构透明化,使开发者专注于业务/任务本身,强调了一种减少计算资源关注、工作粒度从服务器切换到“任务”的思想。( FaaS、PaaS和无服务器体系结构的优势

对于开发者来说,FaaS/Serverless意味着:

  • 无需管理服务器,仅需关注业务代码,其他工作将由平台完成

  • 代码微小化,只完成一个功能,维护升级非常简单

  • 需要时执行计算任务,无需支付闲时费用(真正的按需计算和付费)

对于平台运营者来说,FaaS/Serverless意味着:

  • 资源利用率极高,只在实际计算时消耗资源

  • 一个适用于任何语言、任何技术设计的方法的统一运行平台

本篇 云框架 将以一个自建FaaS平台 http://www.faas.pro 及两个FaaS方法(function)实例 ETCD_v3Twitter Function Image 为例介绍FaaS/Serverless及其最佳实践。

适用于以下场景:

  • 低频请求场景

  • 流量突发场景

内容概览

  • 在线演示
  • 快速部署
    • 平台部署
    • 方法实例
  • 框架说明-平台
  • FaaS方法开发
  • 生产环境
  • 常见问题
  • 更新计划
  • 社群贡献

在线演示

http://www.faas.pro

快速部署

平台部署

  1. 安装 Docker 及Docker Compose

  2. 准备域名(这里使用 faas.org 域名进行部署安装,若你有自己的域名,可使用自己的域名)

  • 增加本地域名解析(可能需要使用 sudo su 命令切换到root账户)
sudo echo "机器IP www.faas.org" >> /etc/hosts
sudo echo "机器IP api.faas.org" >> /etc/hosts
sudo echo "机器IP hub.faas.org" >> /etc/hosts
sudo wget -P /etc/ssl/faas.org/ fs.faas.pro/faas.org.key
sudo wget -P /etc/ssl/faas.org/ fs.faas.pro/faas.org.crt
  1. 平台安装

  2. 安装Fn客户端( Fn - CLI tool

    curl http://fs.faas.pro/fn | sh
    export API_URL=http://api.faas.org
    fn --help
  3. 访问平台

[云框架]FaaS & Serverless架构

[云框架]FaaS & Serverless架构

方法实例

在进行操作实例前需注意:

  • 确保上文平台及Fn客户端已完整部署

  • 确认配置环境变量 API_URL=http://api.faas.org

ETCD v3 FaaS方法实例

ETCD_v3介绍

查看方法源码

  1. 部署一个ETCD_v3应用 ,若已部署忽略本步骤。 ( 部署方式 )

  2. 创建应用(etcd_v3 server地址替换 ***

fn apps create --config ETCD_SERVER=*** etcd_v3
  1. 创建路由
fn routes create etcd_v3 /command -i hub.faas.pro/etcd_v3:0.0.1
  1. 运行方法
  • PUT
echo '{"method":"put","key":"hello","value":"world"}' | fn call etcd_v3  /command
  • GET
echo '{"method":"get","key":"hello"}' | fn call etcd_v3 /command

Twitter Function Image方法实例

Twitter Function Image可用于查看推文( 需要科学上网

查看方法源码

  1. 配置 Twitter Appconfigure Customer Access and Access Token

  2. 创建应用(根据你的twitter账号信息更改 *** )

fn apps create --config ACCESS_SECRET=*** --config ACCESS_TOKEN=*** --config CUSTOMER_KEY=*** --config CUSTOMER_SECRET=*** twitter
  1. 创建路由
fn routes create twitter /tweets -i hub.faas.pro/func-twitter:0.0.1
  1. 运行方法,可以使用任何人的账号名替换 *** (username值)
echo '{"username":"***"}' | fn call twitter /tweets

框架说明-平台

平台架构图如下所示:

[云框架]FaaS & Serverless架构

  • Traefik :了解学习现代化反向代理/负载均衡

  • FunctionAPI:提供一个无状态的API服务。提供FaaS方法创建,配置,运行等API

  • Mysql:存储FaaS方法元数据

  • Redis:消息队列,每次方法调用API产生的任务送往消息队列,调度与执行器从消息队列获取任务并执行

  • Fn:命令行客户端,使你本地开发、本地部署

  • Hub:存储你的方法镜像,使用docker官方镜像仓库服务。项目地址: https://github.com/docker/distribution

开发你的FaaS方法

如果想要自己开发FaaS方法,可参考 ETCD_v3Twitter Function Image 这两个例子。

需要注意的是,与普通应用相比,FaaS方法有以下特点/不同:

  • FaaS方法可使用任何语言进行开发
  • FaaS方法具有一定的运行时间,即完成计算后退出
  • FaaS方法从标准输入或环境变量获取输入数据,以标准输出输出计算结果
  • FaaS方法需要以dockerfile进行镜像打包

步骤:

  1. 使用fn命令构建你的代码:
# 创建func.yaml文件 - 用Docker Hub username替换$USERNAME
fn init $USERNAME/hello

# 创建function
fn build

# 测试 - 通过管道传入数据, 例如:`cat hello.payload.json | fn run`
fn run

# 完成后构建并将其push至Docker Hub
fn build && fn push

# 创建一个app - 每个app仅执行一次
fn apps create myapp

# 为function创建一个route
fn routes create myapp /hello
  1. 使用lambda函数(确保你的node.js主处理函数文件名为: func.js )
fn init --runtime lambda-node hub.faas.org/lambda-node

生产环境

TODO

常见问题

TODO

更新计划

TODO

点击查看 历史更新

社群贡献

云框架 系列主题,遵循 APACHE LICENSE 2.0 协议发布。


以上所述就是小编给大家介绍的《[云框架]FaaS & Serverless架构》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Beginning XSLT 2.0

Beginning XSLT 2.0

Jeni Tennison / Apress / 2005-07-22 / USD 49.99

This is an updated revision of Tennison's "Beginning XSLT", updated for the new revision of the XSLT standard. XSLT is a technology used to transform an XML document with one structure into another ......一起来看看 《Beginning XSLT 2.0》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具