<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          3分鐘搭建一個(gè)網(wǎng)站?騰訊云Serverless開發(fā)體驗(yàn)

          共 10428字,需瀏覽 21分鐘

           ·

          2021-08-03 09:57


          作為一個(gè)開發(fā)者,應(yīng)該都能理解一個(gè)網(wǎng)站從開發(fā)到上線,要經(jīng)過很多繁瑣的步驟。

          編寫代碼,部署應(yīng)用,部署數(shù)據(jù)庫(kù),申請(qǐng)域名,申請(qǐng)SSL證書,域名備案,到最終上線起碼要幾天時(shí)間。

          作為一個(gè)不精通代碼的業(yè)務(wù)玩家,當(dāng)你想搞個(gè)網(wǎng)站玩玩時(shí),經(jīng)常會(huì)被淘寶貴得離譜的報(bào)價(jià)嚇跑。

          這兩年Serverless的概念被炒得火熱,顧名思義,“無(wú)服務(wù)”。今天的這篇文章,我想站在一個(gè)開發(fā)者的角度,帶大家簡(jiǎn)單的體驗(yàn)下使用騰訊云Serverless來開發(fā)網(wǎng)站的整體流程。看看在Serverless的概念下,開發(fā)網(wǎng)站是不是變得更加簡(jiǎn)單了。

          本文的主要內(nèi)容:

          • Serverless概念解釋
          • 3分鐘部署一個(gè)網(wǎng)站
          • 10分鐘開發(fā)一個(gè)在線RSS閱讀小站
          • 騰訊Serverless Web Function的優(yōu)缺點(diǎn)分析

          我是蠻三刀,關(guān)注我的個(gè)人原創(chuàng)技術(shù)公眾號(hào):后端技術(shù)漫談

          首先放一個(gè)我部署好的RSS在線閱讀器頁(yè)面:

          只要在url傳入需要解析的RSS訂閱地址,比如xxxx/rss?rssurl=https://blog.csdn.net/qqxx6661/rss/list ,就可以解析出該RSS,并渲染成你想要的博客樣式。

          整個(gè)實(shí)現(xiàn)代碼除了html模板,只需要4行代碼。

          Serverless概念

          Serverless是一個(gè)怎樣的運(yùn)行原理呢?簡(jiǎn)單的解釋下:

          騰訊云云函數(shù)是騰訊云提供的 Serverless 執(zhí)行環(huán)境。您只需編寫簡(jiǎn)單的、目的單一的云函數(shù)即可將它與您的騰訊云基礎(chǔ)設(shè)施及其他云服務(wù)產(chǎn)生的事件關(guān)聯(lián)。

          當(dāng)然了,Serverless不是表示沒有服務(wù)器,而表示當(dāng)您在使用 Serverless 時(shí),您無(wú)需關(guān)心底層資源,也無(wú)需登錄服務(wù)器和優(yōu)化服務(wù)器,只需關(guān)注最核心的代碼片段,即可跳過復(fù)雜的、繁瑣的基本工作。核心的代碼片段完全由事件或者請(qǐng)求觸發(fā),平臺(tái)根據(jù)請(qǐng)求自動(dòng)平行調(diào)整服務(wù)資源。Serverless 擁有近乎無(wú)限的擴(kuò)容能力,空閑時(shí),不運(yùn)行任何資源。代碼運(yùn)行無(wú)狀態(tài),可以輕易實(shí)現(xiàn)快速迭代、極速部署。

          它的大致執(zhí)行流程如下圖:

          所以,Serverless其實(shí)本質(zhì)上是云服務(wù)上幫你整合了云資源,你只需要編寫最核心的代碼,比如一個(gè)請(qǐng)求過來如何處理和返回對(duì)應(yīng)的數(shù)據(jù)。其他的服務(wù)器部署相關(guān)的事情,都交給云服務(wù)商。這樣帶來的最核心的好處是節(jié)省了大量資源,只有你的網(wǎng)站有人訪問時(shí),才會(huì)計(jì)算資源消耗的價(jià)格,大幅度降低了成本。

          可能你只是想搭建一個(gè)博客,以前可能需要買一年的服務(wù)器,起碼一年開銷幾百元。在Serverless下,如果你的博客訪問量并不是很高,可能一年只要花費(fèi)十幾塊錢。

          3分鐘部署一個(gè)網(wǎng)站

          我們打開Serverless創(chuàng)建函數(shù)服務(wù)頁(yè)面:

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

          選擇Python3 Web函數(shù)模板:

          接著可以設(shè)置一些基本信息,這里我啥也沒修改,直接點(diǎn)擊完成。

          大概等待30秒,一個(gè)Serverless服務(wù)就創(chuàng)建完成了。

          接下來,我們就被跳轉(zhuǎn)到了代碼編輯頁(yè)面。由于我們?cè)谏厦娴倪x項(xiàng)里選了Python3 Web開發(fā),所以代碼默認(rèn)有了一個(gè)最基本的Flask框架模板。(Flask是什么?是Python的一個(gè)Web開發(fā)框架,就像Java下面的SpringBoot一樣,也能很輕松地開發(fā)一個(gè)Web服務(wù)。官方文檔:https://flask.palletsprojects.com/en/2.0.x/)

          模板代碼已經(jīng)有了路徑(“/”)最基本的返回值,我們把他改幾個(gè)字,然后點(diǎn)擊左下角部署按鈕。花費(fèi)了十幾秒部署完成后,點(diǎn)擊測(cè)試,我們就能看到返回的Body了,如下圖。這時(shí)候你訪問頁(yè)面,也返回了同樣的結(jié)果。

          一個(gè)最最基礎(chǔ)的Web服務(wù)器就OK了,不需要買域名和HTTPS證書,不需要SSH登錄服務(wù)器,不需要手動(dòng)編譯代碼,????。

          10分鐘開發(fā)一個(gè)在線RSS閱讀小站

          上面是牛刀小試,接下來稍微整一個(gè)復(fù)雜一點(diǎn)點(diǎn)的例子。

          **我一直覺得RSS閱讀是一個(gè)雖然過時(shí),但是其精神一直在傳承的閱讀方式。**比如微信的訂閱號(hào),可以說其本質(zhì)也是一種RSS閱讀,通過關(guān)注訂閱,并獲得更新文章的推送,來定制化你的閱讀內(nèi)容。

          所以我想做一個(gè)RSS解析器,通過傳入RSS的網(wǎng)址(很多網(wǎng)站還保留有這個(gè)網(wǎng)址,比如CSDN,比如阮一峰的博客等),能夠渲染出該RSS鏈接里所有的文章,并展示在網(wǎng)頁(yè)上。后面,還可以深度的修改頁(yè)面的展示,做出一個(gè)微信訂閱號(hào)網(wǎng)頁(yè)版,也不是不可能,哈哈哈。

          OK,花里胡哨的就不扯了,先開始實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的事情,把RSS鏈接渲染出來。

          我們使用官方的Flask模板,這個(gè)模板的Flask環(huán)境相對(duì)更加完整,方便開發(fā)。

          我們首先需要一個(gè)RSS解析的框架,在Python中,有一個(gè)feedparser的框架,能夠解析RSS url。

          使用pip3 install feedparser安裝feedparser:

          接著我們?cè)赼pp.py加入代碼:

          import feedparser

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

          在這里,我進(jìn)行了一波本地調(diào)試,看一下feed這個(gè)參數(shù),拿到了什么:

          可以看到,解析后的rss鏈接,被feedparser框架解析為了一個(gè)數(shù)組,每個(gè)entry是一個(gè)文章的標(biāo)題,作者,鏈接等。

          根據(jù)上面的參數(shù)名,我們?cè)偌尤胍粋€(gè)rss/html,放在templates文件夾中,里面寫好了我稍微美化過的html頁(yè)面,并且將每篇文章循環(huán)插入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="#">首頁(yè)</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>

          兩個(gè)文件修改完,直接點(diǎn)擊部署然后訪問騰訊云給我們分配的域名:

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


          可以看到,完美解析出了我CSDN博客的RSS流,并且可以一個(gè)個(gè)打開。動(dòng)圖見文章最上方。

          Web Function的優(yōu)缺點(diǎn)分析

          可以看出來,Serverless開發(fā)一個(gè)網(wǎng)站和傳統(tǒng)網(wǎng)站開發(fā)區(qū)別非常大,它撇去了傳統(tǒng)開發(fā)中那些冗雜但是又不經(jīng)常會(huì)去修改的配置和流程,讓開發(fā)者專注于業(yè)務(wù)邏輯的開發(fā)。但是這種開發(fā)方式真的完美嗎?我思考了一下它的優(yōu)勢(shì)和不足。

          最明顯的優(yōu)勢(shì)便是它簡(jiǎn)化了開發(fā)的步驟,省去了很多部署的無(wú)聊工作量。但是,它的簡(jiǎn)化是有代價(jià)的,簡(jiǎn)化是會(huì)犧牲很大一部分靈活性和可定制性的。簡(jiǎn)化能夠好用的前提是,云服務(wù)商把這些事情做到了,并且做好了。如果你的網(wǎng)站需要大量復(fù)雜的邏輯,并且需要優(yōu)化網(wǎng)關(guān)的配置,那么很多事情在Serverless下,至少在目前提供的Serverless下,還是做不到的。

          上面說到的弊端,其實(shí)會(huì)帶來一個(gè)很大的問題,就是沉沒成本,當(dāng)你花了很多時(shí)間在Serverless上,卻發(fā)現(xiàn)有一些小的要求或者定制化,沒法實(shí)現(xiàn),這時(shí)你是去翻文檔,提工單,還是選擇老老實(shí)實(shí)買個(gè)虛機(jī),自己手動(dòng)重新部署呢。

          當(dāng)然,上述觀點(diǎn)是一個(gè)開發(fā)者的視角來看的。

          作為普通消費(fèi)者,可能很多時(shí)候只需要部署一個(gè)靜態(tài)網(wǎng)站,用來放一個(gè)博客,或者說推廣下自己的公司和產(chǎn)品。那么Serverlss大概率是符合要求的。

          除了上面的主要矛盾外,還有一點(diǎn)是我想提出的,就是目前在線代碼編輯頁(yè)面的調(diào)試功能有點(diǎn)太弱了

          在最開始的Python3 Web模板中,在線的依賴庫(kù)貌似缺失了新版本的feedparser和flask,導(dǎo)致我在本地調(diào)試能夠運(yùn)行的代碼放到Serverless上各種不成功,但是錯(cuò)誤信息卻很難找。導(dǎo)致我不得不在VS Code的終端里,一個(gè)手動(dòng)開flask服務(wù),一個(gè)去curl請(qǐng)求,才能看到報(bào)錯(cuò)信息。

          當(dāng)然,這個(gè)可能是我自己走得歪路,但是在頁(yè)面上,很難一眼看出來Debug窗口在哪里。

          在用戶體驗(yàn)上,還有很多事情可以做。

          總結(jié)

          不知不覺又是一篇2500字的文章,一個(gè)完整的周末又沒有了。

          Serverless概念提出了好幾年了,其產(chǎn)品形態(tài)總感覺還在摸索階段,它的用戶群體到底是開發(fā)者,還是普通消費(fèi)者,其實(shí)還是會(huì)被產(chǎn)品形態(tài)所影響。

          不管怎么說,Serverless在成本的節(jié)省上是有目共睹的,我也希望在我的云服務(wù)器過期后,能夠把自己的博客和其他服務(wù),部署在Serverless上,能夠節(jié)省一大筆開銷。光是成本這一點(diǎn),就值得我不斷關(guān)注著Serverless。

          如果文章對(duì)你有幫助,請(qǐng)各位老板轉(zhuǎn)發(fā)支持一下,你的支持和鼓勵(lì)對(duì)我非常重要~

          關(guān)注我


          往期精彩文章:


          B 站崩了,總結(jié)下「高可用」和「異地多活」


          軟件開發(fā)的22條黃金法則


          API網(wǎng)關(guān)才是大勢(shì)所趨?SpringCloud Gateway保姆級(jí)入門教程


          從吳某凡事件中理解什么是"中間人攻擊"


          上海,想說愛你不容易



          瀏覽 45
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲黄色电影大全 | 一区二区三区无码区 | 黄片视频在线免费观看 | 亚洲精品一级 | 大香蕉人人操 |