當前位置:
首頁 > 最新 > 隆重介紹:FaunaDB無伺服器雲

隆重介紹:FaunaDB無伺服器雲

主要結論

FaunaDB的主要功能包括:無伺服器、對象關係型、圖形(Graph)、全球複製、ACID、時間(Temporal)、支持聯接(Join)、外鍵、企業安全性等。

事務中可進行資料庫查詢操作,並可由無伺服器函數或客戶端在邊緣位置直接提交。

對象級訪問控制幫助開發者省略設置身份驗證上下文的任務,並可使用縱深防禦技術增強安全性。

本文對比了DynamoDB和FaunaDB,展示了如何將數據從前者移植至後者。

今年春季,Fauna發布了FaunaDB無伺服器雲(Serverless Cloud):首個專為無伺服器應用程序設計的資料庫。與傳統的雲端資料庫即服務產品不同,該產品提供的基本功能可以幫助開發者安全地構建並運行無伺服器應用程序,而無須配置或運維基礎架構。

Fauna最初於四年前開始開發FaunaDB,遠遠早於「無伺服器」架構的誕生。在體會到管理伺服器和資料庫基礎架構的痛苦後,Fauna團隊決定解決這個問題。他們開發的這個資料庫為無伺服器應用程序提供了完美支持,這其實是一個趨同進化的問題。誕生於2016年的無伺服器技術作為一種應用程序架構進一證實了Fauna所採取方法的有效性。

FaunaDB無伺服器雲是FaunaDB的託管版本,而FaunaDB是首個可自適應的運維資料庫。FaunaDB是一種對象關係型、全球複製、強一致的時間資料庫。該產品在多個方面進行了適當的取捨,以一種NoSQL的方式對JSON提供了良好支持,但同時也支持聯接、外鍵、唯一索引,以及其他必要關鍵功能,但並不像SQL那麼複雜或不安全。該產品還可原生支持分布式圖形和圖形函數,尤其適合存儲包含數十億節點和邊緣,高度聚集的圖形,實現其他系統無法實現的工作負載。所有功能均具備ACID一致性和企業級安全性,因此該產品適合極為廣泛的用例,從社交網路映射到將變更引入應用,再到實現需要分類賬和全球分布的重要金融應用,均可得到妥善支持。

無伺服器

無伺服器架構正在對需要通過現代化開發實踐協調資料庫基礎架構的開發者展現出越來越強的吸引力。雖然很多人依然在忙於將應用程序解耦成微服務,並逐漸迎合持續交付等趨勢和原則,但資料庫依然固守在單體(Monolithic)應用的模式,而應用程序棧的其他層已經變得更簡單、更便宜、更易用。逆流而上的資料庫基礎架構依然昂貴、脆弱、難以運維。隨著應用程序開發工作變得更加高效,資料庫方面遭遇的痛點也愈加嚴重。

對很多人來說,無伺服器資料庫這一概念與無伺服器這一原則是背道而馳的。無伺服器架構被稱之為「函數即服務」(FaaS),即事件驅動的架構。開發者只需要簡單地編寫函數並將其部署至基礎架構即可。基礎架構會在函數被調用時開始執行。其餘時間裡,函數處於休眠狀態,不耗費任何資源。如果將這一特性應用於無伺服器資料庫,似乎會產生一種悖論:無伺服器函數是暫存的,而按照定義,數據層應該是持久的。

最大的問題在於,目前現有資料庫主要是面向傳統應用程序構建的,需要在一個地理位置通過一系列固定的伺服器持續運行。為了恰當地使用這些資料庫,應用程序開發者需要知道大量有關資料庫配置的信息。在最糟糕的情況下,高可用和性能完全取決於開發者對資料庫內部機制的了解。開發者需要了解並配置諸如區域、地域、數據量、內存、軟體版本、CPU等信息。團隊需要花費大量時間考慮容量規劃、配置、切片、備份、性能調優、監視等問題。當你80%的時間用於配置和運維資料庫,僅僅是為了向無伺服器函數提供支持時,你會發現一定有什麼東西被忽略了。雖然AWS Lambda和無伺服器架構提高了計算層彈性,但如果你需要存儲數據,持久存儲層並不能從這樣的彈性中獲益。

逃離配置工作中的陷阱

FaunaDB無伺服器雲通過下列方式解決了這些問題:

無需配置

真正彈性伸縮(無需運維介入)

按用量付費的「微記賬」

在使用FaunaDB無伺服器雲構建和運行應用時,開發者無需了解有關基礎架構的任何細節,例如節點規模、內存,或存儲。AWS Lambda正是通過同樣的方式提出了按照每一個函數的調用進行收費的舉措,FaunaDB無伺服器雲的消耗則是通過「Fauna點數」的方式衡量的。Fauna點數是對不同工作負載所消耗計算和存儲資源進行的量化體現,而這也正是無伺服器資料庫的精髓:用戶絕對不會為閑置的容量付費。資料庫用量主要可通過函數的調用和工作負載來體現,僅此而已。

