• 关于 传统web开发小案例 的搜索结果

问题

【技术干货】原来阿里云自助实验室的系统架构是这样的啊

驻云科技 2019-12-01 21:07:14 9011 浏览量 回答数 1

回答

函数计算目前原生支持的开发语言有 nodejs, python, java, php 和 c#, 在实现这些开发语言 runtime 的时候, 函数计算开发团队花了很大的精力去让各自语言的传统应用能够简单快速迁移到函数计算平台: nodejs 开发函数计算的正确姿势——移植 Express python , 支持 WSGI 协议的框架可以一键迁移到函数计算 部署基于 python wsgi web 框架的工程到函数计算 十分钟上线-在函数计算上部署基于django开发的个人博客系统 java Java Http 触发器极速迁移传统 Spring 应用 php 一元建站-基于函数计算 + wordpress 构建 serverless 网站 C# 十分钟上线-基于函数计算开发 Restful web api & asp.net core web app 如上述所列的各自语言的传统应用迁移到函数计算的迁移方案, 虽然已经足够简单, 但是还是需要去理解一下函数计算的接口以及各自语言在函数计算环境中运行起来的原理, 比如 python, 用户需要理解 WSGI 协议, 然后才编写一个符合要求的入口函数。 为了彻底解放生产力, Custom Runtime 应运而生, Custom Runitme 可以解决以下两个重要需求: 可以随心所欲持定制个性化语言执行环境(例如 golang、lua、ruby)以及各种语言的小版本(例如python3.7、Nodejs12)等,打造属于自己的自定义runtime 现有的 web 应用或基于传统开发 web 项目基本不用做任何改造,即可将项目一键迁移到函数计算平台 用户要实现一个最简单的 Custom runtime,只要符合以下两条: 创建一个http server,监听在固定端口(端口可以读取环境变量 FC_SERVER_PORT,默认为 9000) http server 需要在 15s 内完成启动 接下来, 我们梳理一下基于 Custom Runtime 一键迁移案例。 custom 实现注意细节: Custom Runtime 启动的服务一定监听 0.0.0.0:9000 或者 *:9000 端口,不用使用127.0.0.1:9000, 会导致请求超时。{“ErrorCode”:”FunctionNotStarted”,”ErrorMessage”:”The CA’s http server cannot be started:ContainerStartDuration:25000000000. Ping CA failed due to: dial tcp 21.0.5.7:9000: getsockopt: connection refused Logs : 2019-11-29T09:53:30.859837462Z Listening on port 9000\r\n”} Custom Runtime 的 bootstrap 一定需要添加 #!/bin/bash,不然会遇见如下错误{“ErrorCode”:”CAExited”,”ErrorMessage”:”The CA process either cannot be started or exited:ContainerStartDuration:25037266905. CA process cannot be started or exited already: rpc error: code = 106 desc = ContainerStartDuration:25000000000. Ping CA failed due to: dial tcp 21.0.7.2:9000: i/o timeout Logs : 2019-11-29T07:27:50.759658265Z panic: standard_init_linux.go:178: exec user process caused \”exec format error\” bootstrap 一定需要可执行权限 bootstrap 代码一定要执行到 http server 启动成功的逻辑, 不能被前面的逻辑阻塞, 比如启动server之前, 尝试连接一个不可达的数据库,造成启动时间 timeout http server 的实现 connection keep alive, request timeout 至少10分钟以上 案例 java Serverless 实战 —— 快速搭建 SpringBoot 应用 Serverless 实战 —— 移植 spring-petclinic 到函数计算 python import tornado.ioloop import tornado.web import os class MainHandler(tornado.web.RequestHandler): def get(self): rid = self.request.headers.get('x-fc-request-id',None) print("FC Invoke Start RequestId: " + str(rid)); # your logic self.write("GET: Hello world") print("FC Invoke End RequestId: " + str(rid)); def post(self): rid = self.request.headers.get('x-fc-request-id',None) print("FC Invoke Start RequestId: " + str(rid)); # your logic self.write("GET: Hello world") print("FC Invoke End RequestId: " + str(rid)); def make_app(): return tornado.web.Application([ (r"/.*", MainHandler), ]) if name == "main": app = make_app() port = os.environ.get("FC_SERVER_PORT", "9000") app.listen(int(port)) tornado.ioloop.IOLoop.current().start() 本地安装第三方包 tornado 然后编写一个具有可执行权限的名字为bootstrap (注:#!/bin/bash注释是必需的)文件启动上面代码的 http server: #!/bin/bash python server.py go 基于custom runtime 打造 golang runtime nodejs 'use strict'; var express = require('express'); var app = express(); var crypto = require('crypto'); app.post(/.*/, function (req, res) { var rid = req.headers["x-fc-request-id"]; console.log(FC Invoke Start RequestId: ${rid}); // your logic, for example, get hash var secret = 'abcdefg'; var hash = crypto.createHmac('sha256', secret) .update('I love cupcakes') .digest('hex'); // c0fa1bc00531bd78ef38c628449c5102aeabd49b5dc3a2a516ea6ea959d6658e console.log(hash); res.send(hash); console.log(FC Invoke End RequestId: ${rid}); }); var port = process.env.FC_SERVER_PORT || 9000 app.listen(port, function () { console.log("FunctionCompute custom-nodejs runtime inited."); }); app.timeout = 0; // never timeout app.keepAliveTimeout = 0; // keepalive, never timeout 本地安装第三方包 express 然后编写一个具有可执行权限的名字为bootstrap (注:#!/bin/bash注释是必需的)文件启动上面代码的 http server: #!/bin/bash node server.js php 基于custom runtime + nginx + php-fpm 运行 wordpress:customruntime-php .NETCORE CSharp .Net Core 2.1 MVC Web应用迁移到函数计算 custom runtime 教程同样适用于 .netcore 3.0

