初探 Serverless AWS Lambda

一開始並沒有接觸到Serverless 這個詞,只有聽到AWS Lambda,所以就嘗試使用Lambda 做了微型服務,以下是我的履歷網站網址,最下方聯絡我的部分,就是利用AWS Lambda的服務。

https://resume.vnewin.com/

之前想說要換工作所以做了一個履歷資料網頁,想說讓面試人員可以認識我,簡單介紹一下自己,但跟朋友說要換工作換到現在,過一陣子了,最近終於跟主管說想離職休息一下!

說真的我朋友說我如果沒有遇到大事不會換工作,都不相信我會換,而且我也穩穩地在目前這份工作工作三年了!(這次我第一份工作)

但這一兩年實在很不順,人生方面不是工作,工作一直順順的,直到去年不小心出車禍,太可怕了讓我了解人類的渺小,讓我躺在家裡將近一個月,現在好多了,可能這一兩年真的非常不順,萌生下這個決定的想法,現在我也終於下定決心離職,看來我真的要出大事才會下定決心。

希望一切越來越好,離題了~今天來介紹我做的這一個小功能,履歷網站的聯絡我功能,順便介紹一下Serverless 先從以前開始說起。

我所知道的 主機到 Serverless

剛剛有提到我一開始接觸到這個AWS Lambda名詞,有點忘記哪一個講座了!第一次聽到覺得真的很新奇,AWS把雲端服務更抽象的出來。

以前可能要買一台伺服器主機,然後安裝需要的網站伺服器軟體、資料庫,如果開發PHP就要再裝PHP。

在往後一點,變成可以用租的,有專門公司在幫你顧伺服器,不管是虛擬的主機或是真實主機都由那間公司幫我們處理實體機器的部分。

近期演變到到雲端的部分,也是有虛擬機的技術,例如AWS的EC2,以上就是如何擁有可以運行的主機方法。

大流量架構

從每一台手機都能上網,網路也越來越方便,系統功能也越來越複雜的時代,分工越來越細用來應付這些大流量的情形。

資料庫

先以資料庫的方面來說,資料庫獨立安裝在一台伺服器,讓這一台伺服器的資源全部負責資料庫的運作,當然還有更細部的分工,比如說多一台機器只做讀取,另外一台只做寫入的動作,之間做同步的動作,甚至在資料庫前再加裝一層  Connection Pool 來排隊要進資料庫交易的連線。

不像我一開始學習時,所有服務都裝在同一台伺服器上。

架設都需要主機,到雲端的時候變成,你跟AWS申請資料庫,其他伺服器相關設定,他們解決,不管要異地備份,或是讀寫分離,都可以在控制台上設定,其他你都不需要擔心,安全方面,專門有人維護,只要不要太誇張,例如密碼隨便放,基本上資料庫主機的安全,已經不用擔心了。

因此更抽象出來不需要安裝資料庫程式在伺服器中,與AWS 申請就可以,網站伺服器連線到資料庫服務就行了,Amazon 叫做 RDS的雲端服務。

資料庫有一個自己的規劃架構,來應付跟它們查詢、新增、修改、刪除的動作,主機的容量,CPU也都可以用虛擬化的技術,直接調整,想要多大的CPU、多大的容量控制台可以處裡完成。

網站伺服器架構

就算資料庫可以吃下這些流量,那網站伺服器一台來應付這些流量?當然不是!網頁掛掉,資料庫活著,沒有介面讓使用者操作也沒有用。

因此以網站伺服器的方面,出現了Docker 之類的技術,或多開幾個虛擬主機,前面多一層,使用一個負載平衡器的主機,去分配現在進來的流量要給哪一個主機處理。

所以每一台主機CPU變成一個關鍵,雲端服務甚至可以依照CPU高於多少,幫你加開機器,但就需要將基本的網站檔案包裝起來並自動部屬。

雖然看是美好,但是會員登入的狀態session 存成檔案的話,如果會員進到不一樣的伺服器,將會發現莫名其妙被登出,這時候可以靠資料庫來幫忙,將session 由資料庫來統一處裡。

可能會說資料庫很累了!還要再讓它處裡Session ,不要忘記伺服器、資料庫不需要在同一台主機的觀念下,在跟AWS RDS 申請一個資料庫就可以!只不過就是錢的問題。或許也可以做快取的機制,AWS上面也有很多功能可以使用,有玩到再與大家分享。

