十分钟上线-基于函数计算开发 Restful web api & asp.net core web app

本文涉及的产品
简介: .NET Core是一个开源通用的开发框架,支持跨平台, 阿里云函数计算推出了 dotnetcore2.1 runtime, 使用 C# 编写 serverless 函数, 除了很好地支持通常意义上的函数外, 还可以基于函数计算开发 asp.

前言

这篇文章适合所有的 C# 开发新手、老鸟以及想准备学习开发 C# 的程序猿。.NET Core是一个开源通用的开发框架,支持跨平台, 阿里云函数计算推出了 dotnetcore2.1 runtime, 使用 C# 编写 serverless 函数, 详情见官方文档:C# 函数入口. 在官方文档描述中,我们获知阿里云函数计算可以很好支持 asp.net core 的 Applicaiton:

  • ASP.NET Core Web API
  • ASP.NET Core Web App
  • ASP.NET Core Web App (Model-View-Controller)

在介绍 Serverless Web 开发新模式之前,我们先了解下将 C# WebApi/WebApp Serverless 化的好处:

  1. 无需采购和管理服务器等基础设施
  2. 弹性伸缩,动态扩容
  3. 免运维, 极大降低人力成本
  4. 按需付费,财务成本低

本文以部署一个完善的 asp.net core 工程 Blogifier 为例,在函数计算环境中为例,向您讲解如何使用阿里云函数计算快速构建或移植基于 asp.net core 开发的 WebApi/WebApp ,通过本文,您将会了解以下内容:

案例概览

在本教程中,我们讲解如何利用函数计算一步一步来构建 Web 的 Server 端,该案例是把一个 asp.net core 工程Blogifier 部署到函数计算,本文旨在展示函数计算做 Web Backend 能力,具体表现为以下几点:

  • 完善的 ASP.NET Core Web 系统迁移到 FC 的成本不高
  • FC 打通了专有网络 VPC 功能,用户的函数可以配置访问专有网络的云资源,比如本案例中 NAS
案例体验入口:

http://dotnet.mofangdegisn.cn/

https://dotnet.mofangdegisn.cn/

传统服务器架构 VS Serverless架构

正常来说,用户开发 Server 端服务,常常面临开发效率,运维成本高,机器资源弹性伸缩等痛点,而使用 Serverless 架构可以很好的解决上述问题。下面是传统架构和 Serverless 架构的对比:

image

阿里云函数计算是一个事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的代码,并提供日志查询,性能监控,报警等功能。借助于函数计算,您可以快速构建任何类型的应用和服务,无需管理和运维。

Serverless 架构详解

image.png

从上面的示例图中,整体架构十分简单明了, 用 FC 替代了 Web 服务器,但是换来的是免运维,弹性扩容,按需付费等一系列优点

函数计算运行 Asp.net Core App 原理

Asp.net Core App 运行在服务器上

image

A http request to your website will go through IIS/Nginx, then Kestrel, and finally will be passed on to ASP.NET Core

Asp.net Core App 运行在函数计算上

image

请求通过函数(with http trigger), 最后到达ASP.NET Core

tips: 基于函数计算环境运行新建 asp.net core app 可以参考[dotnet runtime HTTP 触发器的函数入口示例]()

在本文中,我们展示把一个现有的成熟的 asp.net core 工程低成本无缝迁移到函数计算环境。

案例开发配置步骤

准备工作

1. 创建 NAS 挂接点,配置 VPC , 具体参考函数计算nas使用示例

注:在本示例中使用 sqlite3 数据库,这种文件类型的数据库直接放置在 nas 即可,如果使用mysql 等其他数据库, 需要创建 RDS 数据库, 配置 VPC , 具体参考通过 VPC 访问 RDS 实例

2. 可选操作,在准备函数的 region 创建日志,用于函数的调试, 具体参考函数计算配置日志服务

创建函数

1. 创建 Service (假设是 csharp-web ), 配置准备 vpc config , nas config 和日志服务,比如案例体验的 Service 配置如下图:

image

2. 下载 asp.net core 工程,Blogifier, 用 vs 打开, debug 本地可以正常运行。

注:本地安装 dotnetcore2.1