1934890530796658 2020-03-27 16:29:17 0 浏览量 回答数 0

问题

OSS让你体验超大文件上传、下载,飞一般的感觉(新手必看)

聚小编 2019-12-01 20:29:02 14239 浏览量 回答数 4

Java学习路线 26门免费课程

排名第一的编程语言,从事云计算、大数据开发工作必备

回答

前言 本文旨在通过 快速部署一个 wordpress 网站到阿里云 函数计算 平台 这个示例来展示 serverless web 新的开发模式, 包括 FUN 工具一键初始化 NAS, 同步网站到 NAS, 一键部署等能力, 展现函数计算的开发敏捷特性、自动弹性伸缩能力、免运维和完善的监控设施。 相关参考文档: https://yq.aliyun.com/articles/640912 1.1 DEMO 概述 DEMO 示例效果入口: http://hz.mofangdegisn.cn 账号: fc-test-user 密码: fc-test-pwd DEMO 示例工程地址: fc-wordpress 开通服务 免费开通函数计算, 按量付费,函数计算有很大的免费额度。 免费开通文件存储服务NAS, 按量付费 1.2 解决方案 image 如上图所示, 当多个用户通过对外提供的 url 访问web服务的时候,每秒的请求几百上千都没有关系, 函数计算平台会自动伸缩, 提供足够的执行实例来响应用户的请求, 同时函数计算提供了完善的监控设施来监控您的函数运行情况。 1.3 Serverless 方案与传统自建 web 方案对比 ITEM 成本 稳定性 基于 VM 方案 使用 ecs.t5-lc1m1.small, 22.8元/月 服务器和数据库在同一台VM, 均无主备容灾,同时该规格的主机本身性能弱 轻量应用服务器 60元/月(1vCPU 1GB 1Mbps 20GB[ssd]) 服务器和数据库在同一台VM, 均无主备容灾,同时该规格的主机本身性能弱 函数计算 sqlite3 版本约为 1元/月 mysql 版本大约 26元/月 高 函数计算完整费用详情: 每月前 100 万次函数调用免费, 每月前 400000(GB*秒) 费用免费, 函数的内存可以设置为 128M 或者 256M, 因此对于一个一个月访问量低于 100 万次的网站, 该项是免费的 对于低成本的网站, 假设一个月的产生的公网流量为 1GB, 0.8元 NAS, US$0.06/GB/Month, 网站大小为 50M, 即使按 1G 计算, 0.42元 RDS mysql 最基本的单机版本, 25元/月 函数计算计费 | NAS 定价 如上所述, 在低成本网站领域, 函数计算具有十分明显的成本优势,同时还保持了弹性能力,以后业务规模做大以后并没有技术切换成本(可能需要做的只是更换一个更强的关系型数据库), 同时财务成本增长配合预付费也能保持平滑。低成本网站变成高可用高性能网站如丝般顺滑, 高性能网站详情可以参考文末 FAQ 中的 Q1 问题。 函数计算运行 PHP 框架原理 在具体操作部署之前, 先简单梳理一遍函数计算运行 PHP 框架原理 2.1 传统服务器 PHP 运行原理 原理示意图image.png A simple nginx confimage.png 从上面原理示意图我们可以看出,Web 服务器根据 conf 中 location将 PHP 脚本交给 php-fpm 去解析,然后将解析后的结果返回给 client 端 2.2 FC 驱动 PHP 工程原理 image 函数计算的执行环境实例相当于传统 web 服务的 Apache/Nginx 用户函数相当于实现 Apache/Nginx 的 conf 中 location 用户将 Web 网站部署在 NAS,然后挂载 NAS 到函数的执行环境, 比如下面代码中 /mnt/auto 目录 对于 WordPress 入口函数代码就是这么简单: index.php 其中函数计算为用户提供了一个 $GLOBALS['fcPhpCgiProxy'] 对象用来和 php-fpm 进行交互,对PHP 工程中的 php 文件进行解析,该对象提供了两个重要的接口: requestPhpCgi requestPhpCgi($request, $docRoot, $phpFile = "index.php", $fastCgiParams = [], $options = []) $request: 跟 php http invoke 入口的参数一致 $docRoot: Web 工程的根目录 $phpFile: 用于拼接 cgi 参数中的 SCRIPT_FILENAME 的默认参数 $fastCgiParams: 函数计算内部尽量根据 $request给您构造 default cgi params, 但是如果您不是想要的,可以使用$fastCgiParams覆盖一些参数 (reference: cgi) $options: array类型,可选参数, debug_show_cgi_params 设为 true ,会打印每次请求 php 解析时候的 cgi 参数, 默认为 false ;readWriteTimeout 设置解析的时间, 默认为 5 秒 如果您有兴趣, 可以了解下函数计算 PHP Runtime: PHP 入口函数 PHP 执行环境 案例操作步骤 准备条件 免费开通函数计算, 按量付费,函数计算有很大的免费额度。 免费开通文件存储服务NAS, 按量付费 有一个域名, 比如 abc.com, 并将域名 CNAME 解析到函数计算(FC) 对应的 region 如您想在杭州的 region 部署 wordpres 网站, 则将 abc.com CNAME 解析到 12345.cn-hangzhou.fc.aliyuncs.com, 其中 12345 是您的 accountId 3.1 安装最新的 Fun 工具 安装版本为8.x 最新版或者10.x 、12.x nodejs 安装 funcraf 3.2 Clone 工程 git clone https://github.com/awesome-fc/fc-wordpress.git 3.3 根据需要使用的数据库进入不同的目录 复制 .env_example 文件为 .env, 并且修改 .env 中的信息为自己的信息 如果使用 mysql 数据库, 参考章节 3.3.1 如果使用 sqlite3 数据库, 参考章节 3.3.2 3.3.1 使用 mysql 数据库 进入目录 fc-wp-mysql fun nas init fun nas info fun nas init: 初始化 NAS, 基于您的 .env 中的信息获取(已有满足条件的nas)或创建一个同region可用的nas 如果你没有修改 templata.yml 中的配置 service名字, 那么则可以进入下一步; 如果有修改, 会在当前目录生成新的目录 .fun/nas/auto-default/{serviceName} (fun nas info 可以列出新的目录), 将默认目录下的 .fun/nas/auto-default/fc-wp-mysql/wordpress 的wordpress目录拷贝到 .fun/nas/auto-default/{serviceName} 下, 同时可以删除目录 .fun/nas/auto-default/fc-wp-mysql/wordpress 上传 wordpress 网站到 NAS fun nas sync fun nas ls nas:///mnt/auto/ fun nas sync: 将本地 NAS 中的内容(.fun/nas/auto-default/fc-wp-mysql)上传到 NAS 中的 fc-wp-mysql 目录 fun nas ls nas:///mnt/auto/: 查看我们是否已经正确将文件上传到了 NAS 3.3.2 使用 sqlite3 数据库 进入目录 fc-wp-sqlite fun nas init fun nas info fun nas init: 初始化 NAS, 基于您的 .env 中的信息获取(已有满足条件的nas)或创建一个同region可用的nas 如果你没有修改 templata.yml 中的配置 service名字, 那么则可以进入下一步; 如果有修改, 会在当前目录生成新的目录 .fun/nas/auto-default/{serviceName} (fun nas info 可以列出新的目录), 将默认目录下的 .fun/nas/auto-default/fc-wp-sqlite/wordpress 的wordpress目录拷贝到 .fun/nas/auto-default/{serviceName} 下, 同时可以删除目录 .fun/nas/auto-default/fc-wp-sqlite/wordpress 本地完成安装过程, 初始化 sqlite3 数据库 在目录 .fun/nas/auto-default/fc-wp-sqlite/wordpress 中输入命令: php -S 0.0.0.0:80 修改 host 文件,添加 127.0.0.1 hz.mofangdegisn.cn linux/mac : vim /etc/hosts windows7: C:\Windows\System32\drivers\etc 其中 hz.mofangdegisn.cn 是您预先准备的域名 通过浏览器输入 hz.mofangdegisn.cn, 这个时候没有mysql数据库设置页面,完成 wordpress 安装过程 成功安装以后, 这个时候, .fun/nas/auto-default/fc-wp-sqlite/wordpress/wp-content 下面应该有一个 database 的目录, ls -a 查看, 应该有 .ht.sqlite 这个 sqlite3 数据库文件 回退 host 文件的修改 注: 中间修改 host 的目的是初始化 sqlite3 数据库的时候, base site url 是提前准备的域名, 而不是 127.0.0.1 上传 wordpress 网站到 NAS fun nas sync fun nas ls nas:///mnt/auto/ fun nas sync: 将本地 NAS 中的内容(.fun/nas/auto-default/fc-wp-sqlite)上传到 NAS 中的 fc-wp-sqlite 目录 fun nas ls nas:///mnt/auto/: 查看我们是否已经正确将文件上传到了 NAS 3.4 部署函数到FC平台 接下来将函数部署到云平台: 修改 index.php 中的 $host 中的值 修改 template.yml LogConfig 中的 Project, 任意取一个不会重复的名字即可 修改 template.yml 自定义域名为自己提前准备好的域名 执行 fun deploy 登录控制台 https://fc.console.aliyun.com,可以看到service 和函数已经创建成功, 并且 service 也已经正确配置。 通过浏览器打开自己之前配置的域名, 比如本例中的 hz.mofangdegisn.cn mysql 版本数据库, 可以直接跟传统的 wordpress 一样,直接进入安装过程 sqlite3 版本数据库, 由于之前已经完成初始化,可以直接进入网站首页或网站后台 FAQ Q1: 函数计算能开发高性能高可用网站吗? A: 可以, 使用函数计算的单实例多并发功能和高性能数据库 单实例多并发 选择高性能关系型数据库,比如高可用的云数据库PolarDB 有必要再加上这些优化: 预留实例消除冷启动 + 预付费优化成本 极速型 NAS OSS 对象存储 + CDN 来存储和分发静态资源 目前 PHP Runtime 并不支持单实例多并发, 使用 Custom Runtime,可以将基于传统模式 nginx + php-fpm + mysql 开发的网站直接简单无缝迁移到函数计算平台,示例工程 customruntime-php 使用OSS对Wordpress进行图片动静分离 Q2: 使用低成本 sqlite3 版本的网站, 冷启动第一次打开很慢怎么办? A: 用一个 timer trigger 的函数 keep warm Q3: 使用低成本 sqlite3 版本的网站, 能支持多大的qps? A: 由 sqlite3 数据库性能决定, 这边有一些压测结果: image image 每次压力增大时候, 都有些冷启动,时间慢点,但是支持从压测结果来看支持 50 QPS 是没有疑问的, 是足够支持一些中小网站的。 Q4: 使用其他语言基于函数计算开发 serverless 网站可以吗? A: 可以, 比如 python: https://yq.aliyun.com/articles/603249 , 或者直接使用 custom runtime, 内置了 java、python 和 node, Custom Runtime 用户手册 , Custom Runtime 使用集锦

1934890530796658 2020-03-27 17:54:50 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 SSL证书 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 2020中国云原生 阿里云云栖号