当前位置: 首页 > news >正文

仿拉勾网 wordpress网站整站优化

仿拉勾网 wordpress,网站整站优化,建设网站好处,公众号代运营作者 | Addo Zhang来源 | 云原生指北译者注#xff1a; 本文篇幅较长#xff0c;有助于了解 FaaS 和 OpenFaaS。作者分别从开发人员和运维人员的视角来了解 OpenFaaS#xff0c;对了解新的技术是个很好的方式。本文翻译自 Ivan Velichko[1] 的 OpenFaaS - Run Containerized… 作者 | Addo Zhang来源 | 云原生指北译者注 本文篇幅较长有助于了解 FaaS 和 OpenFaaS。作者分别从开发人员和运维人员的视角来了解 OpenFaaS对了解新的技术是个很好的方式。本文翻译自 Ivan Velichko[1] 的 OpenFaaS - Run Containerized Functions On Your Own Terms[2]。长期以来无服务器serverless 对我来说无非就是 AWS Lambda 的代名词。Lambda 提供了一种方便的途径可以将任意代码附加到平台事件云实例的状态变更、DynamoDB 记录的更新或新的 SNS 消息中。但是我时不时会想到某个逻辑但其又没大到足以有自己的服务同时有不适合任何现有服务的范围。因此我经常将其放入函数中以便日后使用 CLI 命令或者 HTTP 调用来调用它。它将在 Kubernetes 集群上部署函数变得简单甚至仅需要 Containerd 就可以部署到虚拟机上。有兴趣那么继续无服务器与 FaaS无服务器[4] 已成为一个流行词目前其实际含义扔不够清晰。许多现代平台被视为 无服务器 平台。在 AWS Fargate 或 GCP Cloud Run 上部署容器化服务无服务器在 Heroku 上运行应用程序也可能是无服务器的。同时我更喜欢将 FaaS[5] 视为一种具体的设计模式。按照 FaaS 范式可以部署代码片段响应某些外部时间执行的函数。这些函数与事件驱动程序中的回调类似但是是运行在其他人的的服务器上。由于操作的是函数而不是服务器顾名思义 FaaS 是无服务器的。source[6]OpenFaaS 项目旨在将 Kubernetes 集群或者独立的虚拟机等低级基础设施转化为管理无服务器函数的高级平台。站在开发人员的角度这样一个平台看起来是真的无服务器的 -- 你只需要知道特定的 CLI/UI/API 来处理 函数抽象。但站在运维的角度需要了解 OpenFaaS 如何使用 服务器 来运行这些函数。就我而言我经常既是开发又是运维下面我将尝试从二者展开说明。然而我认为在评估 UX 时我们应该明确区分它们。开发人员眼中的 OpenFaaSOpenFaaS 创建于 2016 年现在网上也有大量的教程。这里不会重复介绍但可以通过以下链接了解How to deploy OpenFaaS[7]Create Functions[8]Build Functions[9]Writing a Node.js function - step-by-step guide[10]相反我将描述我所理解的 OpenFaaS。我希望有助于一些需要评估该技术是否解决其问题的人以及那些希望更有效地使用该技术的人。函数运行时在进入正式编码之前有必要了解下其未来的执行环境又名运行时。或者简单说如何启动函数如何组织 I/O 操作如何重置 / 终止函数如何隔离函数和调用OpenFaaS 自带多个运行时模式这些模式针对不同的场景定制。因此不同的场景下上述问题的答案会略有不同。OpenFaaS 函数在容器中运行并且每个容器必须遵守简单的约定[11] 它作为监听在预设端口默认为 8080上的 HTTP 服务器临时存储并且是无状态的。然而OpenFaaS 通过 函数 watchdog译者注watchdog 不做翻译模式避免了用户编写此类服务器。函数 watchdog 是一种轻量级 HTTP 服务器可以感知如何执行实际函数业务逻辑。因此安装在容器中的所有内容加上作为入口点的 watchdog就构成了函数的运行时环境。经典 watchdog从最简单的开始或者又是被称为*经典* watchdog[12]这种模式下watchdog 启动了监听在 8080 端口的轻量级 HTTP 服务器每个进来的请求都会读取请求头和请求体fork 或者 exec 包含实际函数的可执行文件将请求头和请求体写入到函数进程的 stdin等待函数进程的退出或者超市读取函数进程的 stdout 和 stderr在 HTTP 响应中将去读的字节发送回调用方上述逻辑类似于传统的 通用网关接口CGI[13]。一方面每次函数调用都启动单独的进程看起来不够高效而另一方面它确实超级方便因为 任何使用 stdio 流进行 I/O 处理的程序包括最喜欢的 CLI 工具都可以部署为 OpenFaaS 函数。提起隔离我们有必要区分下函数和调用OpenFaaS 中的不同函数始终分布在不同的容器中一个函数可以有一个或多个容器 —— 取决于缩放选项同一函数的独立调用可能会最终进入同一个容器同一函数的独立调用将始终使用不同的进程进行反向代理 watchdog注意使用 OpenFaaS 官方术语本节讨论在 HTTP 模式下运行的 of-watchdog[14]。但我个人认为称之为反向代理 watchdog 更加形象。如果 经典 运行时类似于 CGI那么这个运行时模式类似于后来的 FastCGI[15]。运行时希望在 watchdog 后面有一个长期运行的 HTTP 服务器而不是每次函数调用时创建新的进程。这本质上是 将 watchdog 组件变成反向代理[16]当容器启动时反向代理 watchdog 也会创建一个监听在 8080 端口的轻量级 HTTP 服务器。然而与 经典watchdog 不同的是反向代理watchdog 只创建一次函数的进程并将其当成长期运行的上游服务器。然后函数调用转变成到该上游的 HTTP 请求。然而反向代理模式并不为了取代经典模式。经典模式的强项在于其函数的编写非常简单。这也是没有 HTTP 服务器的代码的唯一选择。比如使用 Cobol、bash 或者 PowerShell 脚本等等编写的函数。何时该使用反向代理运行时模式函数需要在两次调用之间保持状态缓存持久连接例如保持从函数到数据库的连接打开有状态函数 每个函数启动一个进程可能开销很大为每个调用带来了延迟你想运行一个微服务作为函数 根据 OpenFaaS 的创建者 Alex Ellis[17] 的解释FaaS特别是 OpenFaaS可以被视为在不依赖服务器抽象的情况下 部署微服务的简化方式[18]。即 FaaS 是无服务器架构的规范示例。因此使用反向代理的方式函数可以被看作是部署微服务的固执的方式。方便、快速、简单。但使用有状态函数时要留意由于多个调用可能在同一个进程中结束而导致的警告在一个进程中结束的并发调用可能会触发代码中的竞争条件例如一个带有全局变量的 Go 函数而全局变量没有锁的保护。在一个进程中结束的后续调用可能会导致交叉调用数据泄露当然就像传统微服务一样。由于该进程在两次调用之间被复用因此代码中的任何内存泄漏都不会被缓解。其他运行时模式经典运行时模式在将函数结果发送回调用方之前缓冲了函数的整个响应。但如果响应的大小超出了容器的内存怎么办OpenFaaS 提供了另一种运行时模式该模式仍然为每个调用创建进程但添加了**响应流**[19]。另一个又去的场景是从函数中提供静态文件服务。OpenFaaS 也有解决方案[20]。这可能是所有的内置运行时模式。但如果仍未满足需求OpenFaaS 是一个开源项目看下现有的watchdog1[21]  2[22]简洁明了。因此可以随时提交 PR 或者 issue让整个社区因你的贡献收益。编写函数此时我们已经了解函数如何在配备了函数 watchdog 的容器中运行。那么最小的函数是什么样子的下面的示例将简单的 shell 脚本封装到 OpenFaaS 函数中######################################################## # WARNING: Not for Production - No Security Hardening! # ######################################################### This FROM is just to get the watchdog executable. FROM ghcr.io/openfaas/classic-watchdog:0.2.0 as watchdog# FROM this line the actual runtime definion starts. FROM alpine:latest# Mandatory step - put the watchdog. COPY --fromwatchdog /fwatchdog /usr/bin/fwatchdog# Optionally - install extra packages, libs, tools, etc.# Functions payload - script echoing its STDIN, a bit transformed. RUN echo #!/bin/sh  /echo.sh RUN echo cat | rev | tr [:lower:] [:upper:]  /echo.sh RUN chmod x /echo.sh# Point the watchdog to the actual thingy to run. ENV fprocess/echo.sh# Start the watchdog server. CMD [fwatchdog]当构建、部署和调用时上面的函数作为 回显服务器倒转并大写其输入。稍微高级点的例子一个 Node.js Hello World 脚本作为函数######################################################## # WARNING: Not for Production - No Security Hardening! # ########################################################FROM ghcr.io/openfaas/classic-watchdog:0.2.0 as watchdogFROM node:17-alpineCOPY --fromwatchdog /fwatchdog /usr/bin/fwatchdogRUN echo console.log(Hello World!)  index.jsENV fprocessnode index.jsCMD [fwatchdog]因此要编写一个简单的函数只需要在 Dockerfile 中加入实际脚本或可执行文件它的所有依赖项——软件包、操作系统库等首选的 watchdog然后将 watchdog 指向该脚本或可执行文件并将 watchdog 作为入口。有点酷因为可以完全控制函数未来的运行时可以部署任何可以在容器中作为函数运行的东西但上述方法有个明显的缺点 -- 一个生产就绪的 Dockerfile 可能有上百行。如果我只想运行一个简单的 Node.js/Python 脚本或者一个小的 Go 程序作为函数要怎么处理 Dockerfile就不能有一个占位符来粘贴代码片段功能模板OpenFaaS 的美妙之处在于我们可以两者兼而有之 —— 使用 Dockerfile 进行低级修补或目标语言编写高级脚本得益于丰富的功能模板库$ faas-cli template store list NAME                     SOURCE             DESCRIPTION csharp                   openfaas           Classic C# template dockerfile               openfaas           Classic Dockerfile template go                       openfaas           Classic Golang template java8                    openfaas           Java 8 template ... node14                   openfaas           HTTP-based Node 14 template node12                   openfaas           HTTP-based Node 12 template node                     openfaas           Classic NodeJS 8 template php7                     openfaas           Classic PHP 7 template python                   openfaas           Classic Python 2.7 template python3                  openfaas           Classic Python 3.6 template ... python3-flask            openfaas           Python 3.7 Flask template python3-http             openfaas           Python 3.7 with Flask and HTTP ... golang-http              openfaas           Golang HTTP template ...上述功能模板由 OpenFaaS 作者和社区精心只做。典型的模板附带一个复杂的 Dockerfile指向虚拟处理程序函数。当引导新函数时通过 faas-cli new 命令来使用这些模板。例如$ faas-cli new --lang python my-fn Folder: my-fn created. Function created in folder: my-fn Stack file written: my-fn.yml$ cat my-fn/handler.py def handle(req): PUT YOUR BUSINESS LOGIC HERE return req因此对于模板编写函数的工作可以归结为简单地将业务逻辑放入响应的处理程序文件中。使用模板时了解使用那种 watchdog 和 模式 很重要使用经典的类似 CGI 的 watchdog处理程序通常被编写为接受和返回纯字符串的函数例如python3[23]、php7[24]在 HTTP 模式下使用 of-watchdog时处理程序看起来更像 HTTP 处理程序接受请求并返回响应结构例如python3-http[25]node17[26]。函数商店你的最佳函数是什么对你不需要写。OpenFaaS 接受这种想法并带来了函数商店[27]经过社区测试并根据过往经验选择的 OpenFaaS 函数精选索引。该商店包含一些有趣的函数可以一键部署到现有的 OpenFaaS 中$ faas-cli store listFUNCTION                        DESCRIPTION NodeInfo                        Get info about the machine that your... alpine                          An Alpine Linux shell, set the fproc... env                             Print the environment variables prese... sleep                           Simulate a 2s duration or pass an X-S... shasum                          Generate a shasum for the given input Figlet                          Generate ASCII logos with the figlet CLI curl                            Use curl for network diagnostics, pas... SentimentAnalysis               Python function provides a rating on ... hey                             HTTP load generator, ApacheBench (ab)... nslookup                        Query the nameserver for the IP addre... SSL/TLS cert info               Returns SSL/TLS certificate informati... Colorization                    Turn black and white photos to color ... Inception                       This is a forked version of the work ... Have I Been Pwned               The Have I Been Pwned function lets y... Face Detection with Pigo        Detect faces in images using the Pigo... Tesseract OCR                   This function brings OCR - Optical Ch... Dockerhub Stats                 Golang function gives the count of re... QR Code Generator - Go          QR Code generator using Go Nmap Security Scanner           Tool for network discovery and securi... ASCII Cows                      Generate a random ASCII cow YouTube Video Downloader        Download YouTube videos as a function OpenFaaS Text-to-Speech         Generate an MP3 of text using Google... Docker Image Manifest Query     Query an image on the Docker Hub for ... face-detect with OpenCV         Detect faces in images. Send a URL as... Face blur by Endre Simo         Blur out faces detected in JPEGs. Inv... Left-Pad                        left-pad on OpenFaaS normalisecolor                  Automatically fix white-balance in ph... mememachine                     Turn any image into a meme. Business Strategy Generator     Generates a Business Strategy (using ... Image EXIF Reader               Reads EXIF information from an URL or... Open NSFW Model                 Score images for NSFW (nudity) content. Identicon Generator             Create an identicon from a provided s...这些函数实际上是存储在 Docker Hub 或者 Quay 等公共库的容器镜像可以自由复用。场景示例使用 env 函数调试函数接收的HTTP标头使用 curl 函数从 OpenFaaS 部署内部测试连接从运行多个副本的函数中使用 hey 来增加负载函数的构建和部署由于函数是在容器中运行的因此需要有人为这些容器构建镜像。无论你喜不喜欢这都是开发人员的事情。OpenFaaS 提供了方便的 faas-cli build 命令但没有服务器端构建。因此要么需要在安装 Docker 的机器上手动运行 faas-cli build要么使用 CI/CD 完成。接下来构建好的镜像需要通过 faas-cli push 到仓库。显然这种仓库也应该可以从 OpenFaaS 服务器端访问。否则使 用faas-cli deploy 部署函数时会失败。调用函数函数部署后可以通过向 $API_HOST:$API_PORT/function/fn-name 端点发送 GET、POST、PUT 或者 DELET HTTP 请求来调用它。常见的调用方式有各种钩子webhookfaas-cli invokeevent connectors前两个选项相当简单。使用函数作为作为 webhook 处理器GitHub、IFTTT 等很方便每个函数开发人员都已经安装了 faas-cli因此可以成为日常脚本编写的组成部分。那什么是事件连接器在本文开头是我对 AWS Lambda 与 AWS 平台事件紧密集成的温暖回忆。请记住可以在响应新 SQS/SNS 消息、新的 Kinesis 记录、EC2 实例生命周期等事件时调用 Lambda。OpenFaaS 函数是否存在类似的东西呢显然OpenFaaS 无法开箱即用地与任何生态系统集成。然而它提供了一种名为**事件连接器**[28]模式的通用解决方案。官方支持的连接器Cron connector[29]MQTT connector[30]NATS connector[31]Kafka connector[32] (需要专业版订阅)OpenFaaS 还提供了很小的**连接器-sdk**[33]库来简化连接器的开发。运维眼中的 OpenFaaS开发眼中的 OpenFaaS 是个黑盒提供简单的 API 来部署和调用函数。然而作为运维可能会从了解 一点 OpenFaaS 内部原理中受益。OpenFaaS 通用架构OpenFaaS 有一个简单但强大的架构允许使用不同的基础设施作为后端。如果已经有了 Kubernetes 集群可以通过在上面部署 OpenFaaS[34] 轻松将其变成 FaaS[35] 解决方案。但是如果旧的虚拟或物理机仍然可以在上面安装 OpenFaaS并获得差不多功能的更小的 FaaS 解决方案。上面的架构中唯一面向用户的组件是 API 网关[36]。OpenFaaS 的 API 网关暴露 API 来管理和调用函数提供内置的 UI 来管理函数处理函数的自动缩放预计后面会有兼容的 OpenFaaS 提供商因此当开发人员运行 faas-cli deploy、faas-cli list 或使用 curl $API_URL/function/foobar调用函数等内容时请求将发送到上述的 API 网关。上图中的另一个重要组成部分是  faas-provider[37]。它不是一个具体的组件而更像是接口。任何实现非常简洁的提供商 API[38] 的软件都可以成为提供商。OpenFaaS 提供商管理功能部署、列表、缩放、删除调用函数暴露一些系统信息两个最注明的提供商是 faas-netes[39]Kubernetes 上的 OpenFaaS和 faasd[40]Containerd 上的 OpenFaaS。下面将介绍他们的实现。Kubernetes 上的 OpenFaaSfaas-nets当部署在 Kubernetes 上时[41]OpenFaaS 利用了该平台开箱即用的强大原语。关键要点API 网关成为标准部署服务对。因此可以随心所欲地扩展它。也可以随心所欲地把它暴露出来每个函数也成为部署服务对。可能不会直接处理函数但对于 faas-netes缩放变得就像调整相应的副本数一样简单高可用性和开箱即用的水平缩放 - 同一功能的 pod 可以而且应该跨多个集群节点运行。Kubernetes 作为一个数据库工作例如当运行 faas-cli list 等命令来获取当前部署的函数列表时faas-netes 只会将其转换为相应的 Kubernetes API 查询Containerd 上的 OpenFaaSfaasd对于没有使用 Kubernetes 集群的人来说OpenFaaS 提供了名为 faasd[42] 的替代轻量级提供商。它可以安装在虚拟或物理服务器上并利用 containerd[43] 来管理容器。正如我之前写的那样[44]容器是一个在 Docker 和 Kubernetes 下使用的较低级别的容器管理器。结合 CNI 插件[45]它成为编写容器调度器的构建组件OpenFaaS 的 faasd 是个很好的讲究案例。关键要点被设计为在 IoT 设备上或 VM 中运行使用 containerd 的原生 pause 通过cgroup freezers和超快速函数冷启动快速扩展到零它可以在每台服务器上运行比 faas-netes 多十倍的函数[46]并且可以有效地使用更便宜的硬件包括树莓派containerd 和 faasd 作为 systemd 服务进行管理因此会自动处理日志、重启等没有 Kubernetes DNS但 faasd 确保 DNS 在函数之间共享以简化互操作containerd 扮演着数据库的角色比如 faas-cli list 变成了类似 ctr container list的操作 所以如果服务器挂了所有状态就会丢失每个函数都需要重新部署没有开箱即用的高可用性或水平扩展参见 issue/225[47]总结对你所使用的软件有个好的心智模型是是有益的它可以提高开发效率防止单例场景的发生并简化了故障排查。以 OpenFaaS 为例区分开发人员和运维人员对系统的看法可能是个很好的思路。从开发人员角度来看这是一个简单而强大的无服务器解决方案主要关注 FaaS 场景。该解决方案由一个用于管理和调用函数的简洁 API、一个涵盖开发人员工作流的命令行工具以及一个函数模板库组成。无服务器函数以不同的运行时模式类 CGI、反向代理在容器中运行并提供不同的隔离和状态保障。从运维人员的角度来看OpenFaaS 是一个具有灵活架构的模块化系统可以部署在不同类型的基础设施之上从树莓派到裸机或虚拟机、以及成熟的 Kubernetes、OpenShift 或 Docker Swarm 集群。当然每种选择都有其优缺点需要详细评估取舍。但即使现有选项都不合适简单的 faas-provider 抽象允许开发自己的后端来运行无服务器功能。往期推荐虚幻引擎5上的《黑客帝国》全新体验爱了爱了Web兴起3.0之际元宇宙这杯羹怎么分Redis会遇到的坑你踩过几个核弹级漏洞把log4j扒给你看点分享点收藏点点赞点在看
http://www.sadfv.cn/news/214804/

