您是否真的在構建無伺服器系統?

2021-10-06 09:09:17 字數 2752 閱讀 2702

無伺服器計算(或簡稱為「無伺服器」)是軟體開發組織中新興的架構選擇。 無伺服器計算有兩種形式:後端即服務,為應用程式開發人員提供用於推送通知等常見服務的api,以及功能即服務(faas),後者使開發人員可以在伺服器中部署**(「功能」)。響應事件而執行的雲,而不必擔心其執行環境(無論是伺服器還是容器)。

當開發人員使用faas時,雲提供商負責自動部署功能並隨著工作負載的變化對其進行擴充套件。 在本文中,我將重點介紹無伺服器的faas風格,並交替使用「 faas」和「無伺服器」這兩個術語。

無伺服器支持者聲稱,它使軟體的開發和部署比以往任何時候都更加輕鬆,快捷和廉價。 無伺服器架構使開發團隊能夠專注於業務價值,而不是運營開銷。 但是有時,在急於採用有前途的新架構時,組織無法跟蹤無伺服器架構的目標-這是架構正規化轉換的常見問題。 結果,他們構建的系統無法充分發揮其優勢,或者在維護方面比應有的挑戰更大。 僅僅因為您的**實現了faas介面,並不意味著您在做無伺服器操作。

在我深入**無伺服器實現出錯的一些方式之前,讓我們退後一步,並詢問您要使用faas嘗試實現的目標。 您真正的目標是什麼?

組織通常採用無伺服器體系結構,並牢記兩個目標:

更大的總體目標是降低運營複雜性,並使開發團隊專注於以降低的成本實現業務價值。

如果您同意這些是無伺服器體系結構的主要目標,則需要當心反模式,以防止您簡化擴充套件能力或僅為使用的功能付費。 讓我們看一下我在野外看到的三種此類反模式,以及一些有助於解決這些模式的解決方案:

aws lambda提供了排程功能的功能,例如,它們每15分鐘執行一次。 但是僅僅因為您可以排程函式並不意味著它是乙個好主意。 確實確實需要每天或每小時執行某些任務(例如,資料庫備份),在這種情況下,使用計畫事件是合理的。 但是我已經看到計畫的事件用於檢查是否有任何工作要做。

想象一下乙個預定每十分鐘執行一次的訂單處理功能,以檢查是否有任何訂單以及是否有訂單要處理。 在這種情況下,無論是否要處理任何訂單,您都要為函式呼叫付費,因此您將無法實現「按使用付費」的目標。 此外,您總是只觸發乙個功能,因此,如果您需要比平時更多的資源來處理更多訂單,則不會有這些功能。 結果,您錯過了輕鬆擴充套件的希望。 更不用說在處理新訂單時要引入十分鐘的延遲。

更好的實現方法是確保每個到達的訂單都會觸發將對其進行處理的功能。 您可以通過與其他雲服務(例如s3)或kafka connector的內建整合,通過api閘道器來執行此操作。 這樣,如果沒有訂單,您就不用付款。 如果訂單比平時更多,則觸發更多功能並擁有更多資源來處理所有這些功能。 最重要的是,您現在正在實時處理訂單到達時,而不是任意分批處理。

這基本上是流處理的定義-處理事件(在事件到達時),而不是按任意時間軸進行。 這也是事件驅動的。 您正在使用事件來驅動功能,而事件是傳送通知和共享資料的主要機制。 通過設計一種可以充分利用無伺服器框架的架構,您還可以邁出事件驅動流處理架構的第一步。

無伺服器功能幾乎總是無狀態的( azure持久功能是乙個非常有趣的例外)。 您不能在兩次呼叫之間可靠地在應用程式本身中維護任何狀態。 這意味著任何非平凡的功能都將依賴於外部資料庫來維護狀態。