3. 在工程中增加入口函数,使得该工程可在函数计算执行环境运行,diff

4. dotnet publish -c Release, 跳转到publish目录, 将相关的静态资源/可写/共享目录移动到上述配置的 NAS 的某个目录(这里假设是 www目录, 对应步骤2中的diff)

# dotnet publish -c Release

# cp -r plugins/Common/bin/Release/netcoreapp2.1/publish/* src/App/bin/Release/netcoreapp2.1/publish/

# src/App/bin/Release/netcoreapp2.1/publish/

# mkdir lib

// 选择函数计算执行环境所需要的so, 其他的删除即可
# cp runtimes/linux-x64/native/libe_sqlite3.so ./lib

# // 这里是传送对应的静态文件和 app.db 到 nas 中, 详情看下面的描述

# rm -rf wwwroot app.db runtimes
# zip -r code.zip *

// 最后使用这个 code.zip 创建 handler 为 `App::App.FcRemoteEntrypoint::HandleRequest` 函数

将 publish 目录下的 wwwroot 和 app.db 传送到 nas 的 www 目录, 可以使用ecs 挂载nas 传输过去, 也可以采用如下简单函数传输过去

|-- index.py
|-- www

注: www目录下面有 wwwroot 和 app.db

index.py代码:

# -*- coding: utf-8 -*-
import logging  
import os

def handler(event, context):
  os.system("mkdir -p  /mnt/share/www")
  os.system("cp -r /code/www/* /mnt/share/www/")
  os.system("chmod -R 777 /mnt/share/www")
  print( os.system("ls -ll /mnt/share/www") )
  return 'ok'

基于上述代码创一个函数 move-res-nas , 执行函数,将相关静态和共享资源移动到 NAS 的/mnt/share/www/ 目录。

3. 创建入口函数 blog (使用上一步骤中的 code.zip ), 给函数设置 http trigger ,类型为 anonymous , 类型都选上。

4. 给函数入口配置自定义域名(操作过程请参考:绑定自定义域名示例), 具体配置假设如下:

image

注意: 绑定自定义域名之后,不用使用控制台来进行调试,就只能使用浏览器来触发函数,日志服务来进行调试。

总结

函数计算有如下优势:

  • 无需采购和管理服务器等基础设施
  • 专注业务逻辑的开发
  • 提供日志查询、性能监控、报警等功能快速排查故障
  • 以事件驱动的方式触发应用响应用户请求
  • 毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力
  • 按需付费。只需为实际使用的计算资源付费,适合有明显波峰波谷的用户访问场景

除了上面所列的优势,FC 可以做为 Web Backend,只需要编写一个函数实现传统 Web 服务器中的 conf 中的逻辑,就可以将一个完整的 Web 工程迁移到 FC ,从而从传统的 Web 网站运维,监控等繁琐的事务中解放出来。

最后欢迎大家通过扫码加入我们用户群中,搭建过程中有问题或者有其他问题可以在群里提出来。