相关文章:

  • 普宁做网站个人网站备案取消
  • 制作网站需要哪些技术人员wordpress api 中文文档
  • 网站建设文化平台建网站麻烦拍照备案审核多久
  • WordPress建立电商网站营销型网站.
  • 常州网站建设哪家好wordpress myqaptcha
  • 杭州建设厅网站企业建站公司排名为什么不好做
  • 网站概要设计模板wordpress.3.5
  • 在线看视频网站怎么做石家庄企业网络推广
  • 个人网站设计论文下载wordpress二维码手工
  • 网站欢迎界面设计运城市住房与城乡建设厅网站
  • 做头像的网站空白中国网站建设
  • 十堰网站推广查看网站建设工作
  • 网站初期推广淘宝客优惠券网站建设加盟官网
  • 安徽省建设工程安全+协会网站便利店网站建设拓扑图
  • js网站开发教程wordpress多人聊天室
  • 阿里云无主体新增网站天津网站建设电话
  • 各个视频网站怎么做原创作者手机网站方案
  • 导航网站html模板网络推广怎么免费做
  • 图片搜集网站怎么做百度拍照搜题
  • 北京南站到北京站坐地铁几号线悦西安
  • 用什么软件做网站最简单 最方便google浏览器官方下载
  • 食品网站建设方案项目书天元建设集团有限公司的商业承兑
  • 大连市平台网站自己做网站需要什么材料
  • 网站备案 暂住证医药行业网站建设
  • 做网站的入什么科目wordpress 七牛图床
  • 网站在谷歌怎么做排名网站系统修改不了怎么回事
  • 商标查询官方网站wordpress修改登陆
  • 中国建设银行 网站登录如果建网站
  • 网站上传后怎么访问设计方案格式模板
  • 防蜘蛛抓取网站代码定制型网站