server基本組成

2021-09-01 13:24:58 字數 1646 閱讀 6531

字串操作封裝,如:數字字串轉換;分隔符拆分;等常用操作(string_handle)

網路基礎資料結構,如:ip數字轉換;獲取網域名稱;

物件池封裝

位儲存(bit_map)

序列化反序列化buffer(octets,能夠支援寫時拷貝以及壓縮功能)

阻塞佇列(block_queue)

ring buffer

時間封裝(獲取年月日等,可以單獨執行緒定時呼叫)

json_to_pb,pb_to_json(pb_json_convert)

無鎖佇列

共享記憶體

定時器(timer)

countdown latch(sync_completion)

字符集轉換封裝(conv_charset)

c++11:unordered_map耗記憶體;emplace_back 節省拷貝構造;thread;mutex;atomic;shared_ptr;weak_ptr;function;bind;

stl容器以及演算法的使用;

配置檔案熱載入;

由弱到強分別是 依賴(臨時關係) < 關聯(相同層次之間的關係) < 聚合(包含關係,個體於整體,高低層次之間的關係) < 組合(不可分離的整體關係,生命期一致)

執行緒和task「聚合」使用,同時封裝task factory

執行緒基本操作封裝(thread_pool)

執行緒鎖封裝(原子,讀寫,互斥,條件變數,原子用c++11的話就不必封裝)(鎖的使用,互斥鎖和讀寫鎖使用不易出錯,原子鎖實現佇列等功能容易出錯,要使用cas,要注意)

執行緒tls(thread_tls)

xmljson(rapidjson,jsoncpp)

iniyaml

libconfig/libconfig.h++

pbxml定義協議、工具生成cpp檔案(一些老專案使用類似方式生成各種前後端協議檔案)

glog

log4cpp

linux log api(服務簡單的話直接用api就可以啦)

spdlog

redis unixsocket

libevent

自己封裝

spserver

restclient-cpp

redis(qps 7w,測試用例開啟單執行緒無休眠讀取佇列 qps 1.6w, redis cpu 14%)

codis(set型別值個數不要超過10w,每個例項8g,具體根據業務測試,有的業務redis儲存set型別值個數達到1500w)

mysql

mongodb(bsoncxx)

ssdb

influxdb

leveldb

redis

kafka

thrift

brpc

自己封裝

zlib

curl

openssl

tbbgflag

libconfig

cppmetrics

規範:執行緒和業務要分離,目前**一般都是執行緒和業務混淆,類內容混亂,造成邏輯不清晰感覺,檢視**會遇到麻煩;

資料結構設計可以冗餘資料,時間換空間;

使用設計模式的目的是把不變的東西和可變的東西分離並且封裝起來,避免以後修改**,  「對修改關閉,對擴充套件開放」,但是濫用設計模式會把簡單的問題複雜化;

Docker基本組成

docker client 客戶端 docker daemon 守護程序 c s架構的程式,docker客戶端向docker的伺服器端 守護程序 發出請求,守護程序處理完所有的工作,並返回結果 客戶端對伺服器端的訪問既可以在本地也可以在遠端來訪問。docker image 映象 1 理解一 映象是d...

mysql基本組成

連線管理器 連線使用者請求 執行緒管理器 啟用執行緒連線處理使用者請求 使用者模組 對連線mysql伺服器的使用者做認證,並複製接受與駁回動作 命令分發模組 對使用者的sql語句分析並分發到解析器 快取模組 如果是查詢語句且快取命中,則直接快取返回 日誌模組 日誌記錄 解析器 解析查詢,生成解析數,...

ODI的基本組成

資料庫使用者 源庫odi source odi source 目標庫odi target odi target 資料庫 odi設計 使用者 主資料庫 odi master odi master 建立主資料庫 初始化 路徑 程式 oracle oracle data integrator reposi...