JP6888295B2 - プログラム、情報処理装置、および情報処理方法 - Google Patents

プログラム、情報処理装置、および情報処理方法 Download PDF

Info

Publication number
JP6888295B2
JP6888295B2 JP2016251415A JP2016251415A JP6888295B2 JP 6888295 B2 JP6888295 B2 JP 6888295B2 JP 2016251415 A JP2016251415 A JP 2016251415A JP 2016251415 A JP2016251415 A JP 2016251415A JP 6888295 B2 JP6888295 B2 JP 6888295B2
Authority
JP
Japan
Prior art keywords
storage area
operations
value
update request
difference
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016251415A
Other languages
English (en)
Other versions
JP2018106386A (ja
Inventor
剛 宮前
剛 宮前
岳夫 本田
岳夫 本田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2016251415A priority Critical patent/JP6888295B2/ja
Priority to US15/851,777 priority patent/US11074000B2/en
Publication of JP2018106386A publication Critical patent/JP2018106386A/ja
Application granted granted Critical
Publication of JP6888295B2 publication Critical patent/JP6888295B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • G06F3/0607Improving or facilitating administration, e.g. storage management by facilitating the process of upgrading existing storage systems, e.g. for improving compatibility between host and storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45595Network integration; Enabling network access in virtual machine instances

Description

本発明は、プログラム、情報処理装置、および情報処理方法に関する。
従来、コンテナ型仮想化によって、他のユーザ空間と分離されたユーザ空間、いわゆるコンテナを生成する技術がある。また、コンピュータ上で、仮想マシンを動作させる技術がある。関連する先行技術として、例えば、ピアツーピアで結ばれた不特定多数のノードにデータを共有させる技術であるブロックチェーンのシステム上で、ユーザによるプログラムによりブロックチェーンのデータを更新する、スマートコントラクトと呼ばれるものがある。
"fabric/protocol−spec.md at master ・ hyperledger/fabric ・ GitHub:"[Online]、[平成28年12月19日検索]、インターネット<URL:https://github.com/hyperledger/fabric/blob/master/docs/protocol−spec.md>
ここで、ブロックチェーンのシステムでは、セキュリティを維持するため、コンテナ型仮想化を使用することが考えられる。そして、ブロックチェーンのシステムでは、異なるコンテナに含まれる2つのプロセス間で、一方のプロセスからの読み出し要求および書き込み要求により他方のプロセスがアクセス可能な記憶領域の値を更新することが考えられる。しかしながら、異なるコンテナに含まれる2つのプロセス間で、一方のプロセスからの読み出し要求および書き込み要求により他方のプロセスがアクセス可能な記憶領域の値を更新すると、処理時間が増加する場合がある。具体的には、他方のプロセスがアクセス可能な記憶領域の値に何らかの値を加える場合、一方のプロセスは、他方のプロセスに対し読み出し要求を送信し前述の値を読み出し、読み出した値に何らかの値を加えた値を、書き込み要求として他方のプロセスに送信する。このように、1つの記憶領域の値に対して発行される要求数が2つとなるため、値を更新する記憶領域の数が多い程、発行される要求数が増加し、全体の処理時間が増加することになる。
1つの側面では、本発明は、コンテナ型仮想化によって生成されたプロセス間、または異なる仮想マシン上のプロセス間、または異なるコンピュータ上のプロセス間の記憶領域の値の更新にかかる要求数を削減することができるプログラム、情報処理装置、および情報処理方法を提供することを目的とする。
1つの実施態様では、プログラム、情報処理装置、および情報処理方法は、コンテナ型仮想化または仮想マシンまたは物理マシンによって生成されており記憶部にアクセス可能なプロセスに、コンテナ型仮想化または仮想マシンまたは他のコンピュータによって生成されており記憶部にアクセス可能でない他のプロセスから、記憶部内の記憶領域の識別情報と、四則演算またはビット演算のうちのいずれかの演算を示す情報と、記憶領域に格納された値に対する差分値とを含む差分更新要求を受け付けたことに応じて、記憶領域に格納された値に対して、差分値を引数としていずれかの演算を実行し、いずれかの演算の演算結果が成功を示す場合、演算結果により得られるいずれかの演算の出力値を、記憶領域に書き込み、いずれかの演算の演算結果に基づく差分更新要求の応答情報を、他のプロセスに送信する。
一つの側面では、本発明は、コンテナ型仮想化によって生成されたプロセス間、または異なる仮想マシン上のプロセス間、または異なるコンピュータ上のプロセス間の記憶領域の値の更新にかかる要求数を削減することが可能となる。
図1は、本実施の形態にかかる情報処理装置101の動作例を示す説明図である。 図2は、システム200の構成例を示す説明図である。 図3は、情報処理装置101のハードウェア構成例を示す説明図である。 図4は、情報処理装置101のソフトウェア構成例を示す説明図である。 図5は、情報処理装置101の機能構成例を示す説明図である。 図6は、GET_STATE、PUT_STATEを使用する際のリモートトランザクション方式のシーケンスを示す説明図である。 図7は、差分更新機能を使用する際のリモートトランザクション方式のシーケンスを示す説明図である。 図8は、差分更新機能および一括更新機能を使用する際のリモートトランザクション方式のシーケンスを示す説明図である。 図9は、ロールバック処理の一例を示す説明図である。 図10は、INC命令受け付け時処理手順の一例を示すフローチャートである。 図11は、SUBTRAN命令受け付け時処理手順の一例を示すフローチャートである。
以下に図面を参照して、開示のプログラム、情報処理装置、および情報処理方法の実施の形態を詳細に説明する。
図1は、本実施の形態にかかる情報処理装置101の動作例を示す説明図である。情報処理装置101は、仮想マシン上のプロセス、またはコンテナ型仮想化によって生成されたプロセス、または仮想化技術が使用されていないプロセスを動作させるコンピュータである。情報処理装置101は、例えば、物理サーバである。
仮想マシンは、ハードウェア資源を用いて仮想的に作成されたコンピューターシステムである。また、コンテナ型仮想化は、1つのOS内にコンテナと呼ばれる、他のユーザ空間と分離されたユーザ空間を生成し、分離されたユーザ空間ごとに異なるOS環境を実現する技術である。以下、生成されたユーザ空間を、「コンテナ」と呼称する。コンテナ型仮想化技術の例としては、例えば、コンテナ型仮想化環境であるDocker(登録商標)がある。コンテナ型仮想化によって生成されたプロセスは、具体的には、コンテナに含まれるプロセスとなる。
また、ピアツーピアで結ばれた不特定多数のノードにデータを共有させる技術である、ブロックチェーンと呼ばれる技術がある。ブロックチェーンにより、データの改ざんを困難にすることができる。ブロックチェーンを利用したサービスとして、ビットコインがある。また、ブロックチェーンのシステム上で、ユーザによるプログラムによりブロックチェーンのデータを更新する、スマートコントラクトと呼ばれる技術がある。スマートコントラクトの例としては、Ethereum、Hyperledger Fabric等がある。ここで、Hyperledger Fabricでは、ブロックチェーンを、「Peer」と呼称し、スマートコントラクトとなるアプリケーションロジックを、「Chaincode」と呼称する。
以下の説明では、ブロックチェーンのシステム内でブロックチェーンのサービスを提供するプロセスを、「ブロックチェーンメインプロセス」と呼称する。また、ユーザによって記載された、スマートコントラクトとなるアプリケーションソフトウェアを、「スマートコントラクトアプリ」と呼称する。ブロックチェーンメインプロセスやスマートコントラクトアプリは、それぞれ、1つのプロセスとなる。
スマートコントラクトアプリは、例えば、OSのリソースにアクセス可能なライブラリ等を使用可能なプログラム言語によって記載される。従って、1つの装置上で、ブロックチェーンメインプロセスと、スマートコントラクトアプリとを動作させると、悪意のあるスマートコントラクトアプリによって、ブロックチェーンメインプロセスの動作が停止させられてしまうことがある。
そこで、セキュリティを担保するために、ブロックチェーンメインプロセスと、スマートコントラクトアプリとを、異なるコンテナ上で動作させることが考えられる。そして、ブロックチェーンメインプロセスと、スマートコントラクトアプリとの間では、読み出し要求と書き込み要求という特定の通信でやりとりすることにより、セキュリティを担保することができる。Hyperledger Fabricにおける、ChaincodeとPeerとのプロトコルについては、先行技術文献で示した文献である<URL:https://github.com/hyperledger/fabric/blob/master/docs/protocol−spec.md>の「3.3.2 Chaincode Protocol」に記載されている。以下、上記プロトコルに従って、読み出し要求を「GET_STATE」とし、書き込み要求を「PUT_STATE」とする。
例えば、口座Aから口座Bへ一定残高を移動するというトランザクションにおいて、GET_STATEとPUT_STATEとを用いると、下記に示すように4回のコンテナ間の要求が発生する。ここで、4つの要求は、全て、スマートコントラクトアプリからブロックチェーンメインプロセスへの要求である。1つ目の通信は、口座Aの残高が格納された記憶領域から値を読み出すGET_STATEである。2つ目の通信は、読み出した口座Aの値から、一定残高を減じた値を口座Aの値として前述の記憶領域に書き込むPUT_STATEである。3つ目の通信は、口座Bの残高が格納された記憶領域から値を読み出すGET_STATEである。4つ目の通信は、読み出した口座Bの値から、一定残高を加えた値を口座Bの値として前述の記憶領域に書き込むPUT_STATEである。
このように、スマートコントラクトアプリが、ブロックチェーンメインプロセスがアクセス可能な記憶領域の値の更新を行おうとすると、1つの記憶領域に対して発行される要求数が2つとなる。従って、値を更新する記憶領域の数が多い程、発行される要求数が増加することになる。
ここで、スマートコントラクトアプリの動作を高速化する方法としては、例えば、スマートコントラクトアプリのトランザクションを並列実行することが考えられる。しかしながら、依存関係のないトランザクション同士では並列実行することができるが、依存関係のあるトランザクション同士では並列実行することができない。
また、スマートコントラクトアプリが、任意の命令をブロックチェーンメインプロセスに実行させるようにして、1つの記憶領域に対して任意の命令を実行する1つの要求にすることが考えられる。しかしながら、任意の命令を外部から実行できるようにしてしまうと、ブロックチェーンメインプロセスのセキュリティが低下することになる。
そこで、本実施の形態では、ブロックチェーンメインプロセスに、差分更新機能を追加することについて説明する。差分更新機能は、記憶領域の識別情報と、記憶領域に格納された現状値からの差分値とを受け付けたら、ブロックチェーンメインプロセスが演算する機能である。そして、ブロックチェーンメインプロセスで行う演算は、セキュリティを担保するため、四則演算またはビット演算とする。
図1を用いて、情報処理装置101の動作例について説明する。図1の例では、各情報処理装置101は、コンテナ111−1、2を生成している。そして、情報処理装置101は、コンテナ111−1内で、プロセスとしてブロックチェーンメインプロセス112を動作させており、コンテナ111−2内で、他のプロセスとしてスマートコントラクトアプリ113を動作させている。以下の説明では、同種の要素を区別する場合には、「コンテナ111−1」、「コンテナ111−2」のように参照符号を使用し、同種の要素を区別しない場合には、「コンテナ111」のように参照符号のうちの共通番号だけを使用することがある。また、本実施の形態では、ブロックチェーンメインプロセス112が、本実施の形態にかかる方法を実施する。
図1では、スマートコントラクトアプリ113が、ブロックチェーンメインプロセス112がアクセス可能な記憶部120内の記憶領域の値を、ある値分増加させる。また、スマートコントラクトアプリ113は、記憶部120にアクセスできない。記憶領域には、該当の記憶領域を示す変数が設定されることがある。図1の例では、該当の記憶領域を示す変数が、変数Aであるとし、変数Aの値を、ある値として、K分増加させることについて説明する。
図1の(1)で示すように、ブロックチェーンメインプロセス112は、コンテナ111−2に含まれるスマートコントラクトアプリ113から、差分更新要求req_incupdを受け付ける。ブロックチェーンメインプロセス112は、差分更新要求req_incupdを受け付けると、差分更新機能を実行する。ここで、差分更新要求req_incupdには、記憶部120の記憶領域の識別情報と、四則演算またはビット演算のうちのいずれかの演算を示す情報と、記憶領域に格納された値に対する差分値とを含む。
記憶領域の識別情報は、例えば、変数名である。また、記憶領域の識別情報は、データベース内の1レコードに含まれる1フィールドを示す名称でもよい。四則演算またはビット演算のうちのいずれかの演算を示す情報は、例えば、四則演算やビット演算を示す演算子でもよいし、文字列でもよい。四則演算は、加算、減算、乗算、除算の総称である。四則演算を示す演算子は、例えば、「+」、「−」、「×」、「/」である。ビット演算は、例えば、論理和、論理積、排他的論理和である。そして、ビット演算を示す演算子は、例えば、「&」、「|」、「^」である。また、ビット演算が排他的論理和であれば、ビット演算を示す文字列は、例えば、「XOR」である。記憶領域に格納された値に対する差分値は、いずれかの演算を行う際の引数となる値である。図1で示す差分更新要求req_incupdは、変数Aの変数名と、加算を示す演算子である「+」と、差分値としてKとを含む。
次に、図1の(2)で示すように、差分更新要求req_incupdを受け付けたことに応じて、ブロックチェーンメインプロセス112は、差分更新要求req_incupdから特定される記憶領域に格納された値を記憶部120から取得する。図1の例では、ブロックチェーンメインプロセス112は、記憶部120変数からAの値:xを取得する。
そして、ブロックチェーンメインプロセス112は、図1の(3)で示すように、取得した値に対して、差分値を引数として差分更新要求req_incupdから特定されるいずれかの演算を実行する。図1の例では、ブロックチェーンメインプロセス112は、xにKを加算する。
ブロックチェーンメインプロセス112は、図1の(4)で示すように、前述のいずれかの演算の演算結果が成功を示す場合、前述の演算結果により得られる前述のいずれかの演算の出力値を、差分更新要求req_incupdから特定される記憶領域に書き込む。ここで、いずれかの演算の演算結果として、いずれかの演算が成功であればいずれかの演算の出力値が得られ、いずれかの演算が失敗であれば、失敗の理由等を示す識別子が得られる。また、演算結果として、いずれかの演算の成功または失敗を示す識別子と、いずれかの演算が成功であればいずれかの演算の出力値とが得られてもよい。図1の例では、前述のいずれかの演算が成功したため、ブロックチェーンメインプロセス112は、x+Kを、変数Aに書き込む。また、いずれかの演算が失敗することもある。例えば、ブロックチェーンメインプロセス112は、いずれかの演算が加算、乗算であり、演算を行った結果、得られた値が定められた最大値を超えた場合に、いずれかの演算が失敗したとしてもよい。また、ブロックチェーンメインプロセス112は、いずれかの演算が除算であって、差分値が0である場合、0除算が発生することになるため、いずれかの演算が失敗したとしてもよい。
そして、ブロックチェーンメインプロセス112は、図1の(5)で示すように、いずれかの演算の演算結果に基づく差分更新要求req_incupdの応答情報res_incupdを、スマートコントラクトアプリ113に送信する。図1の例では、ブロックチェーンメインプロセス112は、応答情報res_incupdとして、差分更新が成功したことを示す識別子を、スマートコントラクトアプリ113に送信する。
これにより、ブロックチェーンメインプロセス112は、1つの変数の更新について、要求数を2から1に削減することができる。さらに、ブロックチェーンメインプロセス112は、スマートコントラクトアプリ113からの要求により、四則演算やビット演算という限定された演算しか行わないため、セキュリティを維持することができる。
例えば、口座Aから口座Bへ一定残高を移動するというトランザクションにおいて、本実施の形態では、2つのINC命令とすることができる。また、本実施の形態は、口座Aから口座Bへ一定残高を移動するというトランザクション以外にも適用することができる。例えば、ある値へのインクリメントやデクリメントのトランザクションにも適用することができる。具体的には、INC命令を使用しない場合、ある値を読み出すGET_STATEと、読み出した値をインクリメントした値を書き込むPUT_STATEとが発生する。一方で、本実施の形態では、1つのINC命令で済むため、要求数を削減することができる。
なお、図1の説明では、ブロックチェーンメインプロセス112とスマートコントラクトアプリ113とは、それぞれ異なるコンテナ111内に含まれるプロセスであったが、これに限らない。例えば、ブロックチェーンメインプロセス112とスマートコントラクトアプリ113とは、それぞれ異なる仮想マシン上のプロセスでもよい。また、ブロックチェーンメインプロセス112とスマートコントラクトアプリ113とは、それぞれ異なるコンピュータ上のプロセスでもよい。次に、情報処理装置101をシステムに適用した例を、図2を用いて説明する。
図2は、システム200の構成例を示す説明図である。図2に示すシステム200は、複数の情報処理装置101を有する。複数の情報処理装置101のそれぞれは、インターネット、LAN(Local Area Network)、WAN(Wide Area Network)等のネットワーク201で接続される。システム200に含まれる情報処理装置101は、例えば、数台から数十台存在する。次に、図3を用いて、情報処理装置101のハードウェア構成例について説明する。
図3は、情報処理装置101のハードウェア構成例を示す説明図である。図3において、情報処理装置101は、CPU(Central Processing Unit)301と、ROM(Read−Only Memory)302と、RAM(Random Access Memory)303と、を含む。また、情報処理装置101は、ディスクドライブ304およびディスク305と、通信インターフェース306と、を含む。また、CPU301〜ディスクドライブ304、通信インターフェース306はバス307によってそれぞれ接続される。
CPU301は、情報処理装置101の全体の制御を司る演算処理装置である。ROM302は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。RAM303は、CPU301のワークエリアとして使用される揮発性メモリである。
ディスクドライブ304は、CPU301の制御に従ってディスク305に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ304には、例えば、磁気ディスクドライブ、光ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク305は、ディスクドライブ304の制御で書き込まれたデータを記憶する不揮発性メモリである。例えばディスクドライブ304が磁気ディスクドライブである場合、ディスク305には、磁気ディスクを採用することができる。また、ディスクドライブ304が光ディスクドライブである場合、ディスク305には、光ディスクを採用することができる。また、ディスクドライブ304がソリッドステートドライブである場合、ディスク305には、半導体素子によって形成された半導体メモリ、いわゆる半導体ディスクを採用することができる。
通信インターフェース306は、ネットワーク201と内部のインターフェースを司り、他の装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース306は、通信回線を通じてネットワーク201を介して他の装置に接続される。通信インターフェース306には、例えば、モデムやLANアダプタなどを採用することができる。
また、情報処理装置101の管理者が、情報処理装置101を直接操作する場合、情報処理装置101は、ディスプレイ、キーボード、マウスといったハードウェアを有してもよい。
図4は、情報処理装置101のソフトウェア構成例を示す説明図である。図4では、複数の情報処理装置101上で動作するソフトウェアについて説明する。複数の情報処理装置101の情報処理装置101−1、2には、それぞれのコンテナ111−1〜4内で、ブロックチェーンメインプロセス112と、スマートコントラクトアプリ113とが動作する。
ここで、各情報処理装置101上で動作するブロックチェーンメインプロセス112は、全て同一のプログラムである。これにより、複数の情報処理装置101のいくつかの情報処理装置101に不具合が発生したとしても、残った情報処理装置101上のブロックチェーンメインプロセス112によって、システム200の運用を継続することができる。従って、システム200の可用性を向上させることができる。
図5は、情報処理装置101の機能構成例を示す説明図である。情報処理装置101は、制御部500を有する。制御部500は、受け付け部501と、取得部502と、格納部503と、実行部504と、書き込み部505と、送信部506とを含む。制御部500は、記憶装置に記憶されたプログラムをCPU301が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図3に示したROM302、RAM303、ディスク305などである。また、各部の処理結果は、RAM303や、CPU301のレジスタ、CPU301のキャッシュメモリ等に格納される。
受け付け部501は、スマートコントラクトアプリ113から、差分更新要求を受け付ける。また、受け付け部501は、スマートコントラクトアプリ113から、差分更新要求を複数含む一括更新要求を受け付ける。以下、差分更新要求を、「INC命令」と呼称する。同様に、一括更新要求を、「SUBTRAN命令」と呼称する。SUBTRAN命令には、INC命令の他にも、PUT_STATEが含まれてもよい。
INC命令には、図1で示したように、記憶部120内の記憶領域の識別情報と、四則演算またはビット演算のうちのいずれかの演算を示す情報と、記憶部120内の記憶領域に格納された値に対する差分値とを含む。記憶部120は、例えば、RAM303である。以下の記載では、説明の簡略化のため、記憶部120内の記憶領域は、変数が設定されているものとする。
まず、INC命令を受け付けた場合について説明する。受け付け部501がINC命令を受け付けたことに応じて、取得部502は、INC命令から特定される変数の値を記憶部120から取得する。
実行部504は、取得部502が取得した値に対して、差分値を引数としてINC命令から特定されるいずれかの演算を実行する。
書き込み部505は、実行部504による前述のいずれかの演算の演算結果が成功を示す場合、前述の演算結果により得られる前述のいずれかの演算の出力値を、INC命令から特定される変数に書き込む。
送信部506は、前述のいずれかの演算の演算結果に基づくINC命令の応答情報を、スマートコントラクトアプリ113に送信する。以下、応答情報を、「RESPONSE」と記載する。RESPONSEは、例えば、差分更新が成功したことを示す識別子、または、差分更新が失敗したことを示す識別子である。
次に、SUBTRAN命令を受け付けた場合について説明する。受け付け部501がSUBTRAN命令を受け付けたことに応じて、取得部502は、SUBTRAN命令に含まれる複数のINC命令の各INC命令に対応して、各INC命令から特定される変数に格納された値を記憶部120から取得する。
実行部504は、各INC命令に対応して、取得した各INC命令から特定される記憶領域に格納された値に、各INC命令に含まれる差分値を引数として各INC命令から特定されるいずれかの演算を実行する。
書き込み部505は、各INC命令から特定されるいずれかの演算の演算結果が成功を示す場合、各INC命令から特定される演算結果により得られる前述のいずれかの演算の出力値を、各INC命令から特定される変数に書き込む。
送信部506は、各INC命令から特定されるいずれかの演算の演算結果を集約したSUBTRAN命令のRESPONSEを、スマートコントラクトアプリ113に送信する。ここで、演算結果を集約したとは、各演算結果を1つの情報にまとめたことを示す。具体的には、演算結果を集約したSUBTRAN命令のRESPONSEは、例えば、複数のINC命令が全て成功したことを示す識別子、または、複数のINC命令の少なくともいずれか一つが失敗したことを示す識別子である。
また、SUBTRAN命令において、ブロックチェーンメインプロセス112は、スマートコントラクトアプリ113がロールバックせずに、ブロックチェーンメインプロセス112自身がロールバックする機能を有することができる。ブロックチェーンメインプロセス112自身がロールバックする機能を有する場合には、格納部503が、取得した各INC命令から特定される変数の値を、該当の変数とは異なる他の記憶領域に格納してもよい。他の記憶領域は、例えば、RAM303である。
そして、各INC命令から特定されるいずれかの演算の演算結果の少なくともいずれか一つが失敗を示したとする。この場合、書き込み部505は、前述の他の記憶領域に格納した値を各INC命令から特定される変数に書き込む。このように、書き込み部505は、各INC命令から特定されるいずれかの演算のうちの少なくともいずれか一つが失敗した場合、バックアップした値を用いてロールバックする。ここで、ロールバックする機会としては、各INC命令から特定されるいずれかの演算のうちの少なくともいずれか一つが失敗した場合に限らない。例えば、各INC命令から特定されるいずれかの演算が成功しても、変数の書き込みに失敗した場合には、書き込み部505は、ロールバックを行う。
また、演算結果の少なくともいずれか一つが失敗を示した場合、送信部506は、各INC命令から特定されるいずれかの演算が失敗したことを示す情報をSUBTRANのRESPONSEとして、スマートコントラクトアプリ113に送信する。
また、SUBTRAN命令には、1以上のINC命令と、書き込み要求としてPUT_STATEが含まれてもよい。PUT_STATEには、記憶部120の変数名と、該当の変数に書き込む値とが含まれる。SUBTRAN命令にPUT_STATEが含まれる場合、格納部503は、書き込み要求から特定される変数の値を、該当の変数とは異なる他の記憶領域に格納する。
そして、1以上のINC命令の各INC命令から特定されるいずれかの演算の演算結果の少なくともいずれか一つが失敗を示したとする。この場合、書き込み部505は、該当の他の記憶領域に格納した値を書き込み要求から特定される変数に書き込む。また、演算結果のいずれか一つが失敗を示した場合、送信部506は、前述の各INC命令から特定されるいずれかの演算が失敗したことを示す情報をSUBTRAN命令のRESPONSEとして、スマートコントラクトアプリ113に送信する。
次に、GET_STATE、PUT_STATEを使用する際と、差分更新機能を使用する際と、差分更新機能および一括更新機能を使用する際とにおける、リモートトランザクション方式のシーケンスについて、図6〜図8を用いて説明する。ここで、図6〜図8では、全ての処理が成功した場合の一連の処理を示す。また、図6に示すGET_STATE、PUT_STATEを使用するスマートコントラクトアプリ113は、スマートコントラクトアプリ113aとする。また、図7に示す差分更新機能を使用するスマートコントラクトアプリ113は、スマートコントラクトアプリ113bとする。また、図8に示す差分更新機能および一括更新機能を使用するスマートコントラクトアプリ113は、スマートコントラクトアプリ113cとする。また、図6〜図8で用いる「K」は、変数ではなく、ある値である。
図6は、GET_STATE、PUT_STATEを使用する際のリモートトランザクション方式のシーケンスを示す説明図である。ブロックチェーンメインプロセス112は、TRANSACTIONを、スマートコントラクトアプリ113aに送信する(ステップS601)。TRANSACTIONを受け付けたスマートコントラクトアプリ113aは、GET_STATE(A)をブロックチェーンメインプロセス112に送信する(ステップS602)。GET_STATE(A)を受け付けたブロックチェーンメインプロセス112は、RESPONSEをスマートコントラクトアプリ113aに送信する(ステップS603)。ここで、GET_STATE()に対するRESPONSEは、読み出し成功であれば読み出した値となり、読み出し失敗であれば失敗したことを示す識別子となる。
RESPONSEとしてAの値を受け付けたスマートコントラクトアプリ113aは、A=A−Kを実行する(ステップS604)。そして、スマートコントラクトアプリ113aは、演算結果となるAを引数として、PUT_STATE(A)をブロックチェーンメインプロセス112に送信する(ステップS605)。
PUT_STATE(A)を受け付けたブロックチェーンメインプロセス112は、key−value set(A)を実行し(ステップS606)、RESPONSEをスマートコントラクトアプリ113aに送信する(ステップS607)。ここで、PUT_STATE()に対するRESPONSEは、書き込みが成功したか否かを示す識別子となる。
RESPONSEとして、書き込みが成功したことを示す識別子を受け付けたスマートコントラクトアプリ113aは、GET_STATE(B)をブロックチェーンメインプロセス112に送信する(ステップS608)。GET_STATE(B)を受け付けたブロックチェーンメインプロセス112は、RESPONSEをスマートコントラクトアプリ113aに送信する(ステップS609)。
RESPONSEとしてBの値を受け付けたスマートコントラクトアプリ113aは、B=B+Kを実行する(ステップS610)。そして、スマートコントラクトアプリ113aは、演算結果となるBを引数として、PUT_STATE(B)をブロックチェーンメインプロセス112に送信する(ステップS611)。
PUT_STATE(B)を受け付けたブロックチェーンメインプロセス112は、key−value set(B)を実行し(ステップS612)、RESPONSEをスマートコントラクトアプリ113aに送信する(ステップS613)。RESPONSEとして、書き込みが成功したことを示す識別子を受け付けたスマートコントラクトアプリ113aは、COMPLETEDをブロックチェーンメインプロセス112に送信する(ステップS614)。ここで、COMPLETEDは、TRANSACTIONの処理が終了したことを通知する命令である。
以上により、GET_STATE、PUT_STATEを使用する際のリモートトランザクション方式のシーケンスでは、ブロックチェーンメインプロセス112とスマートコントラクトアプリ113aとの間の要求数が5往復となる。
図7は、差分更新機能を使用する際のリモートトランザクション方式のシーケンスを示す説明図である。図7で示すように、スマートコントラクトアプリ113bのコードには、スマートコントラクトアプリ113bの開発者等によって記載された「INC(Aの変数名,「−」,K)」と、「INC(Bの変数名,「+」,K)」とが含まれる。
ブロックチェーンメインプロセス112は、TRANSACTIONを、スマートコントラクトアプリ113bに送信する(ステップS701)。TRANSACTIONを受け付けたスマートコントラクトアプリ113bは、INC(Aの変数名,「−」,K)をブロックチェーンメインプロセス112に送信する(ステップS702)。
INC(Aの変数名,「−」,K)を受け付けたブロックチェーンメインプロセス112は、A=A−Kを実行し(ステップS703)、key−value set(A)を実行し(ステップS704)、RESPONSEをスマートコントラクトアプリ113bに送信する(ステップS705)。INC()を受け付けた際のブロックチェーンメインプロセス112の具体的な処理手順については、図11で説明する。ここで、INC()に対するRESPONSEは、差分更新が成功したか否かを示す識別子となる。
RESPONSEとして差分更新が成功したことを示す識別子を受け付けたスマートコントラクトアプリ113bは、INC(Bの変数名,「+」,K)をブロックチェーンメインプロセス112に送信する(ステップS706)。
INC(Bの変数名,「+」,K)を受け付けたブロックチェーンメインプロセス112は、B=B+Kを実行し(ステップS707)、key−value set(B)を実行し(ステップS708)、RESPONSEをスマートコントラクトアプリ113bに送信する(ステップS709)。
RESPONSEとして差分更新が成功したことを示す識別子を受け付けたスマートコントラクトアプリ113bは、COMPLETEDをブロックチェーンメインプロセス112に送信する(ステップS710)。
以上により、差分更新機能を使用する際のリモートトランザクション方式のシーケンスでは、ブロックチェーンメインプロセス112とスマートコントラクトアプリ113bとの間の要求数が3往復となる。
図8は、差分更新機能および一括更新機能を使用する際のリモートトランザクション方式のシーケンスを示す説明図である。図8で示すように、スマートコントラクトアプリ113cのコードには、スマートコントラクトアプリ113cの開発者等によって記載された「SUBTRAN{INC(Aの変数名,「−」,K);INC(Bの変数名,「+」,K)}」が含まれる。
ブロックチェーンメインプロセス112は、TRANSACTIONを、スマートコントラクトアプリ113cに送信する(ステップS801)。TRANSACTIONを受け付けたスマートコントラクトアプリ113cは、SUBTRAN{INC(Aの変数名,「−」,K);INC(Bの変数名,「+」,K)}を送信する(ステップS802)。
SUBTRAN{INC(Aの変数名,「−」,K);INC(Bの変数名,「+」,K)}を受け付けたブロックチェーンメインプロセス112は、SUBTRAN{}の引数に設定された命令を順次実行する。すなわち、SUBTRAN{}の第1引数であるINC(Aの変数名,「−」,K)によって、ブロックチェーンメインプロセス112は、A=A−Kを実行し(ステップS803)、key−value set(A)を実行する(ステップS805)。また、SUBTRAN{}の第2引数であるINC(Bの変数名,「+」,K)によって、ブロックチェーンメインプロセス112は、B=B+Kを実行し(ステップS804)、key−value set(B)を実行する(ステップS806)。ここで、図8で示すように、ブロックチェーンメインプロセス112は、SUBTRAN{}の各引数に設定された各命令に依存関係がなければ、各命令を並列に実行してもよい。
各引数に設定された各命令が全て成功したブロックチェーンメインプロセス112は、RESPONSEをスマートコントラクトアプリ113cに送信する(ステップS807)。ここで、SUBTRAN{}に対するRESPONSEは、各引数に設定された各命令が全て成功したことを示す識別子か、各引数に設定された各命令の少なくともいずれか一つが失敗したことを示す識別子となる。
RESPONSEとして、各引数で指定される各命令が全て成功したことを示す識別子を受け付けたスマートコントラクトアプリ113cは、COMPLETEDをブロックチェーンメインプロセス112に送信する(ステップS808)。
以上により、差分更新機能および一括更新機能を使用する際のリモートトランザクション方式のシーケンスでは、ブロックチェーンメインプロセス112とスマートコントラクトアプリ113cとの間の要求数が2往復となる。このように、差分更新機能および一括更新機能を使用することにより、GET、PUTを使用する際と比較して、要求数を2/5に削減でき、性能としては2.5倍に向上することができる。
次に、GET、PUTを使用する際と、差分更新機能および一括更新機能を使用する際とにおけるロールバック処理の一例について、図9を用いて説明する。
図9は、ロールバック処理の一例を示す説明図である。図9の上部で示すスマートコントラクトアプリ113aは、図6で示したスマートコントラクトアプリ113aのコードの一部を、疑似的なコードで表示したものである。同様に、図9の下部で示すスマートコントラクトアプリ113cは、図8で示したスマートコントラクトアプリ113cのコードの一部を、疑似的なコードで表示したものである。
図9で示すスマートコントラクトアプリ113aのコード901〜903を実行することにより、それぞれ、ステップS610、S611、S614の処理が実行される。そして、RESPONSEとして書き込みが失敗したことを示す識別子を受け付けた場合に実行される、スマートコントラクトアプリ113aのコード904である「Aの値を戻す処理」が、Aのロールバック処理となる。
ここで、Aの値を戻す処理としては、例えば、Aの更新前の値を記憶しておき、Aの元の値を用いてPUT_STATE(A)を送信する処理である。
一方、図9で示すスマートコントラクトアプリ113cのコード911、912を実行することにより、それぞれ、ステップS802、S808の処理が実行される。RESPONSEとして書き込みが失敗したことを示す識別子を受け付けた場合、Aの値は、ブロックチェーンメインプロセス112によりロールバックされるため、スマートコントラクトアプリ113cは、Aのロールバック処理を行わなくてよい。
次に、ブロックチェーンメインプロセス112が行う処理を、図10、図11を用いて説明する。
図10は、INC命令受け付け時処理手順の一例を示すフローチャートである。ブロックチェーンメインプロセス112は、INC(変数名,演算子,値)を受け付ける(ステップS1001)。次に、ブロックチェーンメインプロセス112は、第1引数に設定された変数名に対応する変数の値を取得する(ステップS1002)。そして、ブロックチェーンメインプロセス112は、取得した値に対して、第3引数に設定された値を引数として、第2引数に設定された演算子に対応する演算を実行する(ステップS1003)。次に、ブロックチェーンメインプロセス112は、演算結果が成功を示せば、演算して得られた値を、第1引数に設定された変数に書き込む(ステップS1004)。そして、ブロックチェーンメインプロセス112は、INC()の送信元に、差分更新に成功したか否かを示す識別子をRESPONSEとして送信する(ステップS1005)。ステップS1005の処理終了後、ブロックチェーンメインプロセス112は、INC命令受け付け時処理を終了する。
図11は、SUBTRAN命令受け付け時処理手順の一例を示すフローチャートである。ブロックチェーンメインプロセス112は、SUBTRAN{命令1,命令2,…,命令n}を受け付ける(ステップS1101)。命令1,命令2,…,命令nは、例えば、INC命令であったり、PUT_STATEであったりする。次に、ブロックチェーンメインプロセス112は、命令1,命令2,…,命令n内で更新される変数の値をバックアップする(ステップS1102)。
そして、ブロックチェーンメインプロセス112は、変数iに1を代入する(ステップS1103)。次に、ブロックチェーンメインプロセス112は、第i引数に設定された命令を実行する(ステップS1104)。ステップS1104において、例えば、第i引数に設定された命令がINC命令であれば、ブロックチェーンメインプロセス112は、ステップS1002〜S1004の処理を実行する。
そして、ブロックチェーンメインプロセス112は、第i引数に設定された命令の実行結果が成功か否かを判断する(ステップS1105)。第i引数に設定された命令の実行結果が成功である場合(ステップS1105:Yes)、ブロックチェーンメインプロセス112は、変数iの値を1インクリメントし(ステップS1106)、iがnより大きいか否かを判断する(ステップS1107)。iがn以下である場合(ステップS1107:No)、ブロックチェーンメインプロセス112は、ステップS1104の処理に移行する。
一方、iがnより大きい場合(ステップS1107:Yes)、各引数に設定された命令が全て成功したことになるため、ブロックチェーンメインプロセス112は、SUBTRAN{}の送信元に、各引数に設定された命令が全て成功したことを示す識別子をRESPONSEとして送信する(ステップS1108)。
一方、第i引数に設定された命令の実行結果が成功でない場合(ステップS1105:No)、ブロックチェーンメインプロセス112は、バックアップした値を用いて、命令1,命令2,…,命令n内で更新された変数の値を、更新前の値に更新する(ステップS1109)。次に、ブロックチェーンメインプロセス112は、SUBTRAN{}の送信元に、各引数に設定された各命令の少なくともいずれか一つが失敗したことを示す識別子をRESPONSEとして送信する(ステップS1110)。
ステップS1108またはステップS1110の処理終了後、ブロックチェーンメインプロセス112は、SUBTRAN命令受け付け時処理を終了する。
以上説明したように、ブロックチェーンメインプロセス112は、INC命令を受けたら、変数の値に前述の差分値を用いて前述のいずれかの演算を行いスマートコントラクトアプリ113に応答する。これにより、ブロックチェーンメインプロセス112は、限定された演算しかしないため、セキュリティを維持したまま要求数を減らすことができる。そして、スマートコントラクトアプリ113のトランザクション内における要求数を減らすことにより、ブロックチェーンメインプロセス112は、依存関係があったとしてもスマートコントラクトアプリ113を高速実行して、全体の処理時間を短縮できる。
また、ブロックチェーンメインプロセス112は、SUBTRAN命令を受け付けたら、SUBTRAN命令に含まれる各命令を実行し、各命令の演算結果に基づくSUBTRAN命令のRESPONSEを、スマートコントラクトアプリ113に送信してもよい。これにより、ブロックチェーンメインプロセス112は、SUBTRAN命令を使用しない場合に発生する、命令の数分の要求数を、1に削減することができる。
また、ブロックチェーンメインプロセス112は、受け付けたSUBTRAN命令に含まれる各命令によって更新される変数の値をバックアップし、前述の各命令のいずれかが失敗した際に、バックアップした値によりロールバックしてもよい。これにより、スマートコントラクトアプリ113がロールバックしなくてよくなるため、ブロックチェーンメインプロセス112は、スマートコントラクトアプリ113のロールバックによる要求を削減することができる。さらに、スマートコントラクトアプリ113のロールバックを記述しなくてよい分、スマートコントラクトアプリ113の開発者の手間を削減することができる。
また、SUBTRAN命令には、複数の更新系の命令があればよいため、例えば、2以上のPUT_STATEが含まれてもよい。また、SUBTRAN命令には、1以上のINC命令と、1以上のPUT_STATEが含まれてもよい。
なお、本実施の形態で説明した情報処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本実施の形態にかかるプログラムは、ハードディスク、フレキシブルディスク、CD−ROM(Compact Disc−Read Only Memory)、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本実施の形態にかかるプログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)コンテナ型仮想化または仮想マシンまたはコンピュータによって生成されており記憶部にアクセス可能なプロセスを動作させる前記コンピュータに、
コンテナ型仮想化または仮想マシンまたは他のコンピュータによって生成されており前記記憶部にアクセス可能でない他のプロセスから、前記記憶部内の記憶領域の識別情報と、四則演算またはビット演算のうちのいずれかの演算を示す情報と、前記記憶領域に格納された値に対する差分値とを含む差分更新要求を前記プロセスが受け付けたことに応じて、前記プロセスによって、前記記憶領域に格納された値に対して、前記差分値を引数として前記いずれかの演算を実行し、
前記プロセスによって、前記いずれかの演算の演算結果が成功を示す場合、前記演算結果により得られる前記いずれかの演算の出力値を、前記記憶領域に書き込み、
前記プロセスによって、前記いずれかの演算の演算結果に基づく前記差分更新要求の応答情報を、前記他のプロセスに送信する、
処理を実行させることを特徴とするプログラム。
(付記2)前記実行する処理は、
前記他のプロセスから、前記差分更新要求を複数含む一括更新要求を受け付けたことに応じて、前記一括更新要求に含まれる複数の差分更新要求の各差分更新要求に対応して、前記各差分更新要求から特定される記憶領域に格納された値に対して、前記各差分更新要求に含まれる差分値を引数として前記各差分更新要求から特定されるいずれかの演算を実行し、
前記書き込む処理は、
前記各差分更新要求から特定されるいずれかの演算の演算結果が成功を示す場合、当該演算結果により得られる当該いずれかの演算の出力値を、前記各差分更新要求から特定される記憶領域に書き込み、
前記送信する処理は、
前記各差分更新要求から特定されるいずれかの演算の演算結果を集約した前記一括更新要求の応答情報を、前記他のプロセスに送信する、
ことを特徴とする付記1に記載のプログラム。
(付記3)前記コンピュータに、
前記プロセスによって、前記各差分更新要求に対応して、取得した前記各差分更新要求から特定される記憶領域に格納された値を、当該記憶領域とは異なる他の記憶領域に格納する、処理を実行させ、
前記書き込む処理は、
前記各差分更新要求から特定されるいずれかの演算の演算結果の少なくともいずれか一つが失敗を示す場合、前記他の記憶領域に格納した値を前記各差分更新要求から特定される記憶領域に書き込み、
前記送信する処理は、
前記各差分更新要求から特定されるいずれかの演算の演算結果の少なくともいずれか一つが失敗を示す場合、前記各差分更新要求から特定されるいずれかの演算が失敗したことを示す情報を前記一括更新要求の応答情報として、前記他のプロセスに送信する、
ことを特徴とする付記2に記載のプログラム。
(付記4)前記コンピュータに、
前記プロセスによって、前記一括更新要求に、前記記憶部内の記憶領域の識別情報および当該記憶領域に書き込む値と、1以上の差分更新要求とを含む書き込み要求が含まれる場合、前記書き込み要求から特定される記憶領域に格納された値を、当該記憶領域とは異なる他の記憶領域に格納する、処理を実行させ、
前記書き込む処理は、
前記1以上の差分更新要求の各差分更新要求から特定されるいずれかの演算の演算結果の少なくともいずれか一つが失敗を示す場合、当該他の記憶領域に格納した値を前記書き込み要求から特定される記憶領域に書き込み、
前記送信する処理は、
当該各差分更新要求から特定されるいずれかの演算の演算結果の少なくともいずれか一つが失敗を示す場合、当該各差分更新要求から特定されるいずれかの演算が失敗したことを示す情報を前記一括更新要求の応答情報として、前記他のプロセスに送信する、
ことを特徴とする付記2または3に記載のプログラム。
(付記5)コンテナ型仮想化または仮想マシンまたは情報処理装置によって生成されており記憶部にアクセス可能なプロセスを動作させる前記情報処理装置において、
コンテナ型仮想化または仮想マシンまたは他のコンピュータによって生成されており前記記憶部にアクセス可能でない他のプロセスから、前記記憶部内の記憶領域の識別情報と、四則演算またはビット演算のうちのいずれかの演算を示す情報と、前記記憶領域に格納された値に対する差分値とを含む差分更新要求を前記プロセスが受け付けたことに応じて、前記プロセスによって、前記記憶領域に格納された値に対して、前記差分値を引数として前記いずれかの演算を実行し、
前記プロセスによって、前記いずれかの演算の演算結果が成功を示す場合、前記演算結果により得られる前記いずれかの演算の出力値を、前記記憶領域に書き込み、
前記プロセスによって、前記いずれかの演算の演算結果に基づく前記差分更新要求の応答情報を、前記他のプロセスに送信する、
制御部を有することを特徴とする情報処理装置。
(付記6)コンテナ型仮想化または仮想マシンまたはコンピュータによって生成されており記憶部にアクセス可能なプロセスを動作させる前記コンピュータが、
コンテナ型仮想化または仮想マシンまたは他のコンピュータによって生成されており前記記憶部にアクセス可能でない他のプロセスから、前記記憶部内の記憶領域の識別情報と、四則演算またはビット演算のうちのいずれかの演算を示す情報と、前記記憶領域に格納された値に対する差分値とを含む差分更新要求を前記プロセスが受け付けたことに応じて、前記プロセスによって、前記記憶領域に格納された値に対して、前記差分値を引数として前記いずれかの演算を実行し、
前記プロセスによって、前記いずれかの演算の演算結果が成功を示す場合、前記演算結果により得られる前記いずれかの演算の出力値を、前記記憶領域に書き込み、
前記プロセスによって、前記いずれかの演算の演算結果に基づく前記差分更新要求の応答情報を、前記他のプロセスに送信する、
処理を実行することを特徴とする情報処理方法。
101 情報処理装置
111 コンテナ
112 ブロックチェーンメインプロセス
113 スマートコントラクトアプリ
120 記憶部
500 制御部
501 受け付け部
502 取得部
503 格納部
504 実行部
505 書き込み部
506 送信部

