網路服務 SaaS、PaaS 和 IaaS 的差異

cover

一般來說,開發的應用程式可以部署在 SaaS、PaaS 或 IaaS 平台上。這些平台都是雲端運算的不同模式,可以根據自己的需求來選擇最適合自己的模式。本文將介紹 SaaS、PaaS 和 IaaS 的差異。根據團隊成員組成來決定要用什麼平台,這對於新創團隊來說是非常重要的議題。像是如果團隊有熟悉 Linux 維護的同仁,可以選擇像是 LinodeDigitalOcean 這類的 IaaS 服務,如果團隊有熟悉 Heroku、Google App Engine 這類的 PaaS Linode 是一個 IaaS (Infrastructure as a Service) 提供商,它提供了虛擬化的硬體環境,使用者可以在這個環境中建立虛擬機器和存儲裝置。使用者需要負責管理這些虛擬機器和存儲裝置,包括安裝和維護作業系統和應用程式。因此,Linode 可以歸類在 IaaS 的範疇。我個人就很常使用 Linode

[Read More]

Compiling multi-architecture images with Docker BuildKit using Drone CI/CD

cover

In 2020, Docker announced support for multi-architecture images, and later, Docker BuildKit officially supported multi-architecture images. This article introduces how to use Drone CI/CD with Docker BuildKit to compile multi-architecture images, and this feature is free and does not require a paid Docker Hub account. However, the Drone Docker Plugin provided by Drone CI/CD does not currently support multi-architecture images, so you need to write your own Drone Pipeline to achieve our goal. The official website has also proposed this proposal: ‘Support cross-arch Docker builds within Docker using QEMU’ to achieve this goal, using QEMU. The key point is to use Docker BuildKit to complete it under the environment where the Host supports Qemu.

[Read More]

用 Drone CI/CD 搭配 Docker BuildKit 編譯多架構映像檔

cover

在 2020 年就有 Docker 宣布支援多架構映像檔,後來才有正式的 Docker BuildKit 支援多架構映像檔,這篇文章來介紹如何使用 Drone CI/CD 搭配 Docker BuildKit 編譯多架構映像檔,而且這個功能是免費的,不需要付費的 Docker Hub 帳號。但是在 Drone CI/CD 官方提供的 Drone Docker Plugin 目前是不支援多架構映像檔,所以需要自己撰寫 Drone Pipeline,來達到我們的目的,官方也有人提出了這樣的 Proposal: 『Support cross-arch Docker builds within Docker using QEMU』,使用 QEMU 來達成目的,底下來介紹如何使用,關鍵點就是在 Host 支援 Qemu 的環境下,使用 Docker BuildKit 完成。

[Read More]

用 ChatGPT 幫忙進行 Code Review 給建議

Cover

上一篇文章我們介紹了如何使用 ChatGPT 來自動生成 Commit Message,這篇文章來介紹如何使用 ChatGPT 來進行 Code Review。在月初開發的 CodeGPT 已經讓開發者可以使用 GPT-3.5-Turbo 來進行生成 Commit 總結,這個功能省下開發者不少整理開發內容時間,但是我覺得還是不夠,大家除了開發外,還花了很多時間在進行 Code Review,所以如果有工具,可以讓開發者可以提前知道優化的項目,這可以省下不少 Review 的時間。

[Read More]

用 ChatGPT 自動幫開發者產生 Commit Message

Cover

相信大家對 ChatGPT 不會很陌生,這是目前在生成式人工智慧 (AIGC: AI Generated Content) 內的當紅炸子雞,然而 ChatGPT 對於軟體工程師有什麼影響呢?能否透過 ChatGPT 改善團隊流程或協助開發?而我現在想到最直接的就是用 ChatGTP 幫忙寫 Git Commit Message,然而怎麼把 Commit Message 寫好可以參考這篇文章,為了能達成這目的,我用 Go 語言寫了一個 CLI 工具 CodeGPT (請大家幫忙分享),來協助軟體工程師整理開發內容。底下先看看使用 CodeGPT 來產生 Commit Message 的成果:

[Read More]

Automated solution for updating running Docker containers - watchtower

CI

Nowadays, most of us have containerized our services, and effectively managing and upgrading containers without affecting existing services is a critical issue. Two steps are required in the CI/CD process: first, packaging the environment as a Docker image and uploading it to the company’s private Docker registry; and second, after the upload is complete, possibly connecting to the machine via SSH, pulling the new image, and restarting the running service via the Graceful Shutdown mechanism. You can learn more about Graceful Shutdown in this article. I am going to introduces Watchtower, a brand new tool that automatically upgrades and updates running containers, allowing for further CD process streamlining. Developers only need to upload the Docker image, and the remote servers can update the running container automatically.

[Read More]

自動升級更新執行中的 Docker 容器解決方案 - watchtower

CI

現在大家在部署服務肯定都已經容器化,而如何有效管理及升級容器不影響現有的服務,這就是一個重要的議題,然而在 CI/CD 的流程內,肯定有兩個步驟是必須的,第一就是將環境打包成 Docker Image 並上傳到公司內私有的 Docker Registry,以及上傳完畢後,也許透過 SSH 方式連上機器,並且拉取新的映像檔,再透過 Graceful Shutdown 機制重新啟動正在執行的服務。可以參考這篇了解什麼是 Graceful Shutdown。本篇就是要帶給大家一個全新的工具 Watchtower 用來自動升級更新執行中的容器,讓 CD 流程可以再簡化一步,開發者只要上傳完 Docker Image,遠方的伺服器就可以自動更新。

[Read More]

用 Go 語言實現固定大小的 Ring Buffer 資料結構

logo

Ring Buffer Queue 是固定大小記憶體的 FIFO (first in, first out) 資料結構,用來處理不同 Process 之前的資料交換。工作原理就是在一段連續固定大小區間的記憶體用 (head/tail) 兩個指針來決定現在要將資料放在哪個位置。本篇將帶大家用 Go 語言快速實現 Ring Buffer 資料結構。

[Read More]

用 Go 語言建立 Web 及 Worker 服務實現取消任務 (二)

cancel a task

上一篇『系統設計: 如何取消正在執行的工作任務 (一)』教大家如何用 Go 語言實現 canceler package 來紀錄及取消正在執行的任務。而本篇來實現上圖的 HTTP ServerWorker 程式碼,底下直接用 Gin 框架來快速實現 HTTP 兩個 Handle,分別是 Cancel TaskWatch Task (如下圖標示的 1 跟 2)。

cancel a task

其中上圖綠色框框 1 是用來接收使用者想要取消的任務,而 2 是用來讓 worker 進行長連接,根據不同的情境可以設定不同的等待時間。大家可能會問,為什麼不讓 Server 主動通知 Worker 就可以了,先解釋這點,這邊我們可能要先假設 Worker 存在的環境是封閉的,不能任意架設服務,故需要主動向 HTTP Server 進行詢問。其中 HTTP Server 跟 Worker 中間可以透過 gRPC 或 RESTful 進行資料交換,本篇先以 RESTful 進行說明。

[Read More]

用 Go 語言實作如何取消正在執行的工作任務 (一)

cancel a task

本篇來聊聊『如何取消正在執行的工作任務』,當系統內有需要處理比較久或較多資源的任務,肯定會將這些任務丟到其他機器再執行,執行過程如果需要取消,會經過如上圖幾個步驟。先假設中間的過程不透過 Message Queue 機制,而是兩個服務進行溝通透過 RESTfulgRPC 方式。

[Read More]