bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

go語言rpc超時時間 go實現rpc

建行到家rpc連接超時

系統沒有及時升級。

創新互聯公司長期為上1000+客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為水城企業提供專業的成都做網站、網站建設,水城網站改版等技術服務。擁有十余年豐富建站經驗和眾多成功案例,為您定制開發。

建行到家rpc顯示請求超時,主要原因就是系統沒有及時升級,部分組件沒有響應,必須更新。

rpc(RemoteProcedureCall)是遠程過程調用,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。

GRPC負載均衡

負載均衡是高可用網絡基礎架構的關鍵組件,通常用于將工作負載分布到多個服務器來提高應用的性能和可靠性。

關于GRPC的負載均衡,我們選擇NGINX來進行反向代理。NGINX在1.13.9版本已經開始支持GRPC代理。有了對 GRPC 的支持,NGINX 就可以代理 GRPC TCP 連接,還可以終止、檢查和跟蹤 GRPC 的方法調用。

在nginx的配置文件中配置GRPC代理即可。

通過grpc 調用代理端口

觀察NGINX的access.log,可以看到相應的代理記錄

首先GRPC是建立在HTTP2.0的基礎上進行數據傳輸,HTTP2.0的優勢就不用多說了。因此NGINX負載均衡同樣也是建立在HTTP2.0的基礎之上。并且NGINX新增了GRPC模塊。用于負載GRPC請求。

需要注意以下幾個NGINX的參數配置:

nginx_http2模塊

http2_max_requests:在一個tcp連接上默認通過的最大數據包數,默認1000個

http2_max_concurrent_streams:在一個tcp連接上默認最大并發流,默認128個

nginx_grpc模塊

grpc_send_timeout:將請求傳輸到gRPC服務器的超時時間,如果超過這個時間,NGINX會斷開連接。

grpc_read_timeout:接收gRPC服務器數據的超時時間,如果超過這個時間,NGINX會斷開連接。

grpc_socket_keepalive:NGINX與gRPC服務器長連接配置設置。

四、HBase客戶端

1、通過Configuration初始化集群Connection

1.1、Connction維持了客戶端到整個HBase集群的鏈接,如一個HBase集群有2個Master、5個RegionServer,那么一般來說整個Connection會維持一個到Active Master的TCP連接和5個到ReginonServer的TCP鏈接。

1.2、通常一個進程只需要為一個獨立的集群建立一個Connection即可,并不需要建立連接池。

1.3、Connection還緩存了訪問的Meta信息,后續的大部分請求都可以通過緩存的Meta信息定位到對應的Region Server。

2、通過Connection初始化Table

2.1、Table是一個非常輕量級的對象,它所使用的連接資源、配置信息、線程池、Meta緩存等都來自于Connection。

2.2、由同一個Connection創建的多個Table,都會共享連接、配置信息、線程池、Meta緩存這些資源

2.3、在branch-1以及之前的版本中,Table并不是線程安全的類,所以不建議在多個線程中使用同一個Table實例。在HBase 2.00及之后,Table已經實現了線程安全。

2.4、由于Table是一個非常輕量級的對象,所以可以通過Connection為每個請求創建一個Table,但是記住,在該請求執行完畢之后需要關閉Table資源。

3、hbase:meta

3.1、hbase:meta用來保存整個集群的region信息

3.2、hbase:meta在HBase中保證始終只有一個Region,這是為了確保meta表多次操作的原子性,因為HBase本質上只支持Region級別的事務所謂Region級別的事務是指:當多個操作落在同一個Region內時,HBase能保證這一批操作執行的原子性。如果多個操作分散在不同的Region,則無法保證這批操作的原子性

3.3、hbase:meta的一行就對應一個Region. 它的rowkey主要由TableName、StartRow、TimeStamp、EncodeName、標識這個Region是屬于哪個表,表Rowkey的起始行以及Region的創建時間戳

3.4、hbase:meta只有一個列簇info他有4列,info:regioninfo、info:seqnumDuringOpen、info:server、info:serverstartcode,表示這個表rowkey的起始位置,region落在哪個RegionServer上以及所在RegionServer的啟動時間戳

4、HBase超時參數設置

hbase.rpc.timeout:表示單次RPC請求的超時時間,默認是60 000ms。

hbase.clinet.retries.number:最多允許發生多少次RPC重試操作默認是35次。

hbase.clinet.pause:表示連續兩次RPC重試之間的休眠時間,默認是100ms。重試休眠時間是按照隨機退避算法設計的。也就是重試次數越多,休眠間隔時間就會越來越長。按照默認的重試次數35,則可能長期卡在休眠和重試兩個步驟中

hbase.clinet.operation.timeout:表示單次API的超時時間,默認值為1 200 000ms.一次API可能會有多次RPC重試,這個參數是API操作的總超時。

5、CAScheckAndPut、inCrementColumnValue操作是Region級別串行執行的,吞吐受限,在HBase 2.x版本已調整設計,對于同一個Region內部的不同行可以并行執行CAS,這樣大大提交了Region內部的CAS吞吐

6、Filter使用避坑指南

6.1、PrefixFilter 前綴過濾

低效使用方式:

Scan scan = new Scan();

scan.setFilter(new PrefixFillter(Bytes.toBytes("def")));

這個Scan雖然能得到預期的效果,但是并不高效,因為對于rowKey在區間(-∞,def)的數據,會一條條掃描,發現前綴不為def,就讀下一行,直到找到第一個rowkey為def的行為止

高效使用方式:

Scan scan = new Scan();

scan.setStartRow(Bytes.toBytes("def"));

scan.setFilter(new PrefixFillter(Bytes.toBytes("def")));

增加了一個startRow。RegionServer發現Scan設置了startRow,首先會尋址定位到startRow。這樣就跳過了大量的(-∞,def)的數據。