Claims (5)

  1. 記憶部を有するコンピュータに、
    前記記憶部への書き込み要求、前記記憶部への読み出し要求、および、前記記憶部内の記憶領域の識別情報と、四則演算またはビット演算のうちのいずれかの演算を示す情報と、前記記憶領域に格納された値に対する差分値とを含む差分更新要求に限り受付可能に、コンテナ型仮想化によって生成されており前記記憶部にアクセス可能なプロセスを前記コンピュータ上で動作させ
    コンテナ型仮想化によって生成されており前記記憶部にアクセス可能でない他のプロセスを前記コンピュータ上で動作させ、
    前記他のプロセスから、前記差分更新要求を前記プロセスが受け付けたことに応じて、前記プロセスによって、前記記憶領域に格納された値に対して、前記差分値を引数として前記いずれかの演算を実行し、
    前記プロセスによって、前記いずれかの演算の演算結果が成功を示す場合、前記演算結果により得られる前記いずれかの演算の出力値を、前記記憶領域に書き込み、
    前記プロセスによって、前記いずれかの演算の演算結果に基づく前記差分更新要求の応答情報を、前記他のプロセスに送信する、
    処理を実行させることを特徴とするプログラム。
  2. 前記実行する処理は、
    前記他のプロセスから、前記差分更新要求を複数含む一括更新要求を受け付けたことに応じて、前記一括更新要求に含まれる複数の差分更新要求の各差分更新要求に対応して、前記各差分更新要求から特定される記憶領域に格納された値に対して、前記各差分更新要求に含まれる差分値を引数として前記各差分更新要求から特定されるいずれかの演算を実行し、
    前記書き込む処理は、
    前記各差分更新要求から特定されるいずれかの演算の演算結果が成功を示す場合、当該演算結果により得られる当該いずれかの演算の出力値を、前記各差分更新要求から特定される記憶領域に書き込み、
    前記送信する処理は、
    前記各差分更新要求から特定されるいずれかの演算の演算結果を集約した前記一括更新要求の応答情報を、前記他のプロセスに送信する、
    ことを特徴とする請求項1に記載のプログラム。
  3. 前記コンピュータに、
    前記プロセスによって、前記各差分更新要求に対応して、取得した前記各差分更新要求から特定される記憶領域に格納された値を、当該記憶領域とは異なる他の記憶領域に格納する、処理を実行させ、
    前記書き込む処理は、
    前記各差分更新要求から特定されるいずれかの演算の演算結果の少なくともいずれか一つが失敗を示す場合、前記他の記憶領域に格納した値を前記各差分更新要求から特定される記憶領域に書き込み、
    前記送信する処理は、
    前記各差分更新要求から特定されるいずれかの演算の演算結果の少なくともいずれか一つが失敗を示す場合、前記各差分更新要求から特定されるいずれかの演算が失敗したことを示す情報を前記一括更新要求の応答情報として、前記他のプロセスに送信する、
    ことを特徴とする請求項2に記載のプログラム。
  4. 記憶部を有する情報処理装置において、
    前記記憶部への書き込み要求、前記記憶部への読み出し要求、および、前記記憶部内の記憶領域の識別情報と、四則演算またはビット演算のうちのいずれかの演算を示す情報と、前記記憶領域に格納された値に対する差分値とを含む差分更新要求に限り受付可能に、コンテナ型仮想化によって生成されており前記記憶部にアクセス可能なプロセスを前記情報処理装置上で動作させ
    コンテナ型仮想化によって生成されており前記記憶部にアクセス可能でない他のプロセスを前記情報処理装置上で動作させ、
    前記他のプロセスから、前記差分更新要求を前記プロセスが受け付けたことに応じて、前記プロセスによって、前記記憶領域に格納された値に対して、前記差分値を引数として前記いずれかの演算を実行し、
    前記プロセスによって、前記いずれかの演算の演算結果が成功を示す場合、前記演算結果により得られる前記いずれかの演算の出力値を、前記記憶領域に書き込み、
    前記プロセスによって、前記いずれかの演算の演算結果に基づく前記差分更新要求の応答情報を、前記他のプロセスに送信する、
    制御部を有することを特徴とする情報処理装置。
  5. 記憶部を有するコンピュータが、
    前記記憶部への書き込み要求、前記記憶部への読み出し要求、および、前記記憶部内の記憶領域の識別情報と、四則演算またはビット演算のうちのいずれかの演算を示す情報と、前記記憶領域に格納された値に対する差分値とを含む差分更新要求に限り受付可能に、コンテナ型仮想化によって生成されており前記記憶部にアクセス可能なプロセスを前記コンピュータ上で動作させ
    コンテナ型仮想化によって生成されており前記記憶部にアクセス可能でない他のプロセスを前記コンピュータ上で動作させ、
    前記他のプロセスから、前記差分更新要求を前記プロセスが受け付けたことに応じて、前記プロセスによって、前記記憶領域に格納された値に対して、前記差分値を引数として前記いずれかの演算を実行し、
    前記プロセスによって、前記いずれかの演算の演算結果が成功を示す場合、前記演算結果により得られる前記いずれかの演算の出力値を、前記記憶領域に書き込み、
    前記プロセスによって、前記いずれかの演算の演算結果に基づく前記差分更新要求の応答情報を、前記他のプロセスに送信する、
    処理を実行することを特徴とする情報処理方法。
