写点什么

3 分钟搭建一个网站?腾讯云 Serverless 开发体验

用户头像
Zhendong
关注
发布于: 2021 年 08 月 02 日
3分钟搭建一个网站?腾讯云Serverless开发体验

作为一个开发者,应该都能理解一个网站从开发到上线,要经过很多繁琐的步骤。


编写代码,部署应用,部署数据库,申请域名,申请 SSL 证书,域名备案,到最终上线起码要几天时间。


作为一个不精通代码的业务玩家,当你想搞个网站玩玩时,经常会被淘宝贵得离谱的报价吓跑。


这两年 Serverless 的概念被炒得火热,顾名思义,“无服务”。今天的这篇文章,我想站在一个开发者的角度,带大家简单的体验下使用腾讯云 Serverless 来开发网站的整体流程。看看在 Serverless 的概念下,开发网站是不是变得更加简单了。


本文的主要内容:


  • Serverless 概念解释

  • 3 分钟部署一个网站

  • 10 分钟开发一个在线 RSS 阅读小站

  • 腾讯 Serverless Web Function 的优缺点分析


我是蛮三刀,关注我的个人原创技术公众号:后端技术漫谈

Serverless 概念

Serverless 是一个怎样的运行原理呢?简单的解释下:


腾讯云云函数是腾讯云提供的 Serverless 执行环境。您只需编写简单的、目的单一的云函数即可将它与您的腾讯云基础设施及其他云服务产生的事件关联。


当然了,Serverless 不是表示没有服务器,而表示当您在使用 Serverless 时,您无需关心底层资源,也无需登录服务器和优化服务器,只需关注最核心的代码片段,即可跳过复杂的、繁琐的基本工作。核心的代码片段完全由事件或者请求触发,平台根据请求自动平行调整服务资源。Serverless 拥有近乎无限的扩容能力,空闲时,不运行任何资源。代码运行无状态,可以轻易实现快速迭代、极速部署。


它的大致执行流程如下图:



所以,Serverless 其实本质上是云服务上帮你整合了云资源,你只需要编写最核心的代码,比如一个请求过来如何处理和返回对应的数据。其他的服务器部署相关的事情,都交给云服务商。这样带来的最核心的好处是节省了大量资源,只有你的网站有人访问时,才会计算资源消耗的价格,大幅度降低了成本。


可能你只是想搭建一个博客,以前可能需要买一年的服务器,起码一年开销几百元。在 Serverless 下,如果你的博客访问量并不是很高,可能一年只要花费十几块钱。

3 分钟部署一个网站

我们打开 Serverless 创建函数服务页面:


https://console.cloud.tencent.com/scf/list-create?rid=16&ns=default&keyword=WebFunc


选择 Python3 Web 函数模板:



接着可以设置一些基本信息,这里我啥也没修改,直接点击完成。



大概等待 30 秒,一个 Serverless 服务就创建完成了。