在大多數情況下,資料庫沒有「按使用付費」模型,這意味著無論是否使用狀態,您都要為儲存狀態付費。 那麼可伸縮性和運營開銷又如何呢? 運營專業人員通常都同意,有狀態服務和資料儲存將投入90%的精力,而無狀態應用程式的操作,容量計畫和可伸縮性則要困難得多。 如果您要自己執行資料庫,則整個無伺服器體系結構將無法實現操作的簡便性。 因此,您必須找到乙個託管服務。 不僅如此,您還需要找到一種具有足夠彈性的託管服務,以利用無伺服器功能進行擴充套件,並且不需要容量規劃。 這並非易事-即使那裡最具可擴充套件性的託管資料儲存也具有複雜的定價模型,需要您提前計畫容量。 但是首先選擇無伺服器體系結構的原因之一是避免進行容量規劃。

不必擔心資料庫的可伸縮性, 一些專家建議將功能連線到服務而不是資料儲存 。 假設存在乙個託管服務可以處理您需要的資料,並且具有適用於您的api和彈性伸縮功能,那麼這是乙個不錯的選擇。 例如,如果您的函式可以將資料讀寫到salesforce.com而不是資料庫中,則這是乙個好主意。 使用apache kafka的pub / sub功能(與faas一樣可擴充套件)也是乙個很好的解決方案,只要其他人正在為您執行它。

但是請記住,如果您的應用程式足夠獨特,那麼您需要編寫自己的資料層服務以基本上充當資料庫的連線池和資料層,無伺服器可能是錯誤的體系結構。 新增此服務時,您現在會建立相同的操作複雜性和固定成本,而原本以為通過無伺服器可以避免這種情況。

這裡有許多本地無伺服器框架:openfaas,kubeless,openwhisk,knative,甚至可能更多。 如果您使用乙個應用程式,這是合理的,因為您需要在自己的資料中心中執行與在雲中相同的應用程式。 但是您需要意識到,本地無伺服器沒有無伺服器所帶來的好處(操作簡便,成本)。

無論使用哪種框架,如果您在自己的資料中心中執行無伺服器,則無論是否使用基礎架構,都需要為基礎架構付費。 您自己的運營團隊正在執行基礎結構,對其進行監視,對其進行維護,對其進行擴充套件並計畫其容量。 沒有節省成本,並且在操作上它可能比其他替代方案更複雜,因為您是在無伺服器框架之上執行應用程式,在容器編排框架之上執行應用程式是在作業系統之上是容器之上。 您可以通過剝離一兩層來簡化很多任務作。

我建議僅當在本地和公共雲中使用相同的無伺服器體系結構的好處超過執行本地部署不需要的額外框架的痛苦時,才建議執行本地無伺服器。

建立無伺服器體系結構有很多好處。 如果做得正確,他們會讓您的團隊專注於業務價值而不是運營,並且在正確的用例中,它可以節省大量成本。 無伺服器似乎對於簡單,無狀態的應用程式特別成功-簡單的etl轉換,提供靜態web內容,處理簡單的業務事件。 當需求變得更加複雜時,重要的是要牢記全域性,並檢視整個體系結構是否仍然可以實現預期的好處。 僅僅因為您實現了faas介面,並不意味著您建立了無伺服器架構。

from:

在linux下構建CVS伺服器

本人裝了fedora2後系統已經安裝好了cvs軟體,所以無需在自己安裝了,只要配置一下cvs就可以使用了!本文就介紹一下配置的過程。第一步 將cvs服務加入到xinetd中,以便以後啟動後會自動啟動該服務。具體的操作是 然後重新啟動xinetd root terry bin etc rc.d ini...

LINUX做伺服器的無盤系統

客戶端是支援pxe方式啟動的刀片,用linux作為伺服器,伺服器配置如下 1 安裝dhcp伺服器dhcpd 2 配置 etc dhcpd.conf檔案,下面是我機器上的檔案 max lease time 1 default lease time 1 注 ip位址永不過期 option subnet ...

Soliware SSD在無盤伺服器中的應用

網咖,教育系統,ktv點歌系統都在大量使用無盤伺服器,因為無盤伺服器減少了維護成本和確保了系統工作效率,但無盤伺服器中工作站的機器執行速度,和本身伺服器的維護成本一直是沒有乙個很好的解決方案,雖然各種無盤軟體系統做了很好的優化,但隨著檔案系統的資料量加大,再好的優化也很難解決機器本身的i o處理速度...