• CITA架构设计


    微服务

    联盟链在交易吞吐量低、交易实时性上很难满足行业应用的要求。另外,区块链 技术发展迅速,单体应用也很难满足演进要求。

    为了解决这两个问题, CITA 将单个节点按照功解构为交易共识、合约引擎、链 式存储、网络同步、服务网关等多个松耦合的微服务,一方面利用云计算基础设 施来按需提升性能,另一方面,各个组件可独立替换升级。

    另外,采用消息总线进行通信,各个微服务可以利用异步消息简化处理,又可以 确保消息的安全、可靠送达。当与外部系统集成时,外部系统可以直接访问消息 总线,而无需 CITA 做适配。

    Flow Chart

                                                                    node0 (tx into chain)                                               node1                                
        ---------------------------------------------------------------------------------------------------------                   -----------              
    
                                                       // reply when reveive the tx from the remote                                
                            ---------------------------------------------------------------------------------                                   
                            |                                                                               ^
                            |  ----------------------------------------------                               ^                                    
                            |  |               3.1.reply                    ^                               ^                                    
                            |  |                                            |                               |                                    
        +-----+  0.send   +---------+  1.forward   +------+  2.2.send  +-----------+    3.2.send      +---------+   broadcast:tx   +---------+               
        | APP |  ------>  | jsonRPC |  --------->  | auth |  ------->  | consensus |  ------------->  | network |  <------------>  | network | ...
        +-----+           +---------+              +------+            +-----------+                  +---------+                  +---------+               
           ^                | ^  ^                   | ^ ^                    ^                               ^                                    
           |  4.reply       | ^  |     2.1.reply     | ^ | // tx from remote  |            4.broadcast tx    |                                    
           ------------------ ^  --------------------- ^ ---------------------|--------------------------------                                   
                              ^                        ^                      |                                                                      
                              ^                        |             6.2.sync | 5.package      +-------+  6.1.process                                        
                              |                        |                      -------------->  | chain |  ---->                                            
                              |                        |                                       +-------+      |                                    
                              |                        |       6.3.sync tx hash                  |  |         |                                        
                              |                        -------------------------------------------  |         |                                        
                              |                                                                     |     +---------+                                 
                              -----------------------------------------------------------------------     | rocksDB |                                 
                                                        6.4.reply                                         +---------+                                 
    

    Timing Diagram

        +-----+             +---------+             +------+                   +-----------+         +-------+              +---------+               +-----------+
        | APP |             | jsonRPC |             | auth |                   | consensus |         | chain |              | network |               | other_node|
        +-----+             +---------+             +------+                   +-----------+         +-------+              +---------+               +-----------+
           | -----new_tx-------> |                      |                            |                   |                        |                          |              
           |                     | --------new_tx-----> |-------------+              |                   |                        |                          |              
           |                     |                      |   tx in pool and check     |                   |                        |                          |              
           |                     |                      |<------------+              |                   |                        |                          |              
           |                     | <-------result------ |                            |                   |                        |                          |              
           | <----result-------- |                      | ----------broadcast tx------------------------------------------------> |                          |              
           |                     |                      |                            |                   |                        | ----flooding new tx----> |-----+              
           |                     |                      |                            |                   |                        |                          |  reflect     
           |                     |                      |                            |                   |                        | <---flooding new tx----- |<----+         
           |                     |                      | <---------receive new_tx----------------------------------------------- |                          |              
           |                     |                      | ----------package_tx-----> |---------+         |                        |                          |              
           |                     |                      |                            | consensus txs     |                        |                          |              
           |                     |                      |                            |---------+         |                        |                          |              
           |                     |                      |                            | ----new_block---> |-----+                  |                          |              
           |                     |                      |                            |                   | add block              |                          |              
           |                     |                      |                            |                   |<----+                  |                          |              
           |                     |                      | <----------tx hash---------------------------- |                        |                          |              
           |                     |                      |                            |                   |                        |                          |              
           |                     |                      |                            | <---new status--- | ---broadcast status--> |                          |              
           |                     |                      |                            |                   |                        | --flooding new status--> |-----+              
           | ----request-------> |                      |                            |                   |                        |                          |     | 
           |                     | -----forward request------------------------------------------------> |                        |                          |  reflect
           |                     | <----response-------------------------------------------------------- |                        |                          |     |         
           |<-forward response-- |                      |                            |                   |                        | <--flooding new status-- |<----+         
           |                     |                      |                            |                   | <-----new status------ |                          |              
           |                     |                      |                            |                   |-------+                |                          |              
           |                     |                      |                            |                   |  if need sync          |                          |              
           |                     |                      |                            |                   |<------+                |                          |              
           |                     |                      |                            |                   | ---request block-----> |                          |              
           |                     |                      |                            |                   |                        | --request block--------> |-----+              
           |                     |                      |                            |                   |                        |                          |  reflect            
           |                     |                      |                            |                   |                        | <-response block-------- |<----+              
           |                     |                      |                            |                   | <--response block----- |                          |              
           |                     |                      |                            |                   | -----+                 |                          |              
           |                     |                      |                            |                   |  add block             |                          |              
           |                     |                      |                            |                   | <----+                 |                          |              
           -                     -                      -                            -                   -                        -                          -              
    

    ProtocolBuffer

    ProtocolBuffer_ 是一种用于序列化结构数据的语言无关、平台无关的扩展机制, 经常被用于跨进程、跨机器的应用程序间的数据通信,特别是微服务间的数据通 信。它的编译器接受接口描述语言(IDL)作为输入,通过不同语言的插件,可以编译 成各自语言的本地代码。

    CITA采用了ProtocolBuffer作为数据序列化的方法。一方面,序列化/反序列化 性能高,另一方面,不同微服务间可以通过接口描述语言很方便的集成到CITA的 微服务架构中。

    Block

    Block结构

    • version: u32
    • header: BlockHeader结构
    • body: BlockBody结构

    BlockHeader结构

    • prevhash: 上一个块的Keccak 256-bit哈希值
    • timestamp: Unix时间戳
    • proof: Proof结构,出块人签名
    • commit: Commit 结构,Chain处理结果
    • height: uint64 块号

    BlockBody结构

    • transactions: 交易列表

    Commit结构

    • stateRoot: Keccak 256-bit,状态root
    • transactionsRoot: Keccak 256-bit,交易列表root
    • receiptsRoot: Keccak 256-bit,交易回执root

    Transaction

    Transaction 结构

    • to: 160-bit address;如果为空表示创建合约
    • content: bytes,交易data
    • valid_until_block: 交易超时设置
    • signature: bytes,签名
    • crypto: 签名类型

     

  • 相关阅读:
    Json对象处理.将对象处理成dic数组.
    asp.net core 创建允许跨域请求的api, cors.
    (转载)dotnet core 中文乱码 codepages
    (转载)Memcached和Redis简介
    发送Json数据,WebApi查看时为Null的问题(已解决)
    Vs2017获取Git空仓库后创建解决方案及项目无法推送,推送失败的问题.
    前端:Jquery 处理同一Name的Radio组时,绑定checked属性异常的问题.(已解决)
    Vs2015 本地git获取的代码目录文件修改后,启动提示error:Unable to start program “C:Program Filesdotnetdotnet.exe” 已解决.
    .net core 发布后提示Start error
    .net core vs2015 vs2017打开后errpr
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13313319.html
Copyright © 2020-2023  润新知