在 Rust 中使用 SQLX 集成 SQLite 數據庫
SQLite 是一個 c 語言庫,它實現了一個小型、快速、自包含、高可靠性、全功能的 SQL 數據庫引擎,與 Rust 的安全性和性能非常匹配。sqlx crate 是一個很棒的工具,可以提供到各種數據庫 (包括 SQLite) 的異步連接。sqlx 的美妙之處在於它可以在編譯時檢查 SQL 查詢語句以及它與 Rust 異步特性的兼容。在這篇文章中,我們將探索如何使用 sqlx 將 Rust 與 ⌘ Read more
PocketBase:一體化的開源 Go 語言實時後端
PocketBase 是一個開源的實時後端解決方案,採用單一文件的形式進行分發。它由嵌入式數據庫 (SQLite) 和實時訂閱功能組成,提供了開箱即用的文件和用戶管理功能、方便的管理儀表板 UI 以及簡單的 REST 風格 API。本文將深入探討 PocketBase 的功能、安裝、示例代碼和一些高級的應用技巧。主要特性—-嵌入式數據庫PocketBase 內嵌 SQLite 數據庫,這意味着 ⌘ Read more
提高系統的併發能力方案
面試中經常會被問到如何提高系統的併發能力,針對此問題我整理如下的提高系統併發能力的方案: (1)分流方案:常見的的方案有負載均衡、數據庫拆分 / 集羣、消息隊列(2)導流方案:緩存、CDN(3)系統自身優化:數據庫優化、代碼優化(4)增加資源:增加服務器、CPU、內存等硬件資源1、分流方案——負載均衡 使用負載均衡技術可以將請求分發到多個服務器上進行處理,從而提高系統的併發處理能力 ⌘ Read more
Go: 使用依賴注入實現 Gin 框架路由處理函數的解耦
在 Go 語言開發中,Gin 是一個非常流行的 Web 框架。其輕量級、高性能的特點,使其成爲許多開發者的首選。然而,在實際項目中,隨着業務邏輯的複雜化,我們往往會遇到代碼耦合嚴重、測試困難等問題。依賴注入(Dependency Injection, DI)是一種有效的解耦手段,能夠幫助我們實現代碼的高內聚、低耦合,從而提升代碼的可維護性和可測試性。本文將探討如何在 Gin 框架中使用依賴注入來解 ⌘ Read more
長文梳理!近年來 GPT 系列模型的發展歷史:從 GPT-1 到 GPT-4o(前世、今生)
引言–隨着 ChatGPT 的發佈,大語言模型的關注度和數量都在不斷上升, 它引領了人類進入了大模型時代,並且隨着一輪一輪的迭代,最新模型已經進化到了 GPT-4o。在衆多大語言模型中,GPT 系列因其代表性而備受關注,其發展歷程和技術革新值得深入探討。那麼今天帶大家回顧一下近年來 GPT 系列模型的發展。【參考中國人民大學《大語言模型》】GPT 系列模型的基本原理是訓練模型學習恢復預訓練文本數 ⌘ Read more
Go:執行跟蹤變得更加強大
簡介Go 語言的 runtime/trace 包含一個強大的工具,用於理解和排查 Go 程序。其中的功能允許跟蹤每個 goroutine 在一段時間內的執行情況。然後,使用 go tool trace 命令(或優秀的開源工具 gotraceui)可以可視化和探索這些跟蹤中的數據。跟蹤的魔力在於,它可以輕鬆地揭示程序中其他方式難以看到的東西。例如,在 CPU 概要文件中很難看到併發瓶頸,因爲沒有要採 ⌘ Read more
分庫分表最全詳解 -圖文全面總結-
大家好,我是 mikechen。分庫分表是大型架構的必備技能,也是大廠重點考察的對象,下面我就全面來詳解分庫分表 @mikechen分庫分表分庫分表是數據庫設計、和管理中的一種策略,主要解決隨着數據量、和併發訪問量的增加而帶來的性能、和擴展性問題。分庫分表,主要就是兩種常用手段:“分庫”、和 “分表”。如下圖所示:分庫(Database Sharding): 將數據按照某種規則,分散到多個獨立的數 ⌘ Read more
Go singlefight 源碼詳解
寫在前面 通俗的來說就是 singleflight 將相同的併發請求合併成一個請求,進而減少對下層服務的壓力,通常用於解決緩存擊穿的問題。詳解基礎結構—-golang.org/x/sync/singleflight singleflight 結構體:type call struct { wg sync.WaitGroup // 這些字段在 WaitGroup 結束前寫入一次 // 只有在 W ⌘ Read more
OpenResty-Lua-Redis-MQ 實現高 QPS 下熱點數據的存取方案
京東、淘寶首頁每天的訪問量是非常的大,如果不對首頁上的一些熱點數據做技術上的處理就會出現首頁的訪問速度慢,甚至在高併發下無法打開首頁,這些都會嚴重的影響用戶的體驗。首頁常見的熱點數據是輪播圖,下圖是京東和淘寶首頁的輪播圖: 每個用戶打開京東、淘寶網站的首頁都會出現這個輪播圖,由於平臺是國內知名的購物平臺,所以其 QPS 是非常高的;另外這個輪播圖也是可以做更改和替換來達到展示不同的圖 ⌘ Read more
高性能架構設計之緩存策略
在構建高性能的系統架構時,緩存策略是至關重要的一環。通過合理使用緩存,我們可以顯著減少數據庫的訪問次數,降低網絡延遲,從而提高系統的響應速度和吞吐量。本文將深入探討緩存的類型、使用場景、緩存一致性以及數據同步等關鍵內容。一、緩存類型緩存按照其存儲位置和用途,可以分爲多種類型。以下是幾種常見的緩存類型:本地緩存本地緩存通常指的是進程內的緩存,如 Java 中的 HashMap、ConcurrentH ⌘ Read more
Go:標準庫 bufio 包詳解
引言在日常開發中,對文件或輸入輸出流進行讀寫操作是非常常見的任務。Go 語言標準庫中的bufio包提供了數據的緩衝讀寫功能,使得讀寫操作更加高效。本文將詳細介紹bufio包的主要功能及其在實際編程中的應用場景。bufio 包概述bufio包主要提供了緩衝讀寫的能力,通過包裝一個io.Reader或io.Writer對象,創建一個帶緩衝的(buffered)讀寫器。使用緩衝可以減少對底層 IO 資源 ⌘ Read more
如何實現 Redis 和 Mysql 中數據雙寫一致性
在我們的實際開發中,我們用到了 redis 緩存一些常用的數據(如熱點數據)用來提高系統的吞吐量。 但是不可以避免的出現了數據的修改場景,這就導致了數據庫中的數據和 Redis 中出現不一致性的情況。如何保證數據一致性就顯得非常重要了,下面介紹一下保證數據的雙寫一致性的方案。1、先刪緩存再操作數據庫方案 在 redis 一般寫的場景下對數據的更新操作是不推薦使用的,推薦使用刪除 ⌘ Read more
使用 Golang 開發 eBPF 的應用
大多數時候, 我們在開發軟件或使用軟件時, 都在操作系統的安全邊界內運行。我們甚至不知道 IP 數據包是如何從網絡接口被接收的, 或者當我們保存文件時, inode 是如何被文件系統處理的。這個邊界被稱爲用戶空間, 我們在這裏編寫應用程序、庫和工具。但還有另一個世界, 即內核空間。操作系統內核就駐留在這裏, 負責管理系統資源, 如內存、CPU 和 I/O 設備。通常我們不需要深入到 socket ⌘ Read more
在 Go 中如何讓結構體不可比較?
最近我在使用 Go 官方出品的結構化日誌包 slog 時,看到 slog.Value 源碼中有一個比較好玩的小 Tips,可以限制兩個結構體之間的相等性比較,本文就來跟大家分享下。在 Go 中結構體可以比較嗎?在 Go 中結構體可以比較嗎?這其實是我曾經面試過的一個問題,我們來做一個實驗:定義如下結構體:type Normal struct { a string B int}使用這個結構體分別聲明 ⌘ Read more
滴滴打車如何找出方圓一千米內的乘客?揭開 GeoHash 的神祕面紗
背景–不知道大家是否思考過一個問題,在一些場景下(如大家在使用高德地圖打車的時候,鄰近的司機是如何知道你在他的附近並將你的打車通知推送給他去接單的?)是如何實現的?一般來講,大家也許會想到,首先肯定需要知道每位乘客的經緯度 (lng,lat),也即是二維座標(當然這是在絕對理想的情況,不考慮上下坡度)。而在知道了經緯度之後,一個暴力簡單且容易想到的思路就是將經緯度這個「二元組」 都存放在一個「 ⌘ Read more
負載均衡器有什麼用?
負載均衡器是一種在多個服務器之間分配網絡或應用程序流量的設備或軟件應用程序。其主要目的是確保沒有一臺服務器承擔過多的需求,從而提高應用程序的響應速度和可用性。在計算機發展的早期,負載均衡是一個手動過程。管理員手動配置 DNS 設置,在服務器之間分配流量。專用負載均衡設備的概念出現於 20 世紀 90 年代。思科和 F5 Networks 等公司開始開發硬件負載均衡器,提供更復雜、更自動化的流量分配 ⌘ Read more
Rust 編程範式最佳實踐
面向對象的 Rust與前面討論的函數式和命令式示例相反,讓我們引入一個新的結構體 FileFilter,它封裝了過濾文件和文件迭代的邏輯。pub struct FileFilter { predicates: VecBox ⌘ Read more
Go 實現可複用的通用內存緩存
本文介紹瞭如何在 Go 語言中創建一個可重用的內存通用緩存,並提供了具體的實現代碼和使用示例。Prerequisites安裝 Go go-cache package
Go:log 庫的全面指南與使用技巧
引言–在 Go 語言的標準庫中,log包提供了簡單而強大的日誌功能。日誌記錄是軟件開發中不可或缺的一部分,它不僅幫助開發人員調試和排查問題,還在系統運行中提供了寶貴的運行時信息。本文將詳細講解 Go 語言log庫的各種功能及其使用技巧,幫助開發者更好地掌握和應用這一重要工具。log 包簡介——-log包是 Go 語言標準庫的一部分,提供了基本的日誌記錄功能。它支持日誌消息的格式化、日誌輸 ⌘ Read more
深入理解 AI 大模型:參數、Token、上下文窗口、上下文長度和溫度
隨着人工智能技術的不斷髮展,AI 大模型在各個領域展現出強大的能力,也引起了廣泛關注。在瞭解這些模型時,我們經常會看到諸如「參數」、「Token」、「上下文窗口」、「上下文長度」 和「溫度」等術語。這些術語代表着什麼意思?它們對 AI 大模型有何影響?本文將深入淺出地爲你解析這些概念,並結合實際案例和數據,幫助你理解 AI 大模型的運作機制。Parameter 參數:模型的複雜度和性能指標—- ⌘ Read more
Go 實現雙 buffer id 生成器
本文通過 Go 實現一個 Leaf——美團點評分佈式 ID 生成系統 雙 buffer 的 id 獲取器。一. 主流程———-主流程看圖似乎步驟非常多,但實際上總結起來就以下三個步驟:客戶端發起請求 id 獲取器從緩存中獲取 如果 id 已經被消耗超過閾值,則重新加載新的號段到內存中 接下來我們來具體看一下 Go 代碼是如何實現的二. 代碼實現——-2.1 S ⌘ Read more
說一說 linux 虛擬機的 ringbuffer 大小由來
linux 下的網卡 ringbuffer 大小可以通過 ethtool -g eth0 獲取,eth0 是網卡設備名,如果是其他網卡則更換爲對應網卡名即可。
超級底層:10WQPS-PB 級海量存儲 HBase-RocksDB,底層 LSM 結構是什麼?
一次穿透:10WQPS/PB 級海量存儲 HBase/RocksDB 的底層 LSM 結構———————————————LSM tree 是很多數據庫內部的核心數據結構,包括 BigTable,ClickHouse、Cassandra, Scylla, RocksDB,HBase。ClickHouse、Cassandra, Scylla, ⌘ Read more
Go:For-Select-Done 併發設計模式應用
引言Go 語言支持的併發模型是其一大亮點,它內建的 Goroutine 機制爲構建高性能併發應用提供了基礎。在這種環境下,使用 For-Select-Done 設計模式可以優雅地處理併發任務和通道(Channel)的交互,從而實現高效的數據處理和狀態管理。For-Select-Done 設計模式概述For-Select-Done 模式是一種結構化的方式來處理 Go 中的多個通道讀寫操作,使代碼更加 ⌘ Read more
Netflix 如何打造高可靠在線有狀態系統
作者 | Joseph Lynch譯者 | 王強策劃 | Tina要點可靠性意味着花錢將故障概率、爆炸半徑和恢復時間都降至零。 大規模可靠服務的構建工作必須在客戶端、服務器和 API 上三管齊下。 可靠的服務器是冗餘的、對負載優化的和被大量緩存的。它們提供快速數據恢復和跨多個雲可用區利用多個複製副本的能力。 可靠的客戶端會持續迭代前進,並使用來自服務器的信號來學習如何重試或對沖請 ⌘ Read more
多模態大模型:基礎架構
文|龐德公編輯|郭嘉大模型技術論文不斷,每個月總會新增上千篇。本專欄精選論文重點解讀,主題還是圍繞着行業實踐和工程量產。若在某個環節出現卡點,可以回到大模型必備腔調或者 LLM 背後的基礎模型重新閱讀。而最新科技(Mamba,xLSTM,KAN)則提供了大模型領域最新技術跟蹤。若對於具身智能感興趣的請移步具身智能專欄。技術宅麻煩死磕 AI 架構設計。當然最重要的是訂閱 “魯班模錘”。 多模態大型 ⌘ Read more
10 分鐘瞭解 Golang 泛型
泛型是 Golang 在 1.18 版本引入的強大工具,能夠幫助我們在合適的場合實現簡潔、可讀、可維護的代碼。原文: Go Generics: Everything You Need To Know
如何優雅關閉過期訂單?
如何關閉過期訂單?設計一個關閉過期訂單的系統至關重要:資源管理 通過關閉過期訂單,系統可確保資源(如庫存、資金和人員)得到有效分配,不會被未完成或過期訂單佔用。用戶體驗 該系統允許與客戶就其訂單狀態進行清晰及時的溝通,防止出現混亂和潛在的不滿情緒。通過關閉過期訂單,系統可以集中精力處理有效訂單,提高整體服務效率和速度。運行效率 從活動隊列中刪除過期訂單可減少雜亂和簡化數據處理,從 ⌘ Read more
Rust 中的編程範式:命令式和函數式編程範式
Rust 是一種多範式編程語言,支持命令式、面向對象和函數式編程風格。風格的選擇通常取決於開發人員的背景和他們要解決的具體問題。隨着 Rust 吸引了來自 C++、Java、Python 和 Haskell 等不同背景的開發人員,它已經形成了自己獨特的風格和習慣用法。這種多樣性是一種優勢,但它也會導致在不同場景中使用哪種風格的不確定性。Rust 當然受到面向對象編程概念的影響,將它與其他面嚮對象語 ⌘ Read more
duckdb: 一個超火的數據庫,背後公司只有 18 人?
簡介–DuckDB 是一個嵌入式、內存中、SQL OLAP 數據庫管理系統。它提供了一種高效的方式來查詢和分析數據, 可以被集成到各種應用程序或編程語言中。最近非常的 🔥,一個月下載超過 200 萬次。實際上,這家位於荷蘭阿姆斯特丹的小型公司只有 18 人,下面這篇公衆號介紹了它的背景:震驚:開發一款世界矚目的數據庫僅需 18 人。這讓我想起了 clickhous。duckdb 的簡單易用、提供 ⌘ Read more
Zig 分配器的應用
假設我們想爲 Zig 編寫一個 HTTP 服務器庫
AI 大模型技術的四大核心架構演進之路
隨着人工智能技術的飛速發展,大模型技術已經成爲 AI 領域的重要分支。本文將深入探討四種關鍵的大模型技術架構:純粹 Prompt 提示詞法、Agent + Function Calling 機制、RAG(檢索增強生成)以及 Fine-tuning 微調技術,揭示它們的特性和應用場景。一、純粹 Prompt 提示詞法:構建直觀交互模式純粹 Prompt 提示詞法是 AI 大模型交互的直接形式,它通過 ⌘ Read more
cassowary: 現代跨平臺的 Go 語言 HTTP 負載測試工具
在現代互聯網應用程序中,性能和響應速度是決定用戶體驗的關鍵因素。負載測試是確保我們的應用程序在高併發下仍能穩定運行的一種重要手段。本文將帶你瞭解一個現代的跨平臺 HTTP 負載測試工具——cassowary,並展示其安裝和使用方法。什麼是 cassowary?————–cassowary 是一個用 Go 語言編寫的現代跨平臺 HTTP 負載測試工具。它設計簡潔、易於使用,支持高併 ⌘ Read more
在 Go 中如何優雅的使用 wire 依賴注入工具提高開發效率?上篇
如果你做過 Java 開發,那麼想必一定聽說或使用過依賴注入。依賴注入是一種軟件設計模式,它允許將組件的依賴項外部化,從而使組件本身更加模塊化和可測試。在 Java 中,依賴注入廣泛應用於各種框架中,幫助開發者解耦代碼和提高應用的靈活性。本文就來介紹下什麼是依賴注入,以及在 Go 語言中如何實踐依賴注入,提高 Go 項目的開發效率和可維護性。什麼是依賴注入?正如前文所述,依賴注入(dependen ⌘ Read more
如何在 Rust 中實現事件循環模式?
事件循環是編程中的一個基本概念,用作管理異步操作和確保系統響應的機制。它的功能是不斷檢查程序中的新事件或消息,根據需要處理它們,然後繼續檢查更多事件或消息。這種模式對於處理輸入 / 輸出操作、網絡通信和用戶交互等任務至關重要,從而不會阻塞其他代碼的執行。事件循環的重要意義在於它能夠有效地併發處理多個任務,而不依賴於傳統的同步方法,後者可能導致性能瓶頸和應用程序無響應。事件循環使程序在事件發生時異步 ⌘ Read more
基於 Rust 語言實現的去中心化 AI 網絡節點
在當今的技術世界中,去中心化和人工智能(AI)是兩個極具潛力的發展方向。Gaia 項目正是將這兩者結合起來,創造了一個去中心化的 AI 網絡節點。本文將深入探討 Gaia 項目的技術細節,通過豐富的示例和詳細描述,幫助讀者全面理解並掌握該技術。什麼是 Gaia?———Gaia 是一個去中心化的人工智能網絡,它旨在通過區塊鏈技術和去中心化網絡架構,提供安全、可靠且高效的 AI 服務。Ga ⌘ Read more
Go: 深入探究 uintptr 類型
Go 語言作爲一種靜態類型、編譯型語言,其獨特的類型系統爲編程提供了強大的支持。在衆多類型中,uintptr 是一個較爲特殊的類型,它用於存儲指針值的整數表示。本文將詳細介紹 uintptr 的概念、使用場景及其與普通指針類型的區別。uintptr 的定義與特性在 Go 語言中,uintptr 是一個無符號整數類型,其大小足以存儲任意指針的位模式。具體來說,uintptr 的定義如下:type u ⌘ Read more
conmon-rs 服務啓動流程源碼分析
conmon-rs 是一個用 Rust 編寫的 pod 級別的 OCI 容器運行時監視器,旨在擴展並取代現有的 conmon 功能,不僅監視單個容器,還監視整個 pod。通過 UNIX 域套接字處理新容器和執行進程的請求,提升了管理效率。本文主要分析 conmon-rs 服務的啓動流程。 涉及源碼版本:v0.6.31. 函數入口// conmon-rs/server/src/main.rs:4f ⌘ Read more
如何在 API 設計中執行分頁
在 API 設計中,分頁對於高效處理大型數據集和提高性能至關重要。以下是六種常用的分頁技術:01 基於偏移的分頁———-這種技術使用 offset 和 limit 參數來定義起點和要返回的記錄數。例如:GET /orders?offset=0&limit=3優點:易於實現和理解。 缺點:由於需要掃描和跳過記錄,因此偏移量較大時效率可能會降低。 02 基於遊標的分頁—– ⌘ Read more
Kafka 如何實現每秒百萬級高併發寫入?
大家好,我是 mikechen。磁盤順序寫Kafka 採用順序寫入日誌文件的方式,這種方式比隨機寫入快得多。爲什麼採用磁盤順序寫要快很多呢?如下圖所示:一般,完成一次磁盤 I/O(輸入 / 輸出)操作,通常需要經歷以下三個主要步驟:尋道、旋轉、和數據傳輸。尋道:磁頭從當前位置,移動到包含目標數據的軌道,這個過程可能需要幾毫秒時間; 旋轉:盤片旋轉直到目標數據正好位於磁頭下方,通常也需要幾毫秒 ⌘ Read more
乖乖,PG 高可用咱不用主從流複製了,咱試試 patroni
作者:IT邦德中國DBA聯盟(ACDU)成員,10餘年DBA工作經驗,Oracle、PostgreSQL ACECSDN博客專家及B站知名UP主,全網粉絲10萬+擅長主流Oracle、MySQL、PG、高斯及Greenplum備份恢復,安裝遷移,性能優化、故障應急處理微信:jemdbQQ交流羣:587159446公衆號:IT邦德前言 Patroni 用於構建高可用 PostgreSQL 集羣的工 ⌘ Read more
一文了解 Rust 語言中的雙向鏈表
Rust 作爲一門面向安全性和性能的系統編程語言,提供了強大的內建數據結構支持,其中LinkedList是其標準庫std::collections中一個重要的組成部分。本文將深入探討 Rust 中的雙向鏈表,包括其特性、應用場景以及高效使用方法。什麼是雙向鏈表?——–在講述雙向鏈表之前,我們先簡要回顧下鏈表的概念。鏈表是一種常見的線性數據結構,它由一系列節點組成,每個節點包含數據部分和指 ⌘ Read more
從原理到實踐:完全掌握零拷貝技術
零拷貝技術是一種優化數據傳輸的技術,旨在減少數據在內存之間的拷貝次數,從而提高數據傳輸性能和降低 CPU 的負載。傳統的數據傳輸方式涉及多次拷貝操作:首先將數據從磁盤讀取到內核緩衝區,然後再將數據從內核緩衝區複製到應用程序緩衝區。而零拷貝技術通過避免不必要的數據拷貝,直接將數據從磁盤讀取或網絡接收到用戶空間應用程序所使用的內存中。它利用了文件描述符、DMA(直接內存訪問)等機制,在內核態和用戶態之 ⌘ Read more
簡易評論系統設計
需求分析—-評論系統是互聯網社區網站的重要組成部分,對增強用戶參與度、提高網站活躍度等方面都具有重要價值。一個簡易的評論系統(在線社區平臺)通常包含以下功能用戶評論:用戶可以對某個產品、主題進行評論,包括文字評論。 評論展示:所有用戶的評論將會在產品或服務頁面下方展示,其他用戶可以查看。 評論的展示有多種組織方式,參考《評論系統的幾種展示結構和存儲設計》,本文主要針對常見的二級嵌套 ⌘ Read more
RAE:通過檢索增強來完成事件提取任務
Decompose, Enrich, and Extract! Schema-aware Event Extraction using LLMs 大型語言模型(LLMs)在處理自然語言數據方面能力卓越,能從多樣的文本資源中高效提取知識,助力情境洞察與決策支持。但其易產生幻覺的弱點,導致上下文信息失真,引發擔憂。本研究聚焦於利用 LLMs 自動提取事件,創新性地將任務拆分爲事件檢測與事件論 ⌘ Read more
實時數據的處理一致性如何保證?
摘要:在當今快速發展的數字化世界中,實時數據處理變得至關重要。無論是金融服務、在線零售、社交媒體還是物聯網 (IoT),實時數據流爲企業提供了即時的洞察和決策支持。然而,隨着數據量的激增和處理速度的加快,保證數據的一致性成爲了一個巨大挑戰。 實時數據一致性的定義以及面臨的挑戰 實時數據處理系統如何保障一致性 01 實時數據一致性的定義以及面臨的挑戰數據一致性通常指的是數據在整 ⌘ Read more
五分鐘學 NGINX - 詳解 Nginx 如何處理 HTTP 頭部
Nginx 作爲高性能的 HTTP 服務器和反向代理服務器,在處理 HTTP 請求時,對 HTTP 頭部的處理是至關重要的一環。接收請求事件模塊 Nginx 使用了一個事件驅動的架構,這使得它能夠高效地處理大量的併發連接。下面是 Nginx 處理 HTTP 請求的詳細流程:1. 建立連接———– 三次握手:客戶端通過發送 SYN 包開始與 Nginx 建立 TCP ⌘ Read more
給 Rust 新手力薦的《Learning Rust》教程
引言—-作爲一個系統級編程語言,Rust 以其高性能和內存安全著稱。然而對於初學者來說,Rust 的學習曲線比較陡峭。今天我想給大家推薦一本很棒的 Rust 學習教程——《Learning Rust》,它可以幫助 Rust 新手更好地掌握這門語言。創作背景—-《Learning Rust》是 GitHub 上的一個開源項目,項目地址爲 https://github.com/QuineDot ⌘ Read more
內存管理中分頁和分段有什麼區別?
分頁和分段是操作系統在內存管理中用於有效分配內存和管理進程的兩種基本技術。01 分頁(Paging)————-分頁是一種無需連續分配物理內存的內存管理方案。進程的地址空間被劃分爲固定大小的塊,稱爲頁,而物理內存被劃分爲固定大小的塊,稱爲幀。關鍵概念頁:進程地址空間的固定大小塊。 幀:物理內存的固定大小塊。 頁表:用於將虛擬地址映射到物理地址的數據結構。頁表中的每個條目對 ⌘ Read more
深入理解一致性 Hash 和虛擬節點
在分佈式系統中架構中我們經常提到一致性哈希算法,那麼什麼是一致性哈希算法,爲什麼需要一致性哈希算法呢? 1、爲什麼需要一致性哈希算法 假設現在有三臺緩存服務器(緩存服務器 A、緩存服務器 B、緩存服務器 C),現在將數據預熱到這三臺服務器,我們可以使用負載均衡的方法將數據緩存到服務器上,如下圖所示: 通過負載均衡的方式可以把數據均勻的分發到三臺緩存服務器上,在讀取緩存 ⌘ Read more