對於標準化DBaaS產品,只能通過超量配置的方式應對流量激增。FaunaDB按用量付費的定價方式可防止浪費的超量配置,因為FaunaDB可在無需用戶介入的情況下進行彈性伸縮,開發者可隨時使用而無需預先規劃容量。應用程序總是能獲得足夠的容量,不會因為限制容量無謂地產生成本。FaunaDB的使用成本可以隨著用量一起伸縮,用戶永遠無需為未使用的容量付費。

與無伺服器資料庫的交互

FaunaDB提供了極具表現力的查詢語言,非常適合無伺服器環境。無需學習新語法,用戶即可將FaunaDB查詢寫入自己使用的任何語言中。

下文列舉了一個使用Javascript的FaunaDB查詢範例。在這個查詢中,我們首先檢索用戶,隨後返回了用戶全名組成的字元串:

var faunadb = require( faunadb ), q = faunadb.query;

其他語言中的表達同樣簡單。Fauna提供了適用於Android、Swift、JavaScript、Ruby、Java、Scala、C#、Python,以及Go的驅動。

FaunaDB查詢語言的完整文檔請參閱這裡。

大部分NoSQL查詢語言通常只能針對數據提供CRUD操作,因此往往很難在SQL中編寫複雜的業務規則。但FaunaDB的查詢語言更類似於常規用途的通用編程語言。我們可以用熟悉的功能以直觀的方式編寫應用程序邏輯,例如if語句、變數賦值,以及Map、Foreach、Filter等豐富的函數化編程工具。此外由於FaunaDB查詢是自動事務型的,用戶永遠無需擔心代碼在查詢過程中崩潰導致數據處於不完整(Half-written)狀態。

下文列舉了一個功能更強大的例子,可以按照地區顯示伍德賽德市(Woodside)犯罪追蹤報告中的變化情況,但會排除調用者自身所在的地區。該範例展示了圖形查詢、多級聯接、索引,以及時間等特性,所有這些特性可用在一個查詢中。

q.Map( q.Paginate( q.Join( q.Intersect( q.Join( q.Difference( q.Match(q.Index("districts_by_city"), "Woodside"), q.Index("users_by_district")), q.Match(q.Index("users_by_group"), "Crime Watch")), q.Index("reports_by_user")), { events: true, after: q.Date("2017-1-1") } ), function(event), { return q.Get(q.Select("ref", event)) } )無伺服器安全模型

FaunaDB一個最重要的獨有特性在於其無伺服器安全模型。FaunaDB固有的安全性意味著用戶無需通過中間件執行任何身份驗證或授權檢查。這樣開發者就不需要編寫多餘,並且非常易於出錯的樣板功能(Bilerplate function),例如用於設置身份驗證上下文或管理應用一致性的代碼。舉例來說,用戶的無伺服器FaunaDB資料庫可以知道誰撰寫了某篇博客文章,隨後限制其他用戶只具備讀取的許可權。

下列查詢可創建一篇博客文章。所有人均可讀取該文章,但我們希望只有作者可以編輯。為此可做如下設置:

q.Create(q.Class("posts"), { data: { text: "..." }, permissions: { read: "public", write: q.Ref(q.Class("users"), 123) } })

用戶向FaunaDB發起的後續請求可以假定用戶身份,FaunaDB會強制實施事先配置的許可權:只有本文作者可以修改,所有其他人只能讀取。Lambda本身無需了解具體所有權,自然也不會產生安全漏洞。由於業務規則已建模在資料庫中,因此系統面對可能導致對數據進行未經授權訪問的Bug可獲得額外的保護。這種方式更簡單也更安全,同時大幅減輕了無伺服器應用的負擔。最棒的地方在於,如果使用API網關,網關可以將用戶的資料庫訪問令牌傳遞給Lambda函數,這樣函數即可透明地以用戶身份與FaunaDB交互。

Serverless框架

如果打算在諸如AWS Lambda這樣的雲平台上運行函數,此時可以使用Serverless框架。Serverless框架已成為市場主流,提供了一種簡潔的系統,可以幫助我們配置、編寫、部署無伺服器應用程序代碼到不同的雲基礎架構。

下文的範例展示了將無伺服器架構的存儲從DynamoDB移植到FaunaDB的過程。藉此可直觀對比FaunaDB與DynamoDB查詢,同時還可以看出設置使用FaunaDB作為持久層的無伺服器環境,整個過程到底有多簡單。

該應用是一個簡單的REST API,可創建、更新、刪除「todo」項。此外還可列出所有「todo」的次數。所有代碼和相關說明已發布至GitHub。

Serverless框架提供了一種格式化的serverless.yml,該文件定義了服務,並將函數鏈接至事件處理程序。

readAll的函數定義如下:

functions: readAll: handler: handler.readAll events: - http: path: todos method: get cors: true

該配置意味著handler.js中的readAll函數會在todos路徑收到HTTP GET後調用,該函數會鏈接至handler.js。

Handler.js中的所有內容只需考慮HTTP的管理,因此每個函數的實際邏輯可從模塊中導入。本例中的模塊是todos-read-all.js。這正是FaunaDB的用途所在。

use strict ; const faunadb = require( faunadb ); const q = faunadb.query; const client = new faunadb.Client({ secret: process.env.FAUNADB_SECRET }); module.exports = (event, response); }).catch((error) => { callback(error) }) };