最高效的使用方式:

Scan scan = new Scan();

scan.setStartRow(Bytes.toBytes("def"));

scan.setStopRow(Bytes.toBytes("deg"));

將PrefixFilter直接展開,掃描[def,deg)區間的數據,這樣效率是最高的。

6.2、PageFilter:表有5個Region起始key為(-∞,1)、[1,2)、[2,3)、[3,4)、[4,+∞)每個Region 都有超過100條數據

錯誤的使用方式:

Scan scan = new Scan();

scan.setStartRow(Bytes.toBytes("1"));

scan.setStopRow(Bytes.toBytes("3"));

scan.setFilter(new PageFilter(100))

這樣寫得出來的分頁每頁數據就會有200 條。但是明明設置了分頁每頁條數是100。原因是,它需要scan 2個Region.scan從一個region切換到另一個region之前的那個Filter的內部狀態就無效了,新的region內部用的是一個全新的Filter.Filter計數器被清零。Filter不是全局的, 所以它分別從2個region各查了100 條,總共200 條返回。

正確的使用方式:

如果想實現分頁功能,可以不通過Filter而直接通過limit來實現。

Scan scan = new Scan();

scan.setStartRow(Bytes.toBytes("1"));

scan.setStopRow(Bytes.toBytes("3"));

scan.setLimit(100);

所以對于用戶來說,正常情況下PageFilter并沒有太多的存在價值

6.3、SingleColumnValueFilter

使用方式:

Scan scan = new Scan();

SingleColumnValueFilter scvf = new? SingleColumnValueFilter(Bytes.toBytes("family"),Bytes.toBytes("qualifier"),

CompareOp.EQUAL,Bytes.toBytes("value"));

scan.setFilter(scvf);

表面上是將列簇為family,列為qualifier,值為value的cell返回給用戶,但事實上那些不包含family:qualifier的行也會默認返回給用戶,如果用戶不希望讀取那些不包含family:qualifier的數據,需要設計如下scan

Scan scan = new Scan();

SingleColumnValueFilter scvf = new? SingleColumnValueFilter(Bytes.toBytes("family"),Bytes.toBytes("qualifier"),

CompareOp.EQUAL,Bytes.toBytes("value"));

scvf.setFiterIfMisssing(true);

scan.setFilter(scvf);

另外當SingleColumnValueFilter設置為filterIfMisssing為true時,和其他Filter組合成FilterList時可能導致返回的結果不正確。建議是不要使用SingleColumnValueFilter與其他Filter組合成FilterList。 直接指定列,通過ValueFilter替換掉SingleColumnValueFilter

Scan scan = new Scan();

ValueFilter vf = new ValueFilter(CompareOf.EQUAL,new BinaryComparatoe(Bytes.toBytes("value")));

scan.addColum(Bytes.toBytes("family"),Bytes.toBytes("qualifier"));

scan.setFilter(vf);

7、HBase寫入方式對比

7.1、table.put(Put):

每次執行都會執行一次RPC和磁盤持久化,寫入吞吐受限于磁盤帶寬、網絡帶寬,不會有數據丟失能保證put操作的原子性。

7.2、table.put(ListPut):

客戶端打包一批put提交,執行一次RPC,一次WAL。相比第一種省略了多次往返的RPC和磁盤持久化。但是時間會變長。如果打包的put分布在多個Region。則不能保證這一批put的原子性,應為HBase不支持跨Region的多行事務,失敗的put會經歷若干次重試。

7.3、bulk load:

將待寫入的數據生成HFile,然后采用bulk load方式將HFile直接加載到對于的Region的CF內。這是一種完全離線的快速寫入方式。它應該是最快的批量寫入手段,同時不會對線上的集群產生巨大壓力,在load完HFile之后,CF內部會進行Compaction,但是Compaction是異步的且可以限速,所以bulk load對線上集群非常友好。

使用場景舉例:

7.3.1、兩個集群互為主備,其中一個集群由存在數據丟失,想通過另一備份集群的數據來修復異常集群。最快的方式是:把備份集群的數據導一個快照拷貝到異常集群,然后通過copyTable工具掃快照生成HFile,然后bulk load 到異常集群,完成數據的修復。

7.3.2、當用戶寫入大量數據后,發現選擇的split keys不合適,想重新選擇split keys見表,這時也可以通過 snapshort生成HFile再bulk load的方式生成新表。

gohttp只獲取header斷開

考慮基于HTTP的RPC,或者HTTP服務器主動通知客戶端的機制,就是HTTP Long-Polling,意思就是客戶端發起一個長連接,服務器阻塞忍住不響應直到:

超時,比如5秒后,我們給客戶端響應一個keepalive,意思是現在還沒有啥事,請繼續polling。

拿到結果,這個可能是任何時候,比如300毫秒、1100毫秒、2300毫秒拿到一個事件,響應給客戶端,實現了有事件異步通知。

這樣客戶端和服務器之間RPC的效率就非常高,只有在有事件時才會通知。但是,實際上還有一種情況需要處理:

當客戶端斷開連接,比如客戶端設置了3秒鐘TCP請求超時,或者因為客戶端Crash時OS回收了FD等等,這個時候服務器應該要終止polling事務,停止獲取事件。因為如果這個時候獲取了事件,那么如何處理這個事件?只能丟棄,如果客戶端再次發起請求,就拿不到這個事件了。

問題就來了,如何在HTTP Handler中探測客戶端斷開?例如:

分享標題:go語言rpc超時時間 go實現rpc
本文來源:http://vcdvsql.cn/article40/doieheo.html

成都網站建設公司_創新互聯,為您提供品牌網站設計網站策劃Google網站設計App設計品牌網站制作

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

h5響應式網站建設