現在越來越多的服務應用使用 Protobuf 來作為資料交換的格式,它被廣泛應用於 RPC 調用和資料存儲。 Protobuf 語言中立、平臺中立,只要定義好一份 .proto 檔案,就可以生成不同的程式語言來處理資料的序列化或反序列化。要了解 Protobuf 序列化/反序列化,首先需要了解一些知識點 :

  • Varint Encoding
  • Zigzag Encoding
  • Wire Type 類型
  • T-L-V 儲存方式

熟悉這些可以更加理解 protobuf,也能避免錯誤使用,以及更好的優化性能。本章節會實際把前面學到的知識點一次用上,用實際案例來了解 Protobuf - Serialization。

Continue reading

隨者網路傳輸、頻寬與硬體的設備的改善和增強,能傳遞資料量也越來越大、越來越複雜,這時我們也不再只是追求能夠將資料傳遞完成,而是更加要求短時內傳遞大量的資料,故勢必會需要強化序列化壓縮的技術。這篇會介紹 Protobuf 編碼後的 byte array 結構,以及會這樣設計的思路,當有了基本的認識後,就會明白 Protobuf 為何它可以比 JSON、XML 傳輸效率更高,更能壓縮資料,實現高效率。

Continue reading

蠻多 coding 語言在一般情況下是使用 32 bits 的空間來儲存整數的,例如 Java 的 int,範圍是 -2147483648 ~ 2147483647,大約正負21億。但是現實世界中,較小的數字往往比較常出現,大約幾十到幾十萬是最多最常出現的,如果只是要儲存或傳輸這樣的一個小數字,卻每次都需要用到 32 bits 的空間,其實有點浪費,這是有機會優化的 !

Varint 和 Zigzag 演算法就是要處理這種問題,讓值小的數字,可以用較少的 byte 數量表示,而達到資料壓縮目的,著名的資料傳輸格式 Protobuf 也是通過 Varint 和 Zigzag ,來大幅減少了資料佔用的空間。

Continue reading

Protobuf 全稱 Protocol Buffers ,是一種輕量級的資料交換格式,最初是由 Google 開發的「可擴展的序列化資料結構」,現已成為一個開源項目,其語⾔中⽴且平台無關,適合高性能且對響應速度有高要求的資料傳輸場景;也因為有資料壓縮的能力,故也可用於資料儲存。Protobuf 的核心思想是先定義好 data schema ,然後可根據所需的語言生成對應的 code base,方便使用者操作 :「序列化寫入、反序列化讀取」。

Profobuf 需要注意的缺點是為二進制格式,故編碼之後不具有可讀性,需要反序列化後才能看得懂資料內容 ; 雖然是個好東西,但並非是個用來完全取代 JSON 的解決方案,JSON 仍有其可讀性高、易操作及通用性高等優點,在多數 API 設計的場景之下,JSON 仍然是最好的選擇。

Continue reading

OpenTelemetry ,也稱為 OTel,是 Cloud Native Computing Foundation(CNCF) 下的一個開源專案,為一供應商中立(vendor-neutral)的可觀測性框架,目的是提供一個標準化Observability 的 pluggable 框架,解決 telemetry data 的模型定義、檢測、採集、處理、輸出等一致性問題。

借助 OpenTelemetry ,可以從各種來源收集 telemetry data ,但對於資料的存儲和可視化是留給其他工具的,本身並不提供儲存,只能將其發送到其他的服務來存儲,如 Prometheus、或其他雲端廠商服務。

Continue reading

Regular Expression 是一種強大的字串匹配字串查找等操作工具,常簡寫爲 regex 、regexp 或 RE。這概念最初由 Unix 的 sed、grep 操作而普及開,它定義一系列符號來描述搜索的規則。 但在不同的 coding language 或者是不同 OS 中, 常發現 regex 都會有些差異,主要原因是演進過程中,出現 POSIXPCRE 兩種 :

  • POSIX : 可以說是原初版本,主要用於 UNIX 系統的文本處理,grep 、sed 、awk 等都屬之

  • PCRE : 現代 coding language如 Python、Ruby、 C、C++、Java 都屬於 PCRE 派系。

Continue reading

Fluent Bit 基礎介紹

Fluent Bit 是一款使用 C 語言編寫的開源的資料收集器,為 Fluentd 的輕量化版本,也是 Cloud Native Computing Foundation(雲原生運算基金會) 下的一個子項目。可以從多種不同來源【如 Log file、kafka 等等】,收集 Logs、Metrics、 Traces 資料,然後輸出至多種不同的服務 【如 Loki、Fluentd、Elasticsearch、DataDog、Kafka 以及各式雲端服務】。

Continue reading

57. Insert Interval

此題給定一個沒有 overlapping 且按照起始座標排序的 interval 集合,然後再給一個 newInterval 放到該集合內,要合併 interval 使它們都不會重疊,最後返回新的 non-overlapping intervals。 本題的生活化的模擬,可以把題目想成自修室租借,然後插入自己的使用時段(亂入別人的使用時間…),最後返回整個自修室被租借的時段。

Continue reading

Pod 是 Kubernetes 中最小的運行單位,它可以包含一個或多個 container。Pod 的實現原理主要涉及以下幾個方面:

  • 容器技術 : 實現隔離和獨立運行
  • 共享網絡和存儲 : Pod 中的所有容器共享相同的網絡和存儲空間
  • Pod 調度 : 調度器會監測節點的資源利用率,將 Pod 調度到適合的節點上運行。
  • 生命週期管理 : 當 Pod 發生故障或需要擴展時,控制器會自動創建、刪除或調整 Pod 的數量。

在 Kubernetes 中,Pod 是容器組的概念,爲應用程序提供了一個更加靈活的運行環境,負責管理容器的生命周期和資源。

Continue reading

Kubernetes Secret 是一種將配置設置與應用分離的抽象,解決服務間配置的冗余與維護問題。主要可以用來保存敏感訊息,將這些 data 放在 Secret 中,比放在 Pod 的定義中或者 Docker Image中,來說更加安全和靈活。

Continue reading

Author's picture

李昀陽 YunYang Lee

Welcome to my Tech Note. You can read some of the chapters below.

Software Engineer

Taiwan