深入玩转 Openfaas 之应用发布

摘要

云计算也好,云原生也罢,科学技术的发展的一切内在的驱动力都是为了更好的解放和发展生产力为目标而努力的,很多业务技术开发人员不愿深入底层逻辑这也不难理解,如果一切只是为了产品服务,为啥子要学习和掌握那么多底层的基础架构设计逻辑,难道底层架构能够帮助项目更好的,更快的实现业务快速迭代开发吗?编码实现应该是人人都具备的一种能力,编码本身不具备所谓创新的技术点,但是很多企业选型一开始就将业务逻辑绑定在了架构之上了,随着技术的发展,原来的架构肯定会过时,甚至造成烂尾的技术债务问题;目前的所谓的容器化上云也是一样的,只是在原有架构的层级之上的一种妥协;这世界哪有什么多平滑过渡,所有的改造都是需要流血的革命才能完成重建,妥协的最后只会产生时代的怪胎;因此本文基于函数计算服务进行应用服务的发布设计和实践,如果讲基础设施架构是骨架,那么应用的发布和接口对接则是业务产品走向价值输出的核心;

关键词: 边缘计算;openfaas; 基础架构;应用发布;

通信机制


监视器提供了一个外部世界和函数之间的非托管的通用接口。它的工作是收集从API网关来的HTTP请求,然后调用程序。监视器是一个小型的Golang服务——下图展示了它是如何工作的:

| 上图:一个小型的web服务,可以为每个传入的HTTP请求分配所需要的进程。

每个函数都需要嵌入这个二进制文件并将其作为ENTRYPOINT 或 CMD,实际上是把它作为容器的初始化进程。一旦你的进程被创建分支,监视器就会通过stdin 传递HTTP请求并从stdout中读取HTTP响应。这意味着你的程序无需知道web和HTTP的任何信息。

备注: 大学的时候,当时真心看不懂 openfaas 的源码,就没有完全理解 openfaas 的设计思想,只是觉得 openfaas 用起来牛逼,但是不知者无畏却不是什么好的表述,工作三年以后,然后可以完全理解函数计算的设计思想才恍然大悟,原来是这么回事呀,本来之前还想着通过网关讲资源格式更改掉,但是因为 openfaas 将函数通过进程在运行,因此无论进入或者出去的信息实际上都无法通过网关进行干预的,所以对于接收什么函数或者解析那些数据格式都是在函数级事先进行约定的,函数的使用者,将传递进来的数据作为二进制数据接收就可以了,至于前后端如何对接数据,函数实现时进行约定就可以的;

函数应用

第一步: 密码获取

# 获取 openfaas 系统的密码

echo $(kubectl -n openfaas get secret basic-auth -o jsonpath="{.data.basic-auth-password}" | base64 --decode)

# 鉴权认证,登陆系统
faas-cli login -u admin --password xxx

第二步: 应用模板创建

# 创建基于 NodeJs 的前端
faas-cli new mate-web --lang node12 -p 12589
# 创建基于 Python3 的后端
faas-cli new mate-back --lang python3 -p 12589

第三步: 后端编码

函数入口代码(handler.py):

# from urllib.parse import parse_qs
# from .pkg.jwt import pkg_jwt as jwtClient
from .pkg.consts import consts
from .pkg.route import route
import json

#  后端函数服务入口
def handle(reqStr):
    """handle a request to the function
    Args:
        req (str): request body
    """

    req=json.loads(reqStr)
    route.routePage(req,consts)
    print("测试输出:",consts.resp)
    return consts.resp

第四步: 编译运行

# 镜像构建
faas-cli build -f  xxx.yaml

# 镜像推送(非必要)
faas-cli push

# 应用部署
faas-cli deploy -f xxx.yaml

必备小常识:

# windows & linux 设置代理
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# pip 生成依赖列表
pip freeze  > requirements.txt 

# pip 下载依赖
pip install -r mate-back/requirements.txt

访问测试

路由地址访问
curl -X GET -v -i http://192.168.139.139:31112/function/mate-back -H 'Content-type: application/json' -H 'Accept: application/json' -d '{"pathPage":"index","data":{}}'

curl -X GET -v -i http://192.168.139.139:31112/function/mate-back -H 'Content-type: application/json' -H 'Accept: application/json' -d '{"pathPage":"default","data":{}}'

方式一: curl 测试

# GET 请求
curl -X GET -v -i http://192.168.139.139:31112/function/mate-back  -H 'Content-type: application/json'  -H 'Accept: application/json'  -d '{"pathPage":"/"}'

# POST 请求
curl -X POST -v -i http://192.168.139.139:31112/function/mate-back  -H 'Content-type: application/json'  -H 'Accept: application/json'  -d '{"pathPage":"/"}'

# PUT 请求
curl -X PUT -v -i http://192.168.139.139:31112/function/mate-back  -H 'Content-type: application/json'  -H 'Accept: application/json'  -d '{"pathPage":"/"}'

# PATCH 请求
curl -X PATCH -v -i http://192.168.139.139:31112/function/mate-back  -H 'Content-type: application/json'  -H 'Accept: application/json'  -d '{"pathPage":"/"}'

# DELETE 请求
curl -X DELETE -v -i http://192.168.139.139:31112/function/mate-back  -H 'Content-type: application/json'  -H 'Accept: application/json'  -d '{"pathPage":"/"}'

方式二: web 调试

小结: 至此,基于 openfaas 平台通过 python3 的代码逻辑实现了一个接口应用的实现,并且访问测试成功,数据接口对齐以后就可以进行丰富和优化了,前后端都可以通过此方式实现底层业务逻辑;

总结

一年将近夜,万里未归人。

管理的五大职能:计划、组织、指挥、协调和控制。

posted @ 2023-02-04 15:15  流雨声  阅读(271)  评论(0编辑  收藏  举报