原创 Python 藉助 asyncio 實現併發編程

asyncio 基礎 創建協程 使用 async 關鍵字創建 coroutine async def coroutine_add_one(number: int) -> int: return number + 1 def ad

原创 Node.js 設計模式筆記 —— 消息中間件及其應用模式(任務分發)

將高成本的任務委派給多個工作節點,這種類型的應用並不適合由 Pub/Sub 模式實現。因爲我們並不想同一個任務被多個消費者收到,相反我們更需要一種類似負載均衡的消息分發模式。在消息系統術語中,也被稱爲 competing consumer

原创 Node.js 設計模式筆記 —— 消息中間件及其應用模式(發佈訂閱)

主要有兩類技術可以用來整合分佈式應用:一類是通過共享存儲作爲一箇中心化的協調者,跟蹤和保存所有需要共享的信息;另一類則是通過消息中間件,向系統中的所有節點散佈數據、事件和命令等。 消息存在於軟件系統的各個層級。我們通過互聯網交換消息完成通信

原创 Programming with Types —— 組合類型

複合類型 最直觀的創造新的複合類型的方式,就是直接將多個類型組合在一起。比如平面上的點都有 X 和 Y 兩個座標,各自都屬於 number 類型。因此可以說,平面上的點是由兩個 number 類型組合成的新類型。 通常來說,將多個類型直接組

原创 Kubernetes 設計模式筆記 —— 生命週期管理

由雲原生平臺管理的容器化應用,並不能控制其自身的生命週期。它們必須監聽由管理平臺發出的事件,再對生命週期做出相對應的變更。所謂的生命週期管理,即代表應用該如何讀取和響應這些由管理平臺發出的生命週期事件。 鑑於某些管理策略或者外部環境因素,在

原创 Programming with Types —— 類型及類型系統

爲什麼要有類型 從硬件和機器碼這類底層視角來看,程序邏輯(代碼)和代碼操作的數據都是通過比特(bits)來表示,沒有任何區別。 當系統沒辦法正確地將這兩者區分開來,錯誤就很容易發生。這類鬆散解析的一個例子就是 JavaScript 中的 e

原创 Programming with Types —— 高階類型(Functor、Monad)

通用的 map 實現 map 是函數式編程中非常常見的一類接口,可以將某個函數操作應用到一系列元素上。一個通用的 map() 實現如下: function* map<T, U>(iter: Iterable<T>, func: (item:

原创 Node.js 設計模式筆記 —— Streams 流編程

Streams 是 Node.js 的組件和模式中最重要的幾個之一。在 Node.js 這類基於 event 的平臺上,最高效的實時地處理 I/O 的方式,就是當有輸入時就立即接收數據,應用產生輸出時就立即發送數據。 Buffering v

原创 Node.js 設計模式筆記 —— 由 Promises 和 Async、Await 實現的異步模式

回調函數(Callbacks)是 Node.js 中異步編程的底層構件,但它們遠遠達不到對用戶友好的程度。對於實現代碼中最常見的串行控制流,一個未經訓練的開發者很容易陷入到 callback hell 問題中。即便實現是正確的,該串行控制流

原创 Kubernetes 設計模式筆記 —— Health Probe

Health Probe 模式主要關注 Kubernetes 如何獲取某個應用的健康狀態。爲了實現完全自動化,一個雲原生應用必須是高度可觀測的,從而 Kubernetes 能夠推斷應用的狀態,檢測應用是否已經啓動,是否已經準備好接收請求。

原创 Kubernetes 設計模式筆記 —— 聲明式部署

聲明式部署(Declarative Deployment)模式主要體現在 Kubernetes 對其 Deployment 對象的應用上。 升級某個服務意味着,需要平滑地關閉舊版本的 Pod,啓動新版本的 Pod,然後等待和確認其部署成功,

原创 Node.js 設計模式筆記 —— 單例模式

Singleton 單例(Singleton)模式是面向對象編程中最常見的設計模式之一,Node.js 已經有了很簡單的實現。 使用單例模式的目的在於確保某個類只有一個實例存在,並對該實例的訪問進行統一的控制。其主要運用場景如下: 共享有

原创 Node.js 設計模式筆記 —— Template 模式

Template 模式與 Strategy 模式有很多相似之處。Template 模式首先會定義一個虛擬基類,描述某個組件的骨架(即通用的部分),同時令骨架中存在的某些步驟處於未定義狀態。 之後由虛擬基類的子類來實現上述組件中缺失的未定義部

原创 Node.js 設計模式筆記 —— Proxy 模式

代理(proxy) 可以理解爲一種對象,其能夠控制客戶端對另一個對象(subject)的訪問。代理(proxy)和目標對象(subject)擁有完全相同的接口,可以自由地進行替換。 proxy 會攔截所有或者部分本應該直接交給 subjec

原创 Node.js 設計模式筆記 —— Node.js 的設計哲學和原理

一、Node.js 哲學 每種編程語言平臺都有其特定的“哲學”,即一系列被社區普遍接受的指導原則和規範。這些規範對語言平臺本身的演進以及如何設計和開發應用都有着深刻的影響。 小的核心 Node.js 核心,包含 Node.js 運行時以及所