JP2016251415A 2016-12-26 2016-12-26 プログラム、情報処理装置、および情報処理方法 Active JP6888295B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016251415A JP6888295B2 (ja) 2016-12-26 2016-12-26 プログラム、情報処理装置、および情報処理方法
US15/851,777 US11074000B2 (en) 2016-12-26 2017-12-22 Non-transitory computer-readable storage medium, and information processing device and method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016251415A JP6888295B2 (ja) 2016-12-26 2016-12-26 プログラム、情報処理装置、および情報処理方法

Publications (2)

Publication Number Publication Date
JP2018106386A JP2018106386A (ja) 2018-07-05
JP6888295B2 true JP6888295B2 (ja) 2021-06-16

Family

ID=62630007

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016251415A Active JP6888295B2 (ja) 2016-12-26 2016-12-26 プログラム、情報処理装置、および情報処理方法

Country Status (2)

Country Link
US (1) US11074000B2 (ja)
JP (1) JP6888295B2 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11611445B2 (en) * 2017-02-17 2023-03-21 Nokia Technologies Oy Changing smart contracts recorded in block chains
US10460283B2 (en) * 2017-09-13 2019-10-29 Vijay Madisetti Smart contract optimization for multiparty service or product ordering system
KR101880175B1 (ko) * 2018-02-13 2018-07-19 주식회사 마크로젠 복수의 블록체인에 기반을 둔 생명정보 데이터 제공 방법, 생명정보 데이터 저장 방법 및 생명정보 데이터 전송 시스템
CN108629583A (zh) * 2018-04-16 2018-10-09 上海分赋信息科技有限公司 基于分布式技术实现数字资产在映射链上的映射系统及相应方法
US10432405B1 (en) 2018-09-05 2019-10-01 Accelor Ltd. Systems and methods for accelerating transaction verification by performing cryptographic computing tasks in parallel
US10404473B1 (en) 2018-09-05 2019-09-03 Accelor Ltd. Systems and methods for processing transaction verification operations in decentralized applications
CN111008222A (zh) * 2018-10-08 2020-04-14 顺丰科技有限公司 数据状态查询方法和装置
US10333694B1 (en) * 2018-10-15 2019-06-25 Accelor Ltd. Systems and methods for secure smart contract execution via read-only distributed ledger
CN109413178B (zh) * 2018-10-21 2021-03-05 浙江数值跳跃网络科技有限公司 一种基于物联网的区块链数据收录方法及数据收录系统
CN109995585B (zh) * 2019-03-22 2021-12-31 杭州复杂美科技有限公司 一种异常处理方法、设备和存储介质
JP7221799B2 (ja) * 2019-05-31 2023-02-14 株式会社日立製作所 情報処理システム、及び情報処理システムの制御方法
WO2021125106A1 (ja) * 2019-12-19 2021-06-24 パナソニック インテレクチュアル プロパティ コーポレーション オブ アメリカ 制御方法、装置、および、プログラム
JP6797450B1 (ja) * 2020-06-04 2020-12-09 みんな電力株式会社 電力取引支援システム、電力取引支援方法及びプログラム

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05113879A (ja) * 1991-10-23 1993-05-07 T A S Tsusho Kk プログラムの作成及びデータの処理方法
JPH05298497A (ja) * 1992-02-18 1993-11-12 Oki Electric Ind Co Ltd Icカードの情報処理方法
JP3321374B2 (ja) * 1996-11-15 2002-09-03 株式会社エヌ・ティ・ティ・データ Icカード
JP4330911B2 (ja) * 2002-10-08 2009-09-16 株式会社コナミデジタルエンタテインメント ポイント連携システム
JP4471204B2 (ja) * 2004-06-30 2010-06-02 キヤノンマーケティングジャパン株式会社 情報処理システムおよび文書管理装置および情報処理方法およびプログラムおよび記録媒体
JP2010050728A (ja) * 2008-08-21 2010-03-04 Kyocera Mita Corp 画像形成装置、及び、画像形成システム
US8601000B1 (en) * 2011-06-27 2013-12-03 Amazon Technologies, Inc. System and method for conditionally updating an item with attribute granularity
US10261814B2 (en) * 2014-06-23 2019-04-16 Intel Corporation Local service chaining with virtual machines and virtualized containers in software defined networking
US20170243222A1 (en) * 2016-02-22 2017-08-24 Bank Of America Corporation System for use of secure data from a process data network as secured access by users
US10185550B2 (en) * 2016-09-28 2019-01-22 Mcafee, Inc. Device-driven auto-recovery using multiple recovery sources
US10586210B2 (en) * 2016-11-30 2020-03-10 International Business Machines Corporation Blockchain checkpoints and certified checkpoints
US10972475B1 (en) * 2020-01-29 2021-04-06 Capital One Services, Llc Account access security using a distributed ledger and/or a distributed file system