函数计算官网钉钉客户群(11721331)。

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
7天前
|
开发框架 监控 .NET
Visual Basic的Web服务和REST API开发指南
【4月更文挑战第27天】本文探讨了使用Visual Basic(VB.NET)构建Web服务和RESTful API的方法。首先介绍了Web服务的基础和REST API的概念,然后阐述了.NET Framework与.NET Core/.NET 5+对VB.NET的支持,以及ASP.NET Core在Web开发中的作用。接着,详细讲解了创建RESTful API的步骤,包括控制器与路由设置、模型绑定与验证,以及返回响应。此外,还讨论了安全措施、测试方法、部署选项和监控策略。最后强调,VB.NET开发者可以通过ASP.NET Core涉足现代Web服务开发,拓宽技术领域。
|
8天前
|
缓存 监控 API
构建高效可扩展的RESTful API:后端开发的实践指南
【4月更文挑战第26天】在现代Web开发中,构建一个高效、可扩展且易于维护的RESTful API是后端工程师必须面对的挑战。本文将深入探讨如何利用最佳实践和流行技术,设计出符合REST架构原则的服务端接口。我们将重点讨论API版本控制、资源路由、数据库优化、缓存策略以及安全性考虑等方面,旨在为开发者提供一套综合性解决方案,帮助其提升API的性能与可靠性。
|
3天前
|
关系型数据库 MySQL
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
|
4天前
|
弹性计算 JSON Shell
基于Web API的自动化信息收集和整理
【4月更文挑战第30天】
12 0
|
5天前
|
JSON API 数据处理
【Swift开发专栏】Swift中的RESTful API集成实战
【4月更文挑战第30天】本文探讨了在Swift中集成RESTful API的方法,涉及RESTful API的基础概念,如HTTP方法和设计原则,以及Swift的网络请求技术,如`URLSession`、`Alamofire`和`SwiftyJSON`。此外,还强调了数据处理、错误管理和异步操作的重要性。通过合理利用这些工具和策略,开发者能实现高效、稳定的API集成,提升应用性能和用户体验。
|
4天前
|
开发框架 JavaScript 前端开发
【JavaScript 与 TypeScript 技术专栏】TypeScript 在 Web 开发中的前沿应用
【4月更文挑战第30天】TypeScript在Web开发中日益重要,以其强大的类型系统提升代码质量,支持组件化开发,与React、Vue、Angular等框架良好集成。在大型项目管理中,TypeScript助于代码组织和优化,提高团队协作效率。此外,它提升开发体验,提供智能提示和错误检测。众多成功案例证明其前沿应用,未来将在Web开发领域持续发挥关键作用。
|
4天前
|
缓存 前端开发 搜索推荐
【Flutter前端技术开发专栏】Flutter中的自定义绘制与Canvas API
【4月更文挑战第30天】Flutter允许开发者通过`CustomPaint`和`CustomPainter`进行自定义绘制,以实现丰富视觉效果。`CustomPaint` widget将`CustomPainter`应用到画布,而`CustomPainter`需实现`paint`和`shouldRepaint`方法。`paint`用于绘制图形,如示例中创建的`MyCirclePainter`绘制蓝色圆圈。Canvas API提供绘制形状、路径、文本和图片等功能。注意性能优化,避免不必要的重绘和利用缓存提升效率。自定义绘制让Flutter UI更具灵活性和个性化,但也需要图形学知识和性能意识。
【Flutter前端技术开发专栏】Flutter中的自定义绘制与Canvas API
|
4天前
|
存储 关系型数据库 Go
【Go语言专栏】基于Go语言的RESTful API开发
【4月更文挑战第30天】本文介绍了使用Go语言开发RESTful API的方法,涵盖了路由、请求处理、数据存储和测试关键点。RESTful API基于HTTP协议,无状态且使用标准方法表示操作。在Go中,通过第三方库如`gorilla/mux`进行路由映射,使用`net/http`处理请求,与数据库交互可选ORM库`gorm`,测试则依赖于Go内置的`testing`框架。Go的简洁性和并发性使得它成为构建高效API的理想选择。
|
5天前
|
机器学习/深度学习 算法 安全
深度学习在图像识别中的应用与挑战构建高效可扩展的RESTful API:后端开发的实战指南
【4月更文挑战第30天】 随着计算机视觉技术的飞速发展,深度学习在图像识别领域取得了显著的成果。本文将探讨深度学习技术在图像识别中的应用及其所面临的挑战。首先,我们将介绍深度学习的基本原理和关键技术,然后分析其在图像识别中的优势和应用案例。最后,我们将讨论当前深度学习在图像识别领域所面临的主要挑战和未来的发展趋势。
|
5天前
|
XML JSON API
【PHP开发专栏】PHP RESTful API设计与开发
【4月更文挑战第29天】本文探讨了在Web开发中流行的前后端分离模式,重点介绍了RESTful API的设计与实现。REST是一种基于HTTP协议的架构风格,核心概念包括资源、表述和状态转换。RESTful API设计遵循无状态、统一接口等原则,使用GET、POST、PUT、DELETE等HTTP方法执行操作,并通过状态码和JSON/XML传输数据。在PHP中实现RESTful API,可通过定义路由、创建控制器、处理请求和响应,同时注意安全性措施,如使用HTTPS。文中还提供了一个用户管理API的实战示例,以帮助读者更好地理解和应用RESTful API。

热门文章

最新文章

相关产品

  • 函数计算