ref: https://loft.sh/blog/the-cost-of-managed-kubernetes-a-comparison/
本篇文章探討不同 Cloud Provider kubernetes 服務的差異,作者列舉了四個常見的 kubernetes 服務,包含 GKE, EKS, AKS 以及 DOKS。
這四個 kubernetes 服務所部署的 Kubernetes 叢集都有獲得 CNCF Kubernetes Certification 的認證,不同 Cloud Provider 都有自己的優缺點。
使用 Kubernetes 服務帶來的好處就是使用者通常不太需要去擔心如何處理
1. Kubernetes 核心元件之間的 Certificate (API Server, Controller, Scheduler, Kubelet ...etc)
2. 動態調整 Kubernetes 節點
3. 相較於單純靠社群, Cloud Provider 可以提供更快速且更好的支援(畢竟有付錢給對方)
因此該文章接下來就會針對這四個 Kubernetes 服務來探討一下彼此的差異。
註: 有興趣的話都可以用 Sonobuoy 這個開源專案來檢測自己維護的 Kubernetes 叢集,通過測試就可以把測試報告送到 GitHub 開 Issue 申請認證
GKE
1. Kubernetes 正式公開後一個月就 GKE 就出現了 (08/2015), 是最早的 Kubernetes 服務
2. GKE 會使用 gVisor 專注於安全層級的容器隔離技術來部署服務。
3. 有機會使用針對 Container 最佳化的 OS,有些 cloud provider 只能使用 Ubuntu image 之類的。
4. 服務出現問題時,可以啟動 auto-repair 來修復叢集,一種典型作法就是將一直回報為 NotReady 的 k8s 節點給重建
5. GKE 提供自動升級 Kubernetes 版本的功能,如果不想要的話記得要去關閉這個功能,否則自動升級是有可能讓某些應用程式無法正常運作的。
6. 使用 GKE 的話,要付每小時 $0.1 美元的管理費。如果使用 on-prem 的解決方案 (Anthos) 的話就可以免去這些管理費。
EKS
1. 06/2018 創立
2. 可以使用 Ubuntu Image 或是 AWS 針對 EKS 最佳化的 EKS AMI 來獲得更好的效能。
3. EKS 沒有提供自動升級 Kubernetes 版本的功能,官方有提供大量詳細的文件介紹如何手動升級 Kubernetes 版本
4. 沒有類似 auto-repair 的機制去幫忙監控與修復出問題的 k8s node,因此 EKS 使用者需要自己去監控與維護這些節點。
5. EKS 也是每小時 $0.10 的管理費用。 AWS Outposts/EKS Anywhere 這些 2021 啟動的專案讓你有機會將 EKS 部署到 on-prem 的環境中。
AKS
1. 06/2018 創立
2. AKS 沒有提供任何最佳化的 OS,你只能使用常見的那些 OS image 作為你的 k8s 節點
3. 預設情況不會自動升級 kubernetes 版本,不過 AKS 提供選項去開啟自動升級。Cluster 有四種不同策略(none,patch,stable,rapid)來自動更新你的 k8s 叢集。
4. AKS 預設不會啟動 auto-repair 功能。對於一直持續回報 NotReady 的節點, AKS 會先重起該節點,如果問題無法解決就會砍掉重建節點。
5. AKS 不收管理費
6. Azure 沒有特別提供一個供 on-prem 的 AKS 解決方案,不過透過 ARC 是有機會於 on-prem 的環境運行 AKS.
DOKS(DigitalOcean)
1. 05/2019 創立
2. 有提供 kubernetes 版本自動更新功能,但是只有針對 patch 版本的變化
3. 沒有 auto-repair 的功能
4. 文章撰寫的當下, DOKS 沒有任何文件說明如何於 on-prem 的環境運行 DOKS
5. 不收管理費
6. 相對其他三家來說,底層架構相對便宜,一個 DOKS 最低可以低到每個月 $10 美元。
價錢比較:
1. 假設需要創建一個擁有 20 節點並且有 80vCPU, 320GB RAM 的叢集 (GKE 因為每個節點都是 15GB,所以最後只能湊到 300GB)
2. 每個月為單位去計算價格,AKS/EKS/GKE 都使用其提供的價格計算機來粗估, DOKS 需要手動計算。
3. 價錢評比
a. AKS: $3416
b. EKS: $2928
c. DOKS: $2400
d. GKE: $1747
對文章有興趣的別忘了參閱全文
「node github」的推薦目錄:
- 關於node github 在 矽谷牛的耕田筆記 Facebook 的最讚貼文
- 關於node github 在 BorntoDev Facebook 的精選貼文
- 關於node github 在 Taipei Ethereum Meetup Facebook 的最讚貼文
- 關於node github 在 nodejs/node: Node.js JavaScript runtime - GitHub 的評價
- 關於node github 在 Node.js zh-TW - GitHub 的評價
- 關於node github 在 Node.JS DevOps: Simplify Your Life with GitHub Actions 的評價
- 關於node github 在 node-oracledb version 5.3 - Oracle Open Source 的評價
- 關於node github 在 How to Connect Github API with a Nodejs Server - Crowdbotics 的評價
- 關於node github 在 How to run an existing node app from github? - Stack Overflow 的評價
- 關於node github 在 How to run an existing node app from github? - Stack Overflow 的評價
- 關於node github 在 Creating a GitHub App with Node.js - Medium 的評價
- 關於node github 在 GitHub Actions: Setup-node now supports dependency caching 的評價
- 關於node github 在 Aws Lambda Node Js Example Github 的評價
- 關於node github 在 How to Create a Custom GitHub Action with Node & JavaScript 的評價
- 關於node github 在 Set Up a GitHub Project with node_module | Pluralsight 的評價
- 關於node github 在 Node unblocker github - Apple Surgery 的評價
- 關於node github 在 Node js admin panel with mysql github 的評價
- 關於node github 在 Adyen Api Github - Johannes Schneidenbach 的評價
- 關於node github 在 Github Action Run Node Script - Hotguia.com 的評價
- 關於node github 在 Nccl Github - Die Sandra fotografiert 的評價
- 關於node github 在 Git與GitHub介紹,軟體版本控制基本教學 的評價
- 關於node github 在 Node js ecommerce github - bradbarnes.biz 的評價
- 關於node github 在 Github Node Sspi 的評價
- 關於node github 在 Document Ai Github 的評價
- 關於node github 在 Github Scraper 的評價
- 關於node github 在 Practical Node.js: Building Real-World Scalable Web Apps 的評價
- 關於node github 在 Azure functions github 的評價
- 關於node github 在 Smashing Node.js: JavaScript Everywhere - Google 圖書結果 的評價
- 關於node github 在 Node Js Project Example Github - Tierisch-Puzzeln 的評價
- 關於node github 在 Learning Node.js Development: Learn the fundamentals of ... 的評價
- 關於node github 在 Node .js - 第 99 頁 - Google 圖書結果 的評價
- 關於node github 在 RESTful Web API Design with Node.js - 第 22 頁 - Google 圖書結果 的評價
- 關於node github 在 Node Cookbook: Discover solutions, techniques, and best ... 的評價
- 關於node github 在 Mern Github 的評價
- 關於node github 在 Node.js for Embedded Systems: Using Web Technologies to ... 的評價
- 關於node github 在 Advanced Node.js Development: Master Node.js by building ... 的評價
- 關於node github 在 Aws Lambda Node Js Example Github - Webdesign WordPress 的評價
- 關於node github 在 Vlc Github 的評價
node github 在 BorntoDev Facebook 的精選貼文
รู้หรือไม่ !! มี Tools เจ๋ง ๆ ที่ช่วยให้เราทำแอปบนเดสก์ท็อปด้วยนะ นั่นคือ Electron.js นั่นเอง !!
.
และวันนี้แอดจะพาเพื่อน ๆ มาทำความรู้จักกับเจ้านี่กัน ว่ามันคืออะไร มีรายละเอียดยังไง หากพร้อมแล้วไปอ่านกันเลยจ้าาา ~~
.
⭐ Electron.js เป็น Framework แบบ Open-Source ซึ่งพัฒนาโดย GitHub ใช้สำหรับพัฒนาแอปพลิเคชันบนเดสก์ท็อปด้วยภาษา JavaScript, HTML, CSS และ Node JS เอาเป็นว่าใครที่เขียนเว็บมาบ้างแล้ว ก็สามารถใช้งานเจ้านี่ได้ง่าย ๆ เลย
.
✨ หลักการทำงานของ Electron.js
.
Electron.js จะใช้แนวคิดการทำงานของ Chromium ซึ่งจะแบ่งเป็น 2 ส่วนคือ Main Process และ Renderer Process
.
🔸 Main Process - เป็นส่วนที่ช่วยรับ-ส่ง Request ระหว่าง Browser Windows นั่นเอง โดยจะรองรับการทำงานของ GUI และช่วยจัดการในส่วนของ Memory ไม่ว่าจะเป็นการ Destruction และ Handle เพื่อป้องกันการ Memory Leak นั่นเอง
.
🔸 Renderer Process - เมื่อได้รับ Request จาก Main Process เจ้านี่ก็จะทำการแสดงผล UI แต่ละหน้า โดยการรันไฟล์ HTML, CSS และ JavaScript ของเรานั่นเอง
.
Electron.js ดียังไงนะ ?
.
🌟 1) พัฒนาได้ง่าย - เพียงแแค่ใช้ภาษาที่เราคุ้นเคยกันอยู่แล้ว ไม่ว่าจะเป็น HTML, CSS, หรือ JavaScript Dev แบบเรา ๆ ไม่ต้องเรียนรู้นานก็สามารถพัฒนาแอปพลิเคชันบนระบบปฏิบัติการต่าง ๆ ได้ง่ายเลย
.
🌟 2) มีประสิทธิภาพ - เนื่องจาก JavaScript เป็นภาษาที่มีประสิทธิภาพมาก ๆ มีการใช้กันอย่างกว้างขวาง ซึ่งมันสามารถแก้ไขข้อบกพร่อง และเพิ่มประสิทธิภาพของแอปพลิเคชันได้อย่างง่ายดาย
.
🌟 3) อัปเดตได้อย่างอัตโนมัติ - แอปพลิเคชันที่ถูกพัฒนาด้วย Electron.js มีการทำ autoUpdater สามารถอัปเดตได้ด้วยตัวเองอย่างอัตโนมัติทันทีเมื่อมีเวอร์ชันใหม่ ๆ ออกมานั่นเอง
.
🌟 4) รองรับ Closs-Platform - แอปพลิเคชันที่ถูกพัฒนาบน Electron.js สามารถรันบนระบบปฏิบัติการต่าง ๆ ได้เลย ไม่ว่าจะเป็น Windows, macOS และ Linux
.
🌟 5) มี Community สำหรับ Dev - Electron.js เป็น Open-Soure ที่มีผู้คนใช้กันเยอะมาก และมีแหล่งความรู้มากมายให้เหล่า Dev ได้ศึกษา แถมยังมีการพัฒนา Lib และ Tools ต่าง ๆ เพื่อช่วยเพิ่มประสิทธิภาพอีกด้วย
.
💥 ส่วนใครอยากลองใช้งานคลิกเลย >> https://www.electronjs.org/
.
borntoDev - 🦖 สร้างการเรียนรู้ที่ดีสำหรับสายไอทีในทุกวัน
node github 在 Taipei Ethereum Meetup Facebook 的最讚貼文
📜 [專欄新文章] Optimistic Rollup 就這樣用(2)
✍️ Juin Chiu
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
ERC721 的儲值、轉移與提領
TL;DR
本文會跳過 Optimistic Rollup 的介紹而直接實際演示,關於 Optimistic Rollup 的概念與設計原理筆者將在日後另撰文說明,有興趣的讀者可以先參考下列三篇文章(由淺入深):1. OVM Deep Dive 2. (Almost) Everything you need to know about Optimistic Rollup 3. How does Optimism’s Rollup really work?
本文將演示一個 Optimism Rollup 的 ERC721 範例,程式碼在這裡。
本演示大量參考了以下範例:Optimistic Rollup Example: ERC20。
本演示所使用的 ERC721 Gateway 合約來自這個提案,目前尚未成為官方標準。
環境設置
Git
Node.js
Yarn
Docker
Docker-compose
筆者沒有碰到環境相容問題,但是建議都升到最新版本, Node.js 使用 v16.1.0 或以上版本
Optimism 服務啟動
有關 Optimisim 的所有服務,都包裝在 Optimism 這個超大專案當中了,直接使用原始碼進行組建:
$ git clone git@github.com:ethereum-optimism/optimism.git$ cd optimism$ yarn$ yarn build
組建完成後,就可以在本機啟動服務了:
$ cd ops$ docker-compose build$ docker-compose up
這個指令會啟動數個服務,包括:
L1 Ethereum Node (EVM)
L2 Ethereum Node (OVM)
Batch Submitter
Data Transport Layer
Deployer
Relayer
Verifier
Deployer 服務中的一個參數要特別注意: FRAUD_PROOF_WINDOW_SECONDS,這個就是 OPtimistic Rollup 的挑戰期,代表使用者出金(Withdraw)需等候的時長。在本篇演示中預設為 0 秒。
如果有需要重啟,記得把整個 Docker Volume 也清乾淨,例如: docker-compose down -v
Optimism 整合測試
在繼續接下來的演示之前,我們需要先確認 Optimism 是否有順利啟動,特別是 Relayer 是否運作正常,因此我們需要先進行整合測試:
$ cd optimism/integration-tests$ yarn build:integration$ yarn test:integration
確保 L1 <--> L2 Communication 相關測試通過後再繼續執行接下來的演示內容。
啟動服務及部署合約需要花費一些時間,運行一段時間(約 120 秒)之後再執行測試,如果測試結果全部皆為 Fail,可能是 Optimism 尚未啟動完成,再等待一段時間即可。
ERC721 合約部署
Optimism 啟動成功並且完成整合測試後,接下來進行 ERC721 合約的部署。筆者已將合約及部署腳本放在 optimistic-rollup-example-erc721 這個專案中:
$ git clone git@github.com:ethereum-optimism/optimistic-rollup-example-erc721.git$ cd optimistic-rollup-example-erc721$ yarn install$ yarn compile
接下來我們需要部署以下合約:
ERC721,部署於 L1
L2DepositedEERC721,部署於 L2
OVM_L1ERC721Gateway,部署於 L1
OVM_L1ERC721Gateway 只部署在 L1 上,顧名思義它就是 L1 <=> L2 的「門戶」,提供 Deposit / Withdraw 兩個基本功能,使用者必須透過這個合約來進出 L2。
雖然 OVM_L1ERC20Gateway 是 Optimistic Rollup 官方提供的合約。但是開發者也可以依需求自行設計自己的「門戶」。
OVM_L1ERC20Gateway 目前沒有 Optimism 的官方實作,本演示所使用的 ERC721 Gateway 合約來自這個提案,目前尚未成為官方標準。
接下來,我們直接用腳本進行部署:
$ node ./deploy.jsDeploying L1 ERC721...L1 ERC2721 Contract Address: 0xFD471836031dc5108809D173A067e8486B9047A3Deploying L2 ERC721...L2 ERC721 Contract Address: 0x09635F643e140090A9A8Dcd712eD6285858ceBefDeploying L1 ERC721 Gateway...L1 ERC721 Gateway Contract Address: 0xcbEAF3BDe82155F56486Fb5a1072cb8baAf547ccInitializing L2 ERC721...
ERC721 鑄造、儲值、轉移與提領
鑄造(L1)
初始狀態如下,所有帳戶皆尚未持有任何代幣:
接下來,我們將鑄造 2 個代幣以進行接下來的演示。首先,進入 ETH(L1) 的 Console:
$ npx hardhat console --network ethWelcome to Node.js v16.1.0.Type ".help" for more information.>
取得 Deployer / User 帳戶:
// In Hardhat ETH Console
> let accounts = await ethers.getSigners()
> let deployer = accounts[0]
> let user = accounts[1]
取得 ERC721 及 OVM_L1ERC721Gateway 合約物件,合約地址可以從部署訊息中取得:
// In Hardhat ETH Console
> let ERC721_abi = await artifacts.readArtifact("ExampleToken").then(c => c.abi)
> let ERC721 = new ethers.Contract("0xFD471836031dc5108809D173A067e8486B9047A3", ERC721_abi)
> let Gateway_abi = await artifacts.readArtifact("OVM_L1ERC721Gateway").then(c => c.abi)
> let Gateway = new ethers.Contract("0xcbEAF3BDe82155F56486Fb5a1072cb8baAf547cc", Gateway_abi)
鑄造兩個 ERC721 代幣:
// In Hardhat ETH Console
> await ERC721.connect(deployer).mintToken(deployer.address, "foo")
{ hash: "...", ...}
> await ERC721.connect(deployer).mintToken(deployer.address, "bar")
{ hash: "...", ...}
只有合約的 Owner(deployer) 可以進行鑄造的操作。
確認 Deployer 餘額:
> await ERC721.connect(deployer).balanceOf(deployer.address)
BigNumber { _hex: '0x02', _isBigNumber: true } // 2
確認代幣的 TokenID 與 Owner:
> await ERC721.connect(deployer).ownerOf(1)
'0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266' // deployer
> await ERC721.connect(deployer).ownerOf(2)
'0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266' // deployer
儲值(L1 => L2)
完成以上步驟後,目前的狀態如下:
接下來,授權 OVM_L1ERC721Gateway使用 TokenID 為 2 的代幣:
// In Hardhat ETH Console
> await ERC721.connect(deployer).approve("0xcbEAF3BDe82155F56486Fb5a1072cb8baAf547cc", 2)
{ hash: "...", ...}
在 OVM_L1ERC721Gateway 合約呼叫 Deposit,儲值 TokenID 為 2 的代幣:
// In Hardhat ETH Console
> await Gateway.connect(deployer).deposit(2)
{ hash: "...", ...}
我們可以到 Optimism (L2) 的 Console 確認入金是否成功:
$ npx hardhat console --network optimismWelcome to Node.js v16.1.0.Type ".help" for more information.>
取得 Deployer / User 帳戶:
// In Hardhat Optimism Console
> let accounts = await ethers.getSigners()
> let deployer = accounts[0]
> let user = accounts[1]
取得 L2DepositedERC721 合約物件,合約地址可以從部署訊息中取得:
// In Hardhat Optimism Console
> let L2ERC721_abi = await artifacts.readArtifact("OVM_L2DepositedERC721").then(c => c.abi)
> let L2DepositedERC721 = new ethers.Contract("0x09635F643e140090A9A8Dcd712eD6285858ceBef", L2ERC721_abi)
確認入金是否成功:
// In Hardhat Optimism Console
> await L2DepositedERC721.connect(deployer).balanceOf(deployer.address)
BigNumber { _hex: '0x01', _isBigNumber: true } // 1
> await L2DepositedERC721.connect(deployer).ownerOf(2)
'0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266' // deployer
ERC721 轉移(L2 <=> L2)
完成以上步驟後,目前的狀態如下:
接下來,我們在 L2 從 Deployer 轉移代幣給 User:
// In Hardhat Optimism Console
> await L2DepositedERC721.connect(user).balanceOf(user.address)
BigNumber { _hex: '0x00', _isBigNumber: true } // 0
> await L2DepositedERC721.connect(deployer).transferFrom(depoyer.address, user.address, 2)
{ hash: "..." ...}
> await L2DepositedERC721.connect(user).balanceOf(user.address)
BigNumber { _hex: '0x01', _isBigNumber: true } // 1
> await L2DepositedERC721.connect(user).ownerOf(2)
'0x70997970C51812dc3A010C7d01b50e0d17dc79C8' // user
ERC721 提領(L2 => L1)
完成以上步驟後,目前的狀態如下:
接下來,我們用 User 帳戶提領資金,在 L2DepositedERC721 合約呼叫 Withdraw:
// In Hardhat Optimism Console
> await L2DepositedERC721.connect(user).withdraw(2)
{ hash: "..." ...}
> await L2DepositedERC721.connect(user).balanceOf(user.address)
BigNumber { _hex: '0x00', _isBigNumber: true }
最後,檢查在 L1 是否提領成功:
// In Hardhat ETH Console
> await ERC721.connect(user).balanceOf(user.address)
BigNumber { _hex: '0x01', _isBigNumber: true } // 1
> await ERC721.connect(deployer).balanceOf(deployer.address)
BigNumber { _hex: '0x01', _isBigNumber: true } // 1
> await ERC721.connect(user).ownerOf(2)
'0x70997970C51812dc3A010C7d01b50e0d17dc79C8' // user
由於挑戰期為 0 秒,因此提領幾乎無需等待時間,頂多只需數秒鐘
做完上述所有操作,最終狀態應該如下:
總結
本文演示了:
Optimistic Rollup 相關服務的本機部署
ERC721 L1 => L2 的儲值(Deposit)
ERC721 L2 帳戶之間轉移(Transfer)
ERC721 L2 => L1 的提領(Withdraw)
筆者未來將繼續擴充此系列的教學內容,例如支援其他標準的合約如 ERC1155,以及如何運行 Optimistic Rollup 生態系中最重要的驗證者(Verifier),敬請期待。
參考資料
OVM Deep Dive
(Almost) Everything you need to know about Optimistic Rollup
How does Optimism’s Rollup really work?
Optimistic Rollup Official Documentation
Ethers Documentation (v5)
Optimistic Rollup Example: ERC20(Github)
Optimism (Github)
optimism-tutorial (Github)
l1-l2-deposit-withdrawal (Github)
Proof-of-concept ERC721 Bridge Implementation (Github)
Optimistic Rollup 就這樣用(2) was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
node github 在 Node.js zh-TW - GitHub 的推薦與評價
Node.js zh-TW . Contribute to nodejs/nodejs-zh-TW development by creating an account on GitHub. ... <看更多>
node github 在 Node.JS DevOps: Simplify Your Life with GitHub Actions 的推薦與評價
How to configure GitHub Action for tagging nodejs source code and pushing your build artefacts on NPMjs (npm) and Docker hub. Works with any node app! ... <看更多>
node github 在 nodejs/node: Node.js JavaScript runtime - GitHub 的推薦與評價
Node.js is an open-source, cross-platform, JavaScript runtime environment. It executes JavaScript code outside of a browser. For more information on using ... ... <看更多>
相關內容