原创 MooseFS的常見問題與操作

副本的設定 作爲一種分佈式文件系統, 基本原理是將文件分塊, 每個塊分不到幾臺機器上面, 這樣, 如果某臺機器故障或者因爲網絡問題不可達, 系統會進行自動的異常平衡策略處理, 通常是將每個數據塊的副本數設定爲2, 假定者2個副本分

原创 性能問題的定位

線上程序常出現的狀況是運行一段時間之後, 發現運行效率越來越差, 慢慢出現了累計或者相應慢的情況, 比較粗暴額解決方式是重啓程序, 一切都正常了。 但是過了一段時間問題又出現了, 我們需要藉助一些工具來定位爲。 通常我們的程序,

原创 分佈式系統的性能優化方法

本文主要記錄在分佈式系統下優化的常用方法。 找到系統的性能瓶頸 這句話似乎是廢話, 但是確實至關重要的。因爲, 整個系統的性能瓶頸, 滿足木桶效應, 最短的那根木板決定了桶裏面能夠容納水的量。類似的, 系統的整體性能或者叫吞吐量,

原创 MongoDB中併發控制(MVCC)

在支持行級併發或者文檔級併發的數據庫中,爲了進一步提升系統的併發性,通常都會使用MVCC的機制。 MVCC是一種非鎖機制進行讀操作來提升性能, 我們知道鎖是一種有限的系統資源, 鎖定和解鎖都是需要一定的時間的, 並且如果請求的鎖無

原创 MongoDB的事務實現

在前面我們介紹了MongoDB單文檔原子操作, 這是單文檔下的事務, 它能夠保證對於單文檔的操作的原子性。 在MongoDB3.6裏面, 支持了session, 這與之前的OperationContext很類似, 所不同的實, s

原创 2019年小結

2019年就要過去了,歲末之際, 回顧一下過去一年的的得失,展望一下未來。 今年8月份換了工作, 在1~8月主要是MongoDB方面的工作, 更具體的就是MongoDB分片相關,9月開始進行分佈式文件系統相關的性能優化。 總的來說

原创 docker的使用

隨着docker/K8S技術的日漸成熟, 越來越多的公司將自己的服務放進docker裏面來運行, 以此來做到資源隔離和部署的簡化。 docker與虛擬機的區別 從下圖可以看出, docker與VM相比, 結構要簡單, 更加輕量一些

原创 C++多線程的實現

在C++環境下面, 要實現多線程併發, 提升性能, 並不是一件很容易的事情。 難點不是如何劃分出多個線程, 而是如何確認哪些內存是線程間公用的, 需要避免衝突, 另一個方面, 如何做到線程間同步。 線程私有數據 在一個線程裏面,

原创 redis command 執行過程的代碼分析

本文通過命令從client端到server端的執行過程, 分析一下命令的處理過程。 redisContext 對於每一個連接, 會產生一個redisContext, 記錄了連接的上下文信息, 比如:sock fd, 寫入的buf,

原创 redis 備份過程代碼分析

在redis中, RDB主要用來進行數據庫的全量備份, AOF主要用來進行增量備份, 他們有不同的使用場景, 在真實的線上環境, 比較常見的是結合全量備份和增量備份來實現按時間點的回覆。 RDB備份 RDB是對備份時間點的數據庫現

原创 LINUX文件系統概要

在LINUX系統下, 一切皆是文件。所有的讀寫, 包含塊設備, 字符設備,socket, 管道等的操作, 都被設計爲對文件的IO操作。 文件系統的位置 在LINUX系統下, 所有的文件及設備都是通過文件系統來操作的, 文件系統在整

原创 一點感慨

最近有一點感慨記錄一下。 認清楚一線城市與二三線的差異 我們不得不承認, 目前國內的IT環境, 主要的大公司還集中在北上廣深, 一些基礎架構以及很底層的工作, 都集中在一線城市。 二三線城市比較多的是應用以及某個大公司的分部,負責

原创 Golang 線上常見問題記錄

Golang程序常見的問題這裏激勵一下, 這些都是比較常見的問題。 儘量避免用ReadString 默認是從reader 六裏面讀取一個字符串, 知道讀取到‘\n’爲止, 這裏, 最大能夠讀取的數據量是64K, 超過了64K就會出

原创 WiredTiger中併發控制(MVCC)

在支持行級併發或者文檔級併發的數據庫中,爲了進一步提升系統的併發性,通常都會使用MVCC的機制。 MVCC是一種非鎖機制進行讀操作來提升性能, 我們知道鎖是一種有限的系統資源, 鎖定和解鎖都是需要一定的時間的, 並且如果請求的鎖無

原创 WiredTiger的事務實現

WiredTiger對事務的支持, 是MongoDB支持事務的基礎, 這裏介紹一下WT下事務的實現過程。 transaction 相關的數據結構 __wt_txn_global 在WT_CONNECTION中, 有一個全局的事務相關的