返回

跨越云原生:基于OpenFaaS的函数服务实践

前端

一、云原生演进下的BFF模式探索与架构设计

1. 前后端分离BFF模式演进

传统BFF架构中,前端是通过直接请求后端接口获取数据,后端通过返回JSON数据的方式来供前端使用。但在微服务架构下,如果后端服务较多,那么在后端统一维护BFF接口的代价就非常大了,很难保证这些后端服务能稳定、及时地提供数据。

因此,将BFF单独拆分出来,作为微服务架构中的独立服务来进行维护,这种架构可以独立于后端服务,由专门的前端开发人员来负责,而前端可以通过BFF接口获取后端返回的数据,从而避免了前端与后端服务之间相互依赖的问题。这种方式不仅减少了后端服务的压力,而且还提高了前端开发的效率。

2. BFF与函数服务的结合

在BFF架构中,如果使用函数服务来实现,可以进一步降低成本,提高开发效率。函数服务是一种新型的计算服务,它可以按需运行代码,并按运行时间收费。这意味着,如果使用函数服务来实现BFF,则只需要在需要的时候运行代码,不需要的时候则不需要付费。

另一方面,函数服务可以免去服务器运维的麻烦,开发人员可以专注于代码的开发,而不用担心服务器的运维。因此,BFF与函数服务的结合,可以进一步降低成本,提高开发效率。

二、基于OpenFaaS的函数服务搭建

1. OpenFaaS简介

OpenFaaS是一个开源的函数即服务(FaaS)平台,它可以让你在任何云环境中轻松地部署和管理无状态函数。OpenFaaS基于Kubernetes,它将函数部署为Kubernetes Pod,并使用HTTP触发器来触发函数的执行。

2. OpenFaaS部署与函数开发

2.1 OpenFaaS部署

OpenFaaS可以部署在任何Kubernetes集群中,这里以Minikube为例。首先,在本地安装Minikube:

$ minikube start

然后,使用Helm安装OpenFaaS:

$ helm repo add openfaas https://openfaas.github.io/faas-netes
$ helm repo update
$ helm install openfaas --namespace openfaas --set serviceType=NodePort

2.2 函数开发

在OpenFaaS中,函数可以使用任何语言编写。这里以Node.js为例,创建一个名为hello-world的函数:

$ mkdir hello-world
$ cd hello-world
$ npm init -y
$ npm install @openfaas/template
$ npx @openfaas/template init --lang nodejs

修改handler.js文件,添加以下代码:

module.exports = async function (context, req) {
  return {
    statusCode: 200,
    body: 'Hello World!',
  };
};

然后,使用以下命令将函数部署到OpenFaaS:

$ faas-cli deploy -f hello-world.yml

3. 函数日志与监控

为了监控函数的运行情况,可以安装Prometheus和Grafana。Prometheus是一个开源的监控系统,它可以收集和存储时间序列数据。Grafana是一个开源的仪表盘和图形工具,它可以将Prometheus收集的数据可视化。

3.1 Prometheus安装与配置

首先,安装Prometheus:

$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm repo update
$ helm install prometheus prometheus-community/prometheus

然后,配置Prometheus以收集OpenFaaS的指标数据:

$ kubectl edit configmap prometheus-server -n monitoring

spec.data下添加以下内容:

scrape_configs:
  - job_name: 'openfaas'
    scrape_interval: 15s
    static_configs:
      - targets: ['localhost:8080']

3.2 Grafana安装与配置

首先,安装Grafana:

$ helm repo add grafana https://grafana.github.io/helm-charts
$ helm repo update
$ helm install grafana grafana/grafana

然后,配置Grafana以显示OpenFaaS的指标数据:

$ kubectl port-forward -n monitoring svc/grafana 3000

在浏览器中访问http://localhost:3000,然后使用默认用户名和密码(admin/admin)登录。

在Grafana中,创建一个新的仪表盘,并添加以下面板:

  • Function Invocations: 此面板显示函数调用的次数。
  • Function Duration: 此面板显示函数执行的时间。
  • Function Errors: 此面板显示函数执行错误的数量。

三、总结

本文以团队实际案例为基础,分享了我们在新业务场景中基于OpenFaaS进行函数服务搭建的实践过程,涉及函数架构设计、日志监控体系搭建、容器安全体系建设等方面。基于函数服务的新一代应用构建实践将帮助我们更好地构建稳定可靠、高效敏捷、安全可控的云原生应用。