通過這樣的配置,我們便可以輕鬆地使用通過serverless.yml配置傳遞的FaunaDB秘密(Secret),為所有todo項運行查詢。這個例子遠比完整的對象級訪問控制所能實現的功能簡單。若要進一步了解FaunaDB的訪問控制,可參閱Chris Anderson在Serverless.com發表的,有關身份驗證和授權的博客文章。FaunaDB查詢會使用HTTP,因此無需擔心要在不同模塊或調用之間共享連接。

DynamoDB和FaunaDB版本之間的主要差異在於,下列語句:

return dynamoDb.scan(, (error, data) => { … })

變成了:

結論:FaunaDB何以如此與眾不同?

FaunaDB無伺服器雲是唯一針對無伺服器應用設計的資料庫。該資料庫只需要最少量時間進行設置,不會造成費用負擔。對於企業來說,無伺服器架構可以幫您隨時對業務進行伸縮,同時可真正降低成本。相比其他資料庫,該技術的配置步驟少,無需運維介入,管理負擔更輕。獨特的定價方式意味著您的基礎架構成本只取決於實際的資源消耗情況。

儘管無伺服器架構是一種新概念,但FaunaDB技術本身已經獲得了證實。該技術的開發完全圍繞現實世界中的運維工作負載,很多客戶已經在生產環境中運行該技術超過一年的時間。目前全球有上千萬用戶正在使用,這也意味著您可以放心地通過無伺服器資料庫構建您的無伺服器應用。

在這裡註冊免費試用,您將免費獲得1,000,000個Fauna點數。

關於本文作者

Matt Freels是Fauna的CTO兼共同創始人。Matt曾擔任Twitter資料庫團隊的技術主管,在Twitter任職時,Matt曾與同是Fauna共同創始人的Evan Weaver合作負責面對爆發性增長過程中服務的伸縮工作。在加入Twitter之前,Matt曾幫助社交遊戲公司Serious Business處理伸縮問題,該公司的伸縮規模一度甚至超過了Twitter。Matt主要關注設計編程語言和分布式系統的構建,他住在伯克利,喜歡演奏貝司和攀岩。

作者:Matt Freels,閱讀英文原文:Introducing FaunaDB Serverless Cloud

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 推酷 的精彩文章:

MXNet API入門—第4篇
產品設計的內功心法:正確的揣摩用戶心理
技術人生的職場眾生相-十多年的經驗與心得
中關村銀行今日正式開業,如何專註服務「三創」做不一樣的GP Bank?
DockOne微信分享:Juice-一種基於MesosFramework的任務雲框架

TAG:推酷 |

您可能感興趣

Linux Ubuntu搭建Git伺服器
VSCode 引入 Python 語言伺服器;Canonical 請求幫助測試 Ubuntu 伺服器安裝程序
亞馬遜CTO宣布無伺服器Lambda重大更新 AWS越來越「取悅」開發者了|re:Invent
在linux中搭建samba伺服器
使用 VMware 創建 Linux 伺服器
Oculus CDN伺服器的XSS漏洞
Facebook CDN伺服器的XSS漏洞
PUBG Xbox One獲得Oceanic伺服器
Nginx+FastDFS圖片伺服器搭建
Linux中DNS伺服器搭建
搭建Apache伺服器
Cloud Next:Google Cloud Run將無伺服器基礎設施帶入軟體容器
Windows和Ubuntu系統如何遠程連接Linux伺服器
下一代伺服器處理器Cascade Lake-SP將支持3DXPoint DIMM
新的Apache Struts RCE缺陷讓黑客接管Web伺服器
如何快速在Ubuntu Linux伺服器上安裝一台MQTT伺服器?
網時:伺服器如何選擇Linux和Windows操作系統
追月,Linux雲伺服器編譯安裝最新Apache、PHP和MySQL
Nikto-Web伺服器掃描器
linux-CentOS搭建Git伺服器作為私有倉庫使用