Also Published As

Publication number Publication date
US11074000B2 (en) 2021-07-27
US20180181309A1 (en) 2018-06-28
JP2018106386A (ja) 2018-07-05

Similar Documents

Publication Publication Date Title
JP6888295B2 (ja) プログラム、情報処理装置、および情報処理方法
US10809916B2 (en) Instance recovery using bloom filters
CN104508663A (zh) 会话失败后的自动事务重试
US20180025049A1 (en) Server and Data Processing Method
US10901804B2 (en) Apparatus and method to select services for executing a user program based on a code pattern included therein
CN102591716B (zh) 数据项管理器
WO2015126411A1 (en) Migrating cloud resources
US11327905B2 (en) Intents and locks with intent
EP3772691A1 (en) Database server device, server system and request processing method
US11605033B2 (en) Quantum computing task translation supporting multiple quantum computing technologies
US20180322301A1 (en) Commit and rollback of data streams provided by partially trusted entities
CN114936256A (zh) 在区块链中执行交易的方法和区块链节点
CN102959499B (zh) 计算机系统、存储卷管理方法
WO2020063002A1 (zh) 一种数据管理方法、装置和服务器
KR102446213B1 (ko) 블록체인 변환 방법 및 장치
JP6766962B2 (ja) 変更手順生成装置、変更手順生成方法および変更手順生成プログラム
US10678515B1 (en) Simplifying and reusing visual programming graphs
CN113010115A (zh) 区块链节点中的数据处理方法及相关设备
CN111786808A (zh) 云系统的迁移方法、装置和混合云系统
CN117149097B (zh) 一种分布式存储系统数据访问控制方法及装置
JP7296515B2 (ja) サービス提供システムおよびサービス提供方法
WO2010035480A1 (ja) 分散処理システム、分散処理方法およびプログラム
US11424982B2 (en) Remediation of a system to new desired state using configuration dependency graph
US20240061857A1 (en) Migration and validation of data from tabular structures to non-relational data stores
JP7284791B2 (ja) 分散トランザクションシステム及び分散トランザクションシステムにおける分散トランザクション処理方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190910

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200831

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200929

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201124

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210420

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210503

R150 Certificate of patent or registration of utility model

Ref document number: 6888295

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150