但問題不只這樣,還有使用者上傳的檔案,檔案儲存在某一台機器,那在不同機器肯定找不到,所以雲端服務,也抽象出來檔案儲存的儲存槽,AWS就是S3這個服務,幫你處理好異地備份,容量也只需要設定需要的大小,可以隨時新增。

伺服器的架構流量不大當然將網站伺服器、資料庫...安裝在同一台就好,但流量大才漸漸衍生出來這些東西。

AWS Lambda

現在已經拆開來很多服務,還不夠說了那麼多終於來到主題,AWS Lambda ,網站伺服器裡面一定會有你寫的各種程式商業邏輯,那麼這一些邏輯就是Serverless 架構抽象的目標,將程式中的方法function 在抽象出來,網站伺服器也不需要擔心了!全由AWS處裡,只需要做一件事情,將程式寫好,錢準備好就可以了,AWS 也會負責幫忙處裡流量的部分。!

有用到再付錢,沒有持續運行主機的費用,請求API使用方法,方法處裡完成,回傳結果,整個處理過程多少毫秒,以每一百毫秒來計算費用

主要的好處就是上線快,寫好程式就可以做一個服務,另外也可以減少系統結構越來越大的問題,因為每一個功能,做一件事情。

我自己認為這樣的Serverless的架構,只適用於公司的微型服務,當然你也可以建立很多方法,來打造整個系統,每一個操作都去請求AWS Lambda 方法,但是資料庫,檔案儲存,這些還要持續運行,這也是一間公司的價值。我是有在網路上查到一個可口可樂的販賣機使用這樣的方式來確認會員,可以參考下方網址,有用到才收費,節省一些成本。

https://aws.amazon.com/blogs/aws/things-go-better-with-step-functions/

也因為分的那麼細,資料庫、檔案儲存、網站伺服器,還可以只寫方法就好,使用雲端服務幫我們處裡好所有架設伺服器的事情,只寫程式來快速當作一些輔助的功能。

API

整個過程都可以請求API執行AWS Lambda 方法來完成,API也是當前流行的開發模式,減少耦合當然也就可以隨便介接都可以,只要是API的方式,要完成甚麼事情都不太困難,請求API開啟鐵門、請求API取得各式各樣的資訊,或觸發各式各樣的電子設備,更何況近期5G的來臨,據我的了解比4G快2500倍,很多工廠的極限有可能可以被操出來,各種感測器裝起來,收集大量的數據,不管是不是用AWS Lambda ,API都是一重要角色,我自己手機是還沒有想要換5G,因為感覺不太需要。

聯絡我流程介紹

那麼回到最初提到的我的履歷網站,最下方的聯絡我的部分,輸入完資料以後,我會收到Line通知。

我使用了AWS Lambda 來介接,我原本就有一個虛擬機,也是可以用虛擬主機,寫程式來請求 LINE API就好,但我這個網站,我只簡單使用了HTML模板,建置前端畫面,並沒有後端程式碼,所以你也可以將他放在Git Page 只支援靜態網站的空間。

https://resume.vnewin.com/

不果我想要製作一個通知我的功能,所以我配合AWS Lambda,這裡我將方法寫在 AWS Lambda ,並且介接LINE Notify,HTML模板使用JavaScript ajax 非同步請求我寫好在AWS Lambda 的方法,方法內容很簡單就是去請求LINE Notify 讓我的LINE可以收到通知。

填完資料按下傳送如下圖所示,顯示聯絡成功的字樣,表示我的AWS Lambda的方法有回傳正確值。

如下所示,我的Line 就會顯示表單內容,我只有簡單的將請求表單顯示出來而已。

大概流程長這樣!

想要連線什麼主機,自己的資料庫伺服器主機或AWS RDS資料庫,或是連結S3 檔案儲槽,下載檔案都可以。

最後

歡迎LINE我! 開玩笑有事再大膽的按下傳送的功能,要試試看也是沒關係我再截圖給你~哈哈哈xD 離題了!總結一下

不過雖然很方便,但全部都要依靠第三方,不管是AWS或Google 的雲端服務,資料也都要存在他們那邊,資料庫與網站伺服器的連線溝通,也都變得要收費,或者連線到自己的資料庫,拿到資料以後經由Lambda 回傳,也是會經過別人家,還是考慮一下,是否真的要由這些雲端主機商託管。

安全性是一定有了!感覺很多的專家都被聘請至AWS,負責顧資料庫主機... 但就是所有的資料都存在他們那邊,請自行斟酌。

Victor
Victor

哈囉!

文章: 233

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *