導航:首頁 > 文檔加密 > thrift數據加密

thrift數據加密

發布時間:2022-01-20 01:55:48

1. thrift的map和list怎麼轉成proto

Google放出來了Protocol buffers,一種用來部分替代xml的數據描述語言。Google就是Google,就算是推白菜出來,也一樣能讓人側目。其實protocol buffers也不是什麼新鮮的概念,且不說傳統的ASN.1, ICE這些有點類似的東西,facebook一年前就推出了thrift,應該說定位是非常的接近的。也有謠傳說是先有了protocol buffers在google內部流行,然後google的人跳槽到facebook,就出了thrift這個東西……呵呵,停止八卦,言歸正傳。 觀察法看到的優缺點 Thrift: 支持的語言更廣泛一些c++, java, python,ruby, csharp, haskell, ocmal, erlang, cocoa, php, squeak(真夠變態的) protobuf 目前還是只支持c++, java, python, 其他語言有待開發. Thrift提供的功能更豐富一些: Thrift提供了簡單的RPC構架(其實不簡單了, block, nonblock的都有了…..) protobuf好像一心一意做好自己的事情,只提供了序列化和反序列化的功能。

2. thrift struct怎麼實現繼承的效果

Apache Thrift 是一個跨語言的服務框架,本質上為RPC;當我們開發的service需要開放出去的時候,就會遇到跨語言調用的問題,JAVA語言開發了一個UserService用來提供獲取用戶信息的服務,如果服務消費端有PHP/Python/C++等,我們不可能為所有的語言都適配出相應的調用方式,有時候我們會很無奈的使用Http來作為訪問協議;但是如果服務消費端不能使用HTTP,而且更加傾向於 以操作本地API的方式 來使用服務,那麼我們就需要Thrift來提供支持.
本文以UserService為例,描述一下使用thrift的方式,以及其原理..
一. service.thrift
struct User{
1:i64 id,
2:string name,
3:i64 timestamp,
4:bool vip
}

service UserService{
User getById(1:i64 id)
}

二. 生成API文件
首先下載和安裝thrift客戶端,比如在windows平台下,下載thrift.exe,不過此處需要提醒,不同的thrift客戶端版本生成的API可能不兼容.本例使用thrift-0.9.0.exe;通過"--gen"指定生成API所適配的語言.本實例為生成java客戶端API.
//windows平台下,將API文件輸出在service目錄下(此目錄需要存在)
> thrift.exe --gen java -o service service.thrift

三. UserService實現類
public class UserServiceImpl implements UserService.Iface {
@Override
public User getById(long id){
System.out.println("invoke...id:" + id);
return new User();//for test
}
}

四.原理簡析
1. User.java : thrift生成API的能力還是非常的有限,比如在struct中只能使用簡單的數據類型(不支持Date,Collection<?>等),不過我們能從User中看出,它生成的類實現了"Serializable"介面和"TBase"介面.
其中Serializable介面表明這個類的實例是需要序列化之後在網路中傳輸的,為了不幹擾JAVA本身的序列化和反序列化機制,它還重寫了readObject和writeObject方法.不過這對thrift本身並沒有幫助.
TBase介面是thrift序列化和反序列化時使用的,它的兩個核心方法:read和write.在上述的thrift文件中,struct定義的每個屬性都有一個序號,比如:1:id,那麼thrift在序列化時,將會根據序號的順序依次將屬性的"名稱 + 值"寫入inputStream中,反序列化也是如此.(具體參見read和write的實現).
因為thrift的序列化和反序列化實例數據時,是根據"屬性序號"進行,這可以保證數據在inputstream和outputstream中順序是嚴格的.這一點也要求API開發者,如果更改了thrift文件中的struct定義,需要重新生成客戶端API,否則服務將無法繼續使用(可能報錯,也可能數據錯誤).thrift序列化/反序列化的過程和JAVA自帶的序列化機制不同,它將不會攜帶額外的class結構,此外thrift這種序列化機制更加適合網路傳輸,而且性能更加高效.
2. UserService.Client: 在生成的UserService中,有個Client靜態類,這個類就是一個典型的代理類,此類已經實現了UserService的所有方法.開發者需要使用Client類中的API方法與Thrift server端交互,它將負責與Thrift server的Socket鏈接中,發送請求和接收響應.

3. rpc框架:thrift 和protobuf有什麼區別

都是數據交換 , 整合多種語言 ,應用的解決方案。
性能都差不多.
相比較而言 , thrift 稍微強些. 支持的數據格式也多些.
支持的開發語言也比protobuf多些 .
目前只用過thrift. protobuf 倒沒有嘗試...都差不多.

4. thrift 可以定義泛型 嗎

thrift中的數據類型 下面是thrift本身對類型的重定義,看一下: bool Boolean, one byte byte Signed byte i16 Signed 16-bit integer i32 Signed 32-bit integer i64 Signed 64-bit integer double 64-bit floating point value string String

5. thrift不是一種rpc框架嗎,為什麼看到有人也用它做序列化

Apache Thrift 跨語言服務框架,本質RPC;我發service需要放候,遇跨語言調用問題,JAVA語言發UserService用提供獲取用戶信息服務,服務消費端PHP/Python/C++等,我能所語言都適配相應調用式,候我奈使用Http作訪問協議;服務消費端能使用HTTP,且更加傾向於 操作本API式 使用服務,我需要Thrift提供支持.
本文UserService例,描述使用thrift式,及其原理..
. service.thrift
struct User{
1:i64 id,
2:string name,
3:i64 timestamp,
4:bool vip
}

service UserService{
User getById(1:i64 id)
}

二. API文件
首先載安裝thrift客戶端,比windows平台,載thrift.exe,處需要提醒,同thrift客戶端版本API能兼容.本例使用thrift-0.9.0.exe;通"--gen"指定API所適配語言.本實例java客戶端API.
//windows平台,API文件輸service目錄(目錄需要存)
> thrift.exe --gen java -o service service.thrift

三. UserService實現類
public class UserServiceImpl implements UserService.Iface {
@Override
public User getById(long id){
System.out.println("invoke...id:" + id);
return new User();//for test
}
}

四.原理簡析
1. User.java : thriftAPI能力非限,比struct能使用簡單數據類型(支持Date,Collection等),我能User看,類實現"Serializable"介面"TBase"介面.
其Serializable介面表明類實例需要序列化網路傳輸,干擾JAVA本身序列化反序列化機制,重寫readObjectwriteObject.thrift本身並沒幫助.
TBase介面thrift序列化反序列化使用,兩核:readwrite.述thrift文件,struct定義每屬性都序號,比:1:id,thrift序列化,根據序號順序依屬性"名稱 + 值"寫入inputStream,反序列化.(具體參見readwrite實現).
thrift序列化反序列化實例數據,根據"屬性序號"進行,保證數據inputstreamoutputstream順序嚴格.點要求API發者,更改thrift文件struct定義,需要重新客戶端API,否則服務繼續使用(能報錯,能數據錯誤).thrift序列化/反序列化程JAVA自帶序列化機制同,攜帶額外class結構,外thrift種序列化機制更加適合網路傳輸,且性能更加高效.
2. UserService.Client: UserService,Client靜態類,類典型代理類,類已經實現UserService所.發者需要使用Client類API與Thrift server端交互,負責與Thrift serverSocket鏈接,發送請求接收響應.

6. 如何用thrift精準地表示日期類型

要編寫Thrift定義文件,肯定要熟悉Thrift常見的數據類型:
1.基本類型(括弧內為對應的Java類型):
bool(boolean): 布爾類型(TRUE or FALSE)
byte(byte): 8位帶符號整數
i16(short): 16位帶符號整數
i32(int): 32位帶符號整數
i64(long): 64位帶符號整數
double(double): 64位浮點數
string(String): 採用UTF-8編碼的字元串
2.特殊類型(括弧內為對應的Java類型):
binary(ByteBuffer):未經過編碼的位元組流
3.Structs(結構):
struct定義了一個很普通的OOP對象,但是沒有繼承特性。
struct UserProfile {
1: i32 uid,
2: string name,
3: string blurb
}
如果變數有默認值,可以直接寫在定義文件里:
struct UserProfile {
1: i32 uid = 1,
2: string name = "User1",
3: string blurb
}

4.容器,除了上面提到的基本數據類型,Thrift還支持以下容器類型:
list(java.util.ArrayList):
set(java.util.HashSet):
map(java.util.HashMap):
用法如下:
struct Node {
1: i32 id,
2: string name,
3: list<i32> subNodeList,
4: map<i32,string> subNodeMap,
5: set<i32> subNodeSet
}

包含定義的其他Object:
struct SubNode {
1: i32 uid,
2: string name,
3: i32 pid
}
struct Node {
1: i32 uid,
2: string name,
3: list<subNode> subNodes
}

5.Services服務,也就是對外展現的介面:
service UserStorage {
void store(1: UserProfile user),
UserProfile retrieve(1: i32 uid)
}

7. 用thrift 或 gRPC 之類的框架做 app 和伺服器的通信合適嗎

完全可以的。
thrift是Facebook開源出來的項目,現在交給了Apache來管理。thrift是用來針對不同語言系統之間數據調用的。thrift支持c,c++,Erlang,java,python,ruby,php等語言。thrift允許定義一個簡單的定義文件中的數據類型和服務介面,這個文件就是IDL(Interface Definition Language),以作為輸入文件,編譯器生成代碼。簡單的說就是thrift定義了統一的文件(對象或者結構體,服務介面),使用thrift的編譯器能夠生成對應語言的代碼文件。thrft之所以是跨語言的原意就是他通過語言無關的自定義語言來生成語言相關的代碼。

8. thrift和google protobuffer各有什麼優劣

Google放出來了Protocol buffers,一種用來部分替代xml的數據描述語言。Google就是Google,就算是推白菜出來,也一樣能讓人側目。其實protocol buffers也不是什麼新鮮的概念,且不說傳統的ASN.1, ICE這些有點類似的東西,facebook一年前就推出了thrift,應該說定位是非常的接近的。也有謠傳說是先有了protocol buffers在google內部流行,然後google的人跳槽到facebook,就出了thrift這個東西……呵呵,停止八卦,言歸正傳。 觀察法看到的優缺點 Thrift: 支持的語言更廣泛一些c++, java, python,ruby, csharp, haskell, ocmal, erlang, cocoa, php, squeak(真夠變態的) protobuf 目前還是只支持c++, java, python, 其他語言有待開發. Thrift提供的功能更豐富一些: Thrift提供了簡單的RPC構架(其實不簡單了, block, nonblock的都有了…..) protobuf好像一心一意做好自己的事情,只提供了序列化和反序列化的功能。 Thrift支持多種協議格式. Thrift的代碼實現,有專門的TProtocol和TTransport抽象,相互配合,可以實現多種協議,方便集成各種傳輸方式。至少目前Thrift就能使用json作為序列化協議。 protobuf好像只安心一種協議,並下決心把這個格式做好。輸入輸出也是標準的stream. 認真的說也不完全這樣,protobuf為了調試方便,也提供了Text_Fromat功能,這個也算一個nonbinary格式支持,這樣看來完全新協議還是有可能的。 Thrift還提供了不少語言的C mole(性能啊,都是性能啊) protobuf全部pure language實現, 反正現在已經都5到10倍速度了,不在乎了….. thrift目前不支持Windows平台,至少c++語言的runtime library和generated code是不不能在windows平台上使用的。(這真有點讓人難以接受啊,現代科技這么發達,還有怪獸boost,支持windows有這么難嗎?) protobuf沒有這個問題,提供了visual studio的項目文件,可以很順利的在windows平台下編譯。(題外話: 如果不知道googletest怎麼在windows平台上使用,可以參考protobuf的測試用例)。 The Thrift C++ runtime library does not currently work on Windows. This means that you』ll be able to compile ThriftIDL files to C++/Java/Python/etc., but you won』t be able to compile and run the generated C++ code under Windows. thrift wiki protobuf側重點是語言表達,同時在存儲效率上也下了不少功夫。用protobuf來直接讀寫數據結構相當的方便。 thrift側重點是構建誇語言的可伸縮的服務,特點就是支持的語言多,同時提供了完整的rpc service framework,可以很方便的直接構建服務,不需要做太多其他的工作。 數據類型相對固定的情況下,不論是thrift還是protobuf都會比直接處理xml要方便很多。不管是dom還是類sax,總沒有直接出數據結構訪問來的方便啊。

9. 採用thrift與其他webservice哪個更好一點

web服務和wcf的比較網上一大堆,客戶端連服務端,用wcf更好,因為可以抽象為soa,並且你可以採用esb的方式,我們的mes產品就是如此!如果是小項目就直連庫吧,不過這樣不安全,所有資料庫的東西全部暴露,並且用web服務做不了像服務推送的東西,或者是說不好做,但是用wcf就不同了,其他兩者差不多,都是soap協議的東西吧

10. python使用thrift調用hbase拿到數據怎麼處理

Row Key
Row key行鍵 (Row key)可以是任意字元串(最大長度是 64KB,實際應用中長度一般為 10-100bytes),在hbase內部,row key保存為位元組數組。
列族 (column family)
hbase表中的每個列,都歸屬與某個列族。列族是表的chema的一部分(而列不是),必須在使用表之前定義。列名都以列族作為前綴。例如courses:history , courses:math 都屬於 courses 這個列族。
時間戳
HBase中通過row和columns確定的為一個存貯單元稱為cell。每個 cell都保存著同一份數據的多個版本。版本通過時間戳來索引。時間戳的類型是 64位整型。時間戳可以由hbase(在數據寫入時自動 )賦值,此時時間戳是精確到毫秒的當前系統時間。時間戳也可以由客戶顯式賦值。如果應用程序要避免數據版本沖突,就必須自己生成具有唯一性的時間戳。每個 cell中,不同版本的數據按照時間倒序排序,即最新的數據排在最前面。
為了避免數據存在過多版本造成的的管理 (包括存貯和索引)負擔,hbase提供了兩種數據版本回收方式。一是保存數據的最後n個版本,二是保存最近一段時間內的版本(比如最近七天)。用戶可以針對每個列族進行設置。
對Hbase而言,表結構設計會對系統的性能以及開銷上造成很大的區別;

閱讀全文

與thrift數據加密相關的資料

熱點內容
listsortjava 瀏覽:180
plc閃光電路編程實例 瀏覽:297
socket編程試題 瀏覽:201
華為的伺服器怎麼設置從光碟機啟動 瀏覽:867
程序員真的累嗎 瀏覽:323
學信網app為什麼刷臉不了 瀏覽:871
天蠍vs程序員 瀏覽:991
單片機下載口叫什麼 瀏覽:186
程序員的道 瀏覽:924
雲伺服器不實名違法嗎 瀏覽:556
怎樣查看文件夾圖片是否重復 瀏覽:993
文件怎麼導成pdf文件 瀏覽:806
打開sql表的命令 瀏覽:101
安卓手機如何面部支付 瀏覽:37
天元數學app為什麼登錄不上去 瀏覽:822
明日之後為什麼有些伺服器是四個字 瀏覽:103
安卓系統l1是什麼意思 瀏覽:25
伺服器一直崩應該用什麼指令 瀏覽:924
cm202貼片機編程 瀏覽:729
php構造函數帶參數 瀏覽:179