巨杉内核笔记(一)| SequoiaDB 会话(session)简介
SequoiaDB 會話(session)簡介
會話(Session)的基本概念
容易弄混淆的兩個概念是會話與連接。
通俗來講,會話(Session) 是通信雙方從開始通信到通信結束期間的一個上下文(Context)。這個上下 文是一段位于服務器端的內存:記錄了本次連接的客戶端機器、通過哪個應用程序、哪個用戶登錄等信息。
而連接(Connection):連接是從客戶端到數據庫實例的一條物理路徑。連接可以在網絡上建立,或者在本機通過IPC機制建立。通常會在客戶 端進程與一個專用服務器或一個調度器之間建立連接。
?
SequoiaDB 中的會話設計
SequoiaDB 中的會話有很多種,不同的會話對應不同的服務。會話的主要任務是處理通信的對端發過來的請求。各種類型的會話能處理的請求不一樣。
?
通信平面
為了提供不同類型的服務,并使各服務之間隔離,SequoiaDB 的節點提供了多個通信平面。簡單來講,一個通信平面對應一個服務端口,不同 的端口提供不同類型的服務,這也就是在安裝 SequoiaDB 時,要求一定范圍內的端口號預留的原因。
SequoiaDB 中當前提供了如下幾個通信平面:
- local 平面(local service): 使用基礎服務端口號 svcname
- repl 平面(repl service):使用端口號 svcname + 1
- shard 平面(shard service):使用端口號 svcname + 2
- cat 平面(cat service):使用端口號 svcname + 3?
- rest 平面(rest service):使用端口號 svcname + 4
- om 平面(om service):使用端口號 svcname + 5
不同的節點上開啟的服務平面不一樣。節點上通過不同平面提供不同的服務,就像同一間屋子開了幾個門,被訪問的數據就如同屋子里面的東 西,是大家所共享的。每一個平面都可能有一個或多個用戶來進行訪問,因此,在系統內部要做好它們的并發控制。
?
本地會話(Local Session)
本地會話是在直連節點(即配置的 svcname)時創建。這里的直連含義比較寬泛,連接任意節點的本地服務端口即是直連,無論是單機,還是 集群中的任意節點。客戶端連接到協調節點時,協調節點上也是創建的本地會話。 本地端口上的監聽接收到新的連接請求時,會創建一個新的 會話(內存結構)及一個服務線程(執行單元),將它們綁定(attach)起來。后續客戶端直接與這個新的服務線程進行交互。
?
代碼導讀
1. SequoiaDB 中各類型的會話繼承關系如下圖所示。
?
?
從圖中可以看到,本地會話、增量/全量同步會話、復制會話等,都是繼承自同一個基類 _ISession。下面結合組網對其中幾個關鍵的會話進行介紹,主要是會話建立/銷毀的時機、會話的結構、操作等。
?
2.本地會話對應數據結構是類 _pmdLocalSession,線程的主函數是 _pmdLocalSession::run(),會話線程啟動后,就在這個函數里循環, ?接收及處理消息,直到會話需要結束時退出該循環。 ?
?
3. 本地會話能綁定不同的 processor,以執行不同的處理流程。對于協調節點,綁定的是 _pmdCoordProcessor,對于編目節點和數據節點,綁定的是 _pmdDataProcessor。對于協調節點,會先調用 _pmdCoordProcessor 的接口進行消息處理,在無法識別請求類型時,則會再次調用 _pmdDataProcessor 的接口進行處理。 ?
?
分區會話(Shard Session)
分區會話存在于編目節點與數據節點上,因為是在這兩種節點上真正分布式存儲數據,真正與分片這個概念相關。協調節點上不存儲數據,不 涉及到分片,因此它上面沒有分片會話。在代碼實現上,分片會話的管理整合到了 clsCB 中(它還管理著復制會話)。
當通過 shard 平面連接到節點時,在節點上就會創建一個分區會話。 shard 平面與本地平面存在一些差異:
shard 平面看不到節點上的系統集合空間,本地平面可以?通過 shard 平面進行的操作會寫復制日志,通過本地平面的不會(這也就是為什么直連數據節點下進行數據操作會造成主備數據不一致 的原因,如果是通過 shard 平面連接數據節點操作,則數據變更會被同步到備節點上)
分區會話是繼承自統一的異步會話框架,包含一個分區會話管理器,由它來負責分區會話的創建等工作。會話的主要工作則是在被創建后,處 理客戶的請求。關于異步會話的機制,詳見相關的介紹。
當協調節點通過 shard 平面連接到數據節點時,新創建的會話接收到的第一個消息是 init session(在 3.0 后的版本中是 package 消息,它將 init session 及部分其它消息打包到一個消息包中)。
?
代碼導讀
1. 分區會話管理器類是 _clsShardSessionMgr,分區會話類是 _clsShdSession?
2. 通過異步會話管理器( _clsShardSessionMgr 的父類) 的 getSession() 接口來獲取已有 session,或者創建一個新的異步會話?
3. _clsShdSession 的主消息處理入口是 _clsShdSession::_onOPMsg,它根據消息碼,調用對應的消息處理函數,并發送應答消息
?
同步(或復制)會話(Repl Session)
分區組內的節點間,通過同步動作來保證數據的一致性,分為正常運行狀態下的增量同步,和異常情況下的全量同步。同步也是通過對應的同 步會話與同步線程來處理的。由于同步涉及到兩個節點,數據生產方稱為源端,數據消費方稱為目標端。由于只有數據節點與編目節點上會進 行數據復制,因此只有在這兩種類型的節點上,才會存在同步會話。
1)增量同步會話
增量同步會話在復制組正常運行期間存在,分為增量同步源端會話和目標端會話。在數據/編目節點的啟動過程中,就會開啟增量同步的監聽, 而無論其是主節點還是從節點。同時,它也會主動啟動一個增量復制目標端會話,并向它選定的源端發送同步請求。源端節點上會被動創建一 個增量同步源端會話。然后,這兩個會話開始進行交互,完成數據同步。詳見 增量同步 相關章節。
?
2)全量同步會話
全量同步會話是進行全量同步時存在,在集群正常運行期間及全量同步完成后不存在,也分為源端和目標端。需要全量同步的場景有三種:
- 節點的重放速度跟不上主節點,主節點上復制日志繞接,導致備節點還未獲取到的復制日志被覆蓋,備節點無法繼續增量同步。
- 節點異常重啟,啟動后根據讀取到的異常啟動狀態決定全量同步。?
- 節點正常停止后正常重啟,但停的時間較長,期間其它節點上的日志已經發生了繞接。
無論是上述哪種情況,都是先有增量復制會話,然后由于這些原因導致增量同步無法繼續進行的時候,就會在目標節點上主動創建一個全量同 步會話(以及對應的線程),且當前的增量復制線程退出。全量同步會話一旦啟動之后,就會向源端發送一個全量同步開始的消息。此時源端 上會被動創建一個全量同步源端會話。至此,全量同步的會話創建完成,然后,這兩個會話之間開始進行交互,完成數據同步。詳見 全量同步 相關章節。
?
代碼導讀
1. 同步相關的會話,都是異步會話,這四種會話,使用同一個會話管理器來進行管理:_clsReplSessionMgr?
2. 四種會話對應的類為:_clsReplSrcSession,_clsReplDstSession,_clsFSSrcSession,_clsFSDstSession?
3. 異步會話響應的消息類型及對應的處理函數,一般在對應的類中通過 OBJ_MSG_MAP 等宏進行定義,請參考代碼。
會話的查看
可通過 snapshot 查看會話快照,可查看當前會話或系統中的所有會話。這個命令實現的其實是與線程對應,可返回所有線程的信息,包括系 統后臺線程。查詢會話的詳細結果見相關文檔。
代碼導讀
session 的導出動作在類 _monSessionFetcher 類中實現,在其 init() 函數中準備好數據。可選擇查看當前會話(使用當前線程的 eduCB 接口 導出)或所有會話(使用 _pmdEDUMgr 的接口導出)。 在準備好數據后,由上層統一的 context 框架調用該類的 fetch 接口獲取數據。
?
SequoiaDB簡介:
SequoiaDB 巨杉數據庫是一款金融級分布式關系型數據庫, 其自研的原生分布式存儲引擎支持完整 ACID,具備彈性擴展、高并發和高可用特性,支持 MySQL、PostgreSQL 和 SparkSQL 等多種 SQL 訪問形式,適用于核心交易、數據中臺、內容管理等應用場景。
標準SQL支持,MySQL協議級兼容
SequoiaDB目前支持 MySQL、PostgreSQL 和 SparkSQL 等多種 SQL 訪問形式。SequoiaDB還提供了類S3對象訪問以及Posix文件系統接口、MongoDB兼容的原生JSON引擎以及深度數據壓縮等多項全新功能。
金融級分布式OLTP
SequoiaDB使用其自研的開源數據庫存儲引擎,全面支持ACID(原子性、一致性、隔離性與持久性)、分布式跨表跨節點事務能力、可配置強一致與最終一致性保證、同時在優化器端支持CBO(Cost-Based Optimization)、多維度數據分區、以及HTAP等多種技術特性。
分布式架構
SequoiaDB數據存儲引擎采用原生分布式架構,數據完全打散在分布式節點間存儲,自動化數據分布和管理,數據可以按需靈活擴展,目前生產環境實測支持超過1000個節點集群。
Multi-Model多模數據引擎
SequoiaDB靈活的數據存儲類型,支持非結構化、結構化和半結構化數據全覆蓋,實現多模(Multi-Model)數據統一管理,更符合云化數據架構下對于多樣化業務數據的統一管理和運維要求。
HTAP混合事務/分析處理
SequoiaDB通過SQL的完全支持以及Spark的整合,實現HTAP混合事務和分析處理,快速實現業務應用的彈性開發,應對更多復雜應用場景。同時,通過分布式數據庫多副本機制,將在線交易和離線分析業務物理隔離,實現同一組數據在應對不同類型業務時互不干擾。
數據安全與多活容災
SequoiaDB巨杉數據庫原生支持數據庫內核級別的高可用以及跨數據中心災備能力,目前已經實現異地容災備份,可滿足“三地五中心”的容災支持。同時,巨杉數據庫在異地容災基礎上,實現了數據異地多活,目前已經實現雙中心同時讀寫,中心切換RPO為0和RTO達到秒級,提供了“超金融級”的數據安全保障。
?
擴展閱讀
會話快照
http://doc.sequoiadb.com/cn/index-cat_id-1479173713-edition_id-302
當前會話快照
http://doc.sequoiadb.com/cn/index-cat_id-1479173714-edition_id-302
會話列表
http://doc.sequoiadb.com/cn/index-cat_id-1479173733-edition_id-300
轉載于:https://www.cnblogs.com/sequoiadbsql/p/10965799.html
總結
以上是生活随笔為你收集整理的巨杉内核笔记(一)| SequoiaDB 会话(session)简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么运维管理面板我只选择它
- 下一篇: 强网杯Web部分review