接下来,我们就被跳转到了代码编辑页面。由于我们在上面的选项里选了 Python3 Web 开发,所以代码默认有了一个最基本的 Flask 框架模板。(Flask 是什么?是 Python 的一个 Web 开发框架,就像 Java 下面的 SpringBoot 一样,也能很轻松地开发一个 Web 服务。官方文档:https://flask.palletsprojects.com/en/2.0.x/



模板代码已经有了路径(“/”)最基本的返回值,我们把他改几个字,然后点击左下角部署按钮。花费了十几秒部署完成后,点击测试,我们就能看到返回的 Body 了,如下图。这时候你访问页面,也返回了同样的结果。



一个最最基础的 Web 服务器就 OK 了,不需要买域名和 HTTPS 证书,不需要 SSH 登录服务器,不需要手动编译代码,🐂🍺。

10 分钟开发一个在线 RSS 阅读小站

上面是牛刀小试,接下来稍微整一个复杂一点点的例子。


**我一直觉得 RSS 阅读是一个虽然过时,但是其精神一直在传承的阅读方式。**比如微信的订阅号,可以说其本质也是一种 RSS 阅读,通过关注订阅,并获得更新文章的推送,来定制化你的阅读内容。


所以我想做一个 RSS 解析器,通过传入 RSS 的网址(很多网站还保留有这个网址,比如 CSDN,比如阮一峰的博客等),能够渲染出该 RSS 链接里所有的文章,并展示在网页上。后面,还可以深度的修改页面的展示,做出一个微信订阅号网页版,也不是不可能,哈哈哈。


OK,花里胡哨的就不扯了,先开始实现一个最简单的事情,把 RSS 链接渲染出来。


我们使用官方的 Flask 模板,这个模板的 Flask 环境相对更加完整,方便开发。


我们首先需要一个 RSS 解析的框架,在 Python 中,有一个 feedparser 的框架,能够解析 RSS url。


使用pip3 install feedparser安装 feedparser:



接着我们在 app.py 加入代码:


import feedparser
@app.route('/rss')def rss(): feed = feedparser.parse(request.args.get('rssurl')) return render_template('rss.html', entries=feed.entries)
复制代码



在这里,我进行了一波本地调试,看一下 feed 这个参数,拿到了什么:



可以看到,解析后的 rss 链接,被 feedparser 框架解析为了一个数组,每个 entry 是一个文章的标题,作者,链接等。


根据上面的参数名,我们再加入一个 rss/html,放在 templates 文件夹中,里面写好了我稍微美化过的 html 页面,并且将每篇文章循环插入 html 中,这里用到了 flask 自带的渲染模板 jinja2:


<html><head>    <title>RSS阅读博客</title>    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.0.2/css/bootstrap.min.css" rel="stylesheet"></head><body>    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.0.2/js/bootstrap.min.js"></script>    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.slim.min.js"></script><div class="container-fluid">  <div class="row-fluid">    <div class="span12">
<nav class="navbar navbar-expand-lg navbar-light bg-light"> <div class="container-fluid"> <a class="navbar-brand" href="#">RSS解析器</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <ul class="navbar-nav me-auto mb-2 mb-lg-0"> <li class="nav-item"> <a class="nav-link active" aria-current="page" href="#">首页</a> </li> </ul> <form class="d-flex"> <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search"> <button class="btn btn-outline-success" type="submit">Search</button> </form> </div> </div> </nav>
<div class="accordion" id="accordionExample"> {% for entry in entries %} <div class="accordion-item"> <h2 class="accordion-header" id="heading{{ loop.index }}"> <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapse{{ loop.index }}" aria-expanded="false" aria-controls="collapse{{ loop.index }}"> {{ entry.title }} | {{ entry.published }} </button> </h2> <div id="collapse{{ loop.index }}" class="accordion-collapse collapse" aria-labelledby="heading{{ loop.index }}" data-bs-parent="#accordionExample"> <div class="accordion-body"> {{ entry.summary | safe }} </div> </div> </div> {% endfor %} </div>

</div> </div></div></body></html>
复制代码


两个文件修改完,直接点击部署然后访问腾讯云给我们分配的域名:


https://service-ehshqmzv-1252138314.cd.apigw.tencentcs.com/release/rss?url=https://blog.csdn.net/qqxx6661/rss/list



可以看到,完美解析出了我 CSDN 博客的 RSS 流,并且可以一个个打开。动图见文章最上方。

Web Function 的优缺点分析

可以看出来,Serverless 开发一个网站和传统网站开发区别非常大,它撇去了传统开发中那些冗杂但是又不经常会去修改的配置和流程,让开发者专注于业务逻辑的开发。但是这种开发方式真的完美吗?我思考了一下它的优势和不足。


**最明显的优势便是它简化了开发的步骤,省去了很多部署的无聊工作量。**但是,它的简化是有代价的,简化是会牺牲很大一部分灵活性和可定制性的。简化能够好用的前提是,云服务商把这些事情做到了,并且做好了。如果你的网站需要大量复杂的逻辑,并且需要优化网关的配置,那么很多事情在 Serverless 下,至少在目前提供的 Serverless 下,还是做不到的。


上面说到的弊端,其实会带来一个很大的问题,就是沉没成本,当你花了很多时间在 Serverless 上,却发现有一些小的要求或者定制化,没法实现,这时你是去翻文档,提工单,还是选择老老实实买个虚机,自己手动重新部署呢。


当然,上述观点是一个开发者的视角来看的。


作为普通消费者,可能很多时候只需要部署一个静态网站,用来放一个博客,或者说推广下自己的公司和产品。那么 Serverlss 大概率是符合要求的。


除了上面的主要矛盾外,还有一点是我想提出的,就是目前在线代码编辑页面的调试功能有点太弱了


在最开始的 Python3 Web 模板中,在线的依赖库貌似缺失了新版本的 feedparser 和 flask,导致我在本地调试能够运行的代码放到 Serverless 上各种不成功,但是错误信息却很难找。导致我不得不在 VS Code 的终端里,一个手动开 flask 服务,一个去 curl 请求,才能看到报错信息。




当然,这个可能是我自己走得歪路,但是在页面上,很难一眼看出来 Debug 窗口在哪里。


在用户体验上,还有很多事情可以做。

总结

不知不觉又是一篇 2500 字的文章,一个完整的周末又没有了。


Serverless 概念提出了好几年了,其产品形态总感觉还在摸索阶段,它的用户群体到底是开发者,还是普通消费者,其实还是会被产品形态所影响。


不管怎么说,Serverless 在成本的节省上是有目共睹的,我也希望在我的云服务器过期后,能够把自己的博客和其他服务,部署在 Serverless 上,能够节省一大笔开销。光是成本这一点,就值得我不断关注着 Serverless。


如果文章对你有帮助,请各位老板转发支持一下,你的支持和鼓励对我非常重要~

关注我

我是一名奋斗在互联网一线的后端开发工程师。


平时主要关注后端开发,数据安全,欢迎交流。



个人公众号:后端技术漫谈



发布于: 2021 年 08 月 02 日阅读数: 5
用户头像

Zhendong

关注

还未添加个人签名 2020.07.17 加入

还未添加个人简介

评论

发布
暂无评论
3分钟搭建一个网站?腾讯云Serverless开发体验