作为一个开发者,应该都能了解一个网站从开发到上线,要通过很多繁琐的步骤。
编写代码,部署利用,部署数据库,申请域名,申请 SSL 证书,域名备案,到最终上线起码要几天工夫。
作为一个不精通代码的业务玩家,当你想搞个网站玩玩时,常常会被淘贵重得离谱的报价吓跑。
这两年 Serverless 的概念被炒得炽热,顾名思义,“无服务”。明天的这篇文章,我想站在一个开发者的角度,带大家简略的体验下应用腾讯云 Serverless 来开发网站的整体流程。看看在 Serverless 的概念下,开发网站是不是变得更加简略了。
本文的次要内容:
- Serverless 概念解释
- 3 分钟部署一个网站
- 10 分钟开发一个在线 RSS 浏览小站
- 腾讯 Serverless Web Function 的优缺点剖析
我是蛮三刀,关注我的集体原创技术公众号:后端技术漫谈
首先放一个我部署好的 RSS 在线阅读器页面:
只有在 url 传入须要解析的 RSS 订阅地址,比方 xxxx/rss?rssurl=https://blog.csdn.net/qqxx666…,就能够解析出该 RSS,并渲染成你想要的博客款式。
整个实现代码除了 html 模板,只须要 4 行代码。
Serverless 概念
Serverless 是一个怎么的运行原理呢?简略的解释下:
腾讯云云函数是腾讯云提供的 Serverless 执行环境。您只需编写简略的、目标繁多的云函数即可将它与您的腾讯云基础设施及其他云服务产生的事件关联。
当然了,Serverless 不是示意没有服务器,而示意当您在应用 Serverless 时,您无需关怀底层资源,也无需登录服务器和优化服务器,只需关注最外围的代码片段,即可跳过简单的、繁琐的根本工作。外围的代码片段齐全由事件或者申请触发,平台依据申请主动平行调整服务资源。Serverless 领有近乎有限的扩容能力,闲暇时,不运行任何资源。代码运行无状态,能够轻易实现疾速迭代、极速部署。
它的大抵执行流程如下图:
所以,Serverless 其实实质上是云服务上帮你整合了云资源,你只须要编写最外围的代码,比方一个申请过去如何解决和返回对应的数据。其余的服务器部署相干的事件,都交给云服务商。这样带来的最外围的益处是节俭了大量资源,只有你的网站有人拜访时,才会计算资源耗费的价格,大幅度降低了老本。
可能你只是想搭建一个博客,以前可能须要买一年的服务器,起码一年开销几百元。在 Serverless 下,如果你的博客访问量并不是很高,可能一年只有破费十几块钱。
3 分钟部署一个网站
咱们关上 Serverless 创立函数服务页面:
https://console.cloud.tencent…
抉择 Python3 Web 函数模板:
接着能够设置一些根本信息,这里我啥也没批改,间接点击实现。
大略期待 30 秒,一个 Serverless 服务就创立实现了。
接下来,咱们就被跳转到了代码编辑页面。因为咱们在下面的选项里选了 Python3 Web 开发,所以代码默认有了一个最根本的 Flask 框架模板。(Flask 是什么?是 Python 的一个 Web 开发框架,就像 Java 上面的 SpringBoot 一样,也能很轻松地开发一个 Web 服务。官网文档:https://flask.palletsprojects…)
模板代码曾经有了门路(“/”)最根本的返回值,咱们把他改几个字,而后点击左下角部署按钮。破费了十几秒部署实现后,点击测试,咱们就能看到返回的 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-1252…
能够看到,完满解析出了我 CSDN 博客的 RSS 流,并且能够一个个关上。动图见文章最上方。
Web Function 的优缺点剖析
能够看进去,Serverless 开发一个网站和传统网站开发区别十分大,它撇去了传统开发中那些繁杂然而又不常常会去批改的配置和流程,让开发者专一于业务逻辑的开发。然而这种开发方式真的完满吗?我思考了一下它的劣势和有余。
最显著的劣势便是它简化了开发的步骤,省去了很多部署的无聊工作量。然而,它的简化是有代价的,简化是会就义很大一部分灵活性和可定制性的。简化可能好用的前提是,云服务商把这些事件做到了,并且做好了。如果你的网站须要大量简单的逻辑,并且须要优化网关的配置,那么很多事件在 Serverless 下,至多在目前提供的 Serverless 下,还是做不到的。
下面说到的弊病,其实会带来一个很大的问题,就是 沉没老本,当你花了很多工夫在 Serverless 上,却发现有一些小的要求或者定制化,没法实现,这时你是去翻文档,提工单,还是抉择老老实实买个虚机,本人手动重新部署呢。
当然,上述观点是一个开发者的视角来看的。
作为一般消费者,可能很多时候只须要部署一个动态网站,用来放一个博客,或者说推广下本人的公司和产品。那么 Serverlss 大概率是符合要求的。
除了下面的主要矛盾外,还有一点是我想提出的,就是 目前在线代码编辑页面的调试性能有点太弱了。
在最开始的 Python3 Web 模板中,在线的依赖库貌似缺失了新版本的 feedparser 和 flask,导致我在本地调试可能运行的代码放到 Serverless 上各种不胜利,然而错误信息却很难找。导致我不得不在 VS Code 的终端里,一个手动开 flask 服务,一个去 curl 申请,能力看到报错信息。
当然,这个可能是我本人走得歪路,然而在页面上,很难一眼看进去 Debug 窗口在哪里。
在用户体验上,还有很多事件能够做。
总结
人不知; 鬼不觉又是一篇 2500 字的文章,一个残缺的周末又没有了。
Serverless 概念提出了好几年了,其产品状态总感觉还在摸索阶段,它的用户群体到底是开发者,还是一般消费者,其实还是会被产品状态所影响。
不管怎么说,Serverless 在老本的节俭上是引人注目的,我也心愿在我的云服务器过期后,可能把本人的博客和其余服务,部署在 Serverless 上,可能节俭一大笔开销。光是老本这一点,就值得我一直关注着 Serverless。
如果文章对你有帮忙,请各位老板转发反对一下,你的反对和激励对我十分重要~
关注我
我是一名奋斗在互联网一线的后端开发工程师。
平时次要关注后端开发,数据安全,欢送交换。
- 微信公众号:后端技术漫谈
- Github:@qqxx6661
- CSDN:@蛮三刀把刀
- 知乎:@后端技术漫谈
- 掘金:@蛮三刀把刀
- 腾讯云 + 社区:@后端技术漫谈
- 博客园:@后端技术漫谈
- BiliBili:@蛮三刀把刀
集体公众号:后端技术漫谈