项目整理
目錄
- 1 基于Thrift的RPC框架的開發(fā)和維護(hù)
- 項目介紹
- RPC及實現(xiàn)RPC需要的技術(shù)
- 1 動態(tài)代理
- 2 序列化和反序列化
- 3 NIO通信組件
- 4 注冊中心
- 為什么使用RPC
- RPC和HTTP
- Thrift簡介
- Thrift整體架構(gòu)
- Thrift 三大重要組件:Transport、Protocol和 Server
- 傳輸方式Transport
- 傳輸協(xié)議Protocol(編碼方式)
- 二進(jìn)制協(xié)議 VS 文本協(xié)議
- 服務(wù)模型Server(Java)
- 1 TSimpleServer模式
- 2 TNonblockingServer模式
- 3 THsHaServer模式(半同步半異步)
- 4 TThreadPoolServer模式
- 5 TThreadedSelectorServer模式
- 服務(wù)模型Server(Python)
- 1 TSimpleServer
- 2 TThreadPoolServer
- 2 數(shù)倉
- 數(shù)據(jù)倉庫概念
- 數(shù)倉分層概念
- 數(shù)據(jù)倉庫的輸入數(shù)據(jù)源和輸出系統(tǒng)
- 維、維度、維度表和事實表
- 0 來自知乎的一個簡單解釋
- 1 維
- 2 維度
- 3 維度表
- 4 事實表
- 5 星型模式結(jié)構(gòu)示意圖
- 數(shù)據(jù)湖 VS 數(shù)據(jù)倉庫
- 1 本質(zhì)區(qū)別
- 2 存儲位置
- 3 數(shù)據(jù)源
- 4 用戶
- 5 數(shù)據(jù)質(zhì)量
- 6 數(shù)據(jù)模式
- 7 敏捷擴展性
- 8 應(yīng)用
- 2 基于Spring Boot的個人博客系統(tǒng)
- 項目介紹
- 3 基于Servlet和JSP的網(wǎng)上書城
- 0 項目介紹
- 1 什么是Servlet
- 2 Tomcat容器等級
- 3 手工編寫一個Servlet
- 4 測試題
- 5 Servlet執(zhí)行流程
- 6 Servlet生命周期
- 7 Tomcat裝載Servlet的三種情況
- 8 Servlet與JSP的區(qū)別
- 9 Spring MVC和Servlet
- 10 轉(zhuǎn)發(fā)和重定向的區(qū)別
- Servlet是線程安全的嗎?
- 4 僵尸企業(yè)畫像及分類
- 5 降低汽油精制過程中的辛烷值損失模型
- 6 天然氣股份有限公司場站智能化分析及控制軟件開發(fā)
- 異常檢測研發(fā)目標(biāo)
- 異常檢測設(shè)計方案
- 單點檢測
- 多點檢測
1 基于Thrift的RPC框架的開發(fā)和維護(hù)
項目介紹
公司項目整體架構(gòu)是基于分布式的:以Java集成各功能模塊作為客戶端,以Python提供機器學(xué)習(xí)算法支持作為服務(wù)端,以RPC保證高效穩(wěn)定通信。Thrift作為一種典型的CS結(jié)構(gòu),且支持跨語言,故以此進(jìn)行RPC開發(fā)。在Thrift的技術(shù)選型上,使用TFramedTransport作為傳輸方式、TCompactProtocol作為傳輸協(xié)議(編碼方式),TForkingServer作為服務(wù)模型;同時,為了保證服務(wù)的穩(wěn)定性,客戶端啟用一個心跳機制來維護(hù)長連接,服務(wù)端建立一個管理進(jìn)程監(jiān)測維護(hù)各服務(wù)進(jìn)程。
分布式系統(tǒng)是由一組通過網(wǎng)絡(luò)進(jìn)行通信、為了完成共同的任務(wù)而協(xié)調(diào)工作的計算機節(jié)點組成的系統(tǒng)。
RPC及實現(xiàn)RPC需要的技術(shù)
動態(tài)代理發(fā)生在服務(wù)調(diào)用方,RPC 框架需要解決的是:像調(diào)用本地接口一樣調(diào)用遠(yuǎn)程接口。于是如何組裝數(shù)據(jù)報文、如何經(jīng)過網(wǎng)絡(luò)傳輸發(fā)送至服務(wù)提供方,以及如何屏蔽遠(yuǎn)程接口調(diào)用的細(xì)節(jié),便是動態(tài)代理需要做的工作。
1 動態(tài)代理
一個完整的RPC架構(gòu)包含5個核心組件,分別是:客戶端、客戶端存根、網(wǎng)絡(luò)傳輸模塊、服務(wù)端存根、服務(wù)端:
- 客戶端(Client):服務(wù)調(diào)用方;
- 客戶端存根(Client Stub):存放服務(wù)端的地址信息,將客戶端的請求參數(shù)打包成網(wǎng)絡(luò)消息,再通過網(wǎng)絡(luò)傳輸發(fā)送給服務(wù)方;
- 網(wǎng)絡(luò)傳輸模塊(Network Service):底層傳輸,可以是TCP或HTTP;
- 服務(wù)端存根(Server Stub):接收客戶端發(fā)送過來的請求消息并進(jìn)行解包,然后再調(diào)用本地服務(wù)進(jìn)行處理;
- 服務(wù)端(Server):服務(wù)的真正提供者;
2 序列化和反序列化
3 NIO通信組件
4 注冊中心
為什么使用RPC
RPC要解決的兩個問題:
RPC和HTTP
Thrift簡介
Thrift整體架構(gòu)
Thrift 三大重要組件:Transport、Protocol和 Server
傳輸方式Transport
傳輸協(xié)議Protocol(編碼方式)
Thrift傳輸協(xié)議總體上可劃分為二進(jìn)制(binary)和文本(text)傳輸協(xié)議兩大類,一般在生產(chǎn)環(huán)境中使用二進(jìn)制類型的傳輸協(xié)議(相比于文本和JSON傳輸效率更高)。
二進(jìn)制協(xié)議 VS 文本協(xié)議
服務(wù)模型Server(Java)
1 TSimpleServer模式
2 TNonblockingServer模式
TNonblockingServer也是單線程工作,但是該模式采用NIO的方式,所有的socket都被注冊到selector中,在一個線程中通過selector循環(huán)監(jiān)聽所有的socket;每次selector結(jié)束時,處理所有的處于就緒狀態(tài)的socket:對于監(jiān)聽到的socket產(chǎn)生一個新業(yè)務(wù)socket并將其注冊到selector中,對于有數(shù)據(jù)到來的socket進(jìn)行數(shù)據(jù)讀取操作,對于有數(shù)據(jù)發(fā)送的socket進(jìn)行數(shù)據(jù)發(fā)送操作。
TNonblockingServer模式優(yōu)點:
相比于TSimpleServer效率提升主要體現(xiàn)在IO多路復(fù)用上,TNonblockingServer采用非阻塞IO,同時監(jiān)控多個socket的狀態(tài)變化。
TNonblockingServer模式缺點:
TNonblockingServer模式在業(yè)務(wù)處理上還是采用單線程順序來完成,在業(yè)務(wù)處理比較復(fù)雜、耗時的時候,例如某些接口函數(shù)需要讀取數(shù)據(jù)庫執(zhí)行時間較長,此時該模式效率也不高,因為多個調(diào)用請求任務(wù)依然是一個接一個順序執(zhí)行。
3 THsHaServer模式(半同步半異步)
THsHaServer類是TNonblockingServer類的子類,TNonblockingServer模式中,采用一個線程來完成對所有socket的監(jiān)聽和業(yè)務(wù)處理,造成了效率的低下,THsHaServer模式的引入則是部分解決了這些問題。THsHaServer模式中,引入一個線程池來專門進(jìn)行業(yè)務(wù)處理。
THsHaServer的優(yōu)點:
與TNonblockingServer模式相比,THsHaServer在完成數(shù)據(jù)讀取之后,將業(yè)務(wù)處理過程交由一個線程池來完成,主線程直接返回進(jìn)行下一次循環(huán)操作,效率大大提升。
THsHaServer的缺點:
主線程需要完成對所有socket的監(jiān)聽以及數(shù)據(jù)讀寫的工作,當(dāng)并發(fā)請求數(shù)較多,且發(fā)送數(shù)據(jù)量較大時,監(jiān)聽socket上新連接請求不能被及時接收。
4 TThreadPoolServer模式
TThreadPoolServer模式采用阻塞socket方式工作,主線程負(fù)責(zé)阻塞式監(jiān)聽是否有新socket到來,業(yè)務(wù)處理交由一個線程池來處理。
TThreadPoolServer模式優(yōu)點:
線程池模式中,數(shù)據(jù)讀取和業(yè)務(wù)處理都交由線程池完成,主線程只負(fù)責(zé)監(jiān)聽新連接,因此在并發(fā)量較大時新連接也能夠被及時接收。線程池模式比較適合服務(wù)器端能預(yù)知最多有多少個客戶端并發(fā)的情況,這時每個請求都能被業(yè)務(wù)線程池及時處理,性能也非常高。
TThreadPoolServer模式缺點:
線程池模式的處理能力受限于線程池的工作能力,當(dāng)并發(fā)請求數(shù)大于線程池中的線程數(shù)時,新請求也只能排隊等待。
5 TThreadedSelectorServer模式
TThreadedSelectorServer模式是目前Thrift提供的最高級的模式,它內(nèi)部有如下幾個部分構(gòu)成:
TThreadedSelectorServer模式中有一個專門的線程AcceptThread用于處理新連接請求,因此能夠及時響應(yīng)大量并發(fā)連接請求;另外它將網(wǎng)絡(luò)I/O操作分散到多個SelectorThread線程中來完成,因此能夠快速對網(wǎng)絡(luò)I/O進(jìn)行讀寫操作,能夠很好地應(yīng)對網(wǎng)絡(luò)I/O較多的情況;TThreadedSelectorServer對于大部分應(yīng)用場景性能都不會差,因此,如果實在不知道選擇哪種工作模式,使用TThreadedSelectorServer就可以。
鏈接: Python服務(wù)端源碼解析.
服務(wù)模型Server(Python)
1 TSimpleServer
TSimpleServer的工作模式采用最簡單的阻塞IO,實現(xiàn)方法簡潔明了,便于理解,但是一次只能接收和處理一個socket連接,效率比較低。
源碼分析
2 TThreadPoolServer
服務(wù)啟動時先創(chuàng)建好self.threads個線程,每個線程負(fù)責(zé)從隊列clients中獲取客戶端連接TSocket對象。而主線程負(fù)責(zé)accept客戶端的連接并創(chuàng)建TSocket對象,放入clients隊列。
3 TNonblockingServer
類似于Java版Thrift中的THsHaServer,思路是服務(wù)啟動時創(chuàng)建threads個線程負(fù)責(zé)處理task隊列中的任務(wù)消息。而主線程利用I/O多路復(fù)用技術(shù)將準(zhǔn)備好的可讀消息放入task隊列供業(yè)務(wù)線程處理,同時在處理結(jié)束后可寫時直接將結(jié)果返回給客戶端。
4 TForkingServer VS TProcessPoolServer
2 數(shù)倉
數(shù)據(jù)倉庫概念
1 概念
2 特點
2.1 面向主題
2.2 集成
2.3 相對穩(wěn)定
2.4 反映歷史變化
數(shù)據(jù)集市則是一種微型的數(shù)據(jù)倉庫,通常有更少的數(shù)據(jù),更少的主題區(qū)域,更少的歷史數(shù)據(jù),部門級的,一般只能為某個局部范圍內(nèi)的管理人員服務(wù);
數(shù)據(jù)倉庫是企業(yè)級的,能為整個企業(yè)各個部門的運行提供決策支持手段;
數(shù)倉分層概念
數(shù)倉為什么要分層
數(shù)據(jù)倉庫的輸入數(shù)據(jù)源和輸出系統(tǒng)
維、維度、維度表和事實表
0 來自知乎的一個簡單解釋
1 維
維是關(guān)于一個組織想要記錄的視角或觀點。
參考: 維的百度百科.
2 維度
3 維度表
特性:
4 事實表
特性:
5 星型模式結(jié)構(gòu)示意圖
數(shù)據(jù)湖 VS 數(shù)據(jù)倉庫
1 本質(zhì)區(qū)別
2 存儲位置
3 數(shù)據(jù)源
4 用戶
5 數(shù)據(jù)質(zhì)量
6 數(shù)據(jù)模式
7 敏捷擴展性
8 應(yīng)用
2 基于Spring Boot的個人博客系統(tǒng)
項目介紹
- 項目介紹:個人博客系統(tǒng)包含前臺管理和后臺管理兩部分。前臺管理的核心功能包括:文章分頁展示、文章詳情查看、文章評論管理;后臺管理的核心功能包括:系統(tǒng)數(shù)據(jù)展示、文章發(fā)布、文章修改、文章刪除;同時,對系統(tǒng)前后臺用戶登錄管理進(jìn)行了統(tǒng)一實現(xiàn)。
- 軟件環(huán)境:前端使用Spring Boot支持的模板引擎Thymeleaf+jQuery完成頁面信息展示,后端使用Spring MVC+Spring Boot+MyBatis框架進(jìn)行整合開發(fā)。
3 基于Servlet和JSP的網(wǎng)上書城
0 項目介紹
- 項目介紹:網(wǎng)上書城包含面向用戶和面向管理員兩部分。面向用戶的部分包括:首頁、用戶注冊、購物、提交訂單、付款等模塊;面向管理員的部分包括:圖書管理、物流管理等模塊。
- 軟件環(huán)境:Servlet、JSP、Tomcat、MySQL等。
1 什么是Servlet
Servlet是一個Java類,是在服務(wù)器上運行以處理客戶端請求并作出響應(yīng)的程序。
2 Tomcat容器等級
Tomcat容器分四個等級,Servlet容器管理Context容器,一個Context對應(yīng)一個Web工程。
3 手工編寫一個Servlet
4 測試題
假設(shè)在helloapp應(yīng)用中有一個HelloServlet類,它在 web.xml文件中的配置如下:
<servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>org.javathinker.HelloServlet</servlet-class></servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>那么在瀏覽器端訪問HelloServlet的URL是什么?
- 答:http://localhost:8080/helloapp/hello
- 解析:localhost是服務(wù)器主機名,也可以是IP地址127.0.0.1;8080是tomcat服務(wù)器的端口號;helloapp是web工程的上下文地址ContextRoot(一般情況下與web工程名一致);最后是<url-pattern/>標(biāo)簽中的內(nèi)容。
5 Servlet執(zhí)行流程
6 Servlet生命周期
架構(gòu)圖
下圖展示了一個典型的 Servlet 生命周期方案。
7 Tomcat裝載Servlet的三種情況
8 Servlet與JSP的區(qū)別
9 Spring MVC和Servlet
Spring MVC簡化了寫Servlet類,由一個前端調(diào)度器接收所有請求,后臺寫相應(yīng)的Controller就好,而Servlet就是一個請求一個映射一個Servlet。
10 轉(zhuǎn)發(fā)和重定向的區(qū)別
forward(轉(zhuǎn)發(fā))
是服務(wù)器請求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器,瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容從哪里來的,因為這個跳轉(zhuǎn)過程是在服務(wù)器實現(xiàn)的,并不是在客戶端實現(xiàn)的,所以客戶端并不知道這個跳轉(zhuǎn)動作,所以它的地址欄還是原來的地址。
redirect(重定向)
是服務(wù)端根據(jù)邏輯,發(fā)送一個狀態(tài)碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.
轉(zhuǎn)發(fā)是服務(wù)器行為,重定向是客戶端行為。
區(qū)別:
從地址欄顯示來說
forward是服務(wù)器請求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器,瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容從哪里來的,所以它的地址欄還是原來的地址;
redirect是服務(wù)端根據(jù)邏輯發(fā)送一個狀態(tài)碼,告訴瀏覽器重新去請求某個地址.,所以地址欄顯示的是新的URL;
從數(shù)據(jù)共享來說
forward:轉(zhuǎn)發(fā)頁面和轉(zhuǎn)發(fā)到的頁面可以共享request里面的數(shù)據(jù);
redirect:不能共享數(shù)據(jù);
從運用地方來說
forward:一般用于用戶登陸的時候,根據(jù)角色轉(zhuǎn)發(fā)到相應(yīng)的模塊;
redirect:一般用于用戶注銷登陸時返回主頁面和跳轉(zhuǎn)到其它網(wǎng)站等;
forward:高;
redirect:低;
Servlet是線程安全的嗎?
Servlet不是線程安全的,多線程的讀寫會導(dǎo)致數(shù)據(jù)不同步的問題。
4 僵尸企業(yè)畫像及分類
5 降低汽油精制過程中的辛烷值損失模型
6 天然氣股份有限公司場站智能化分析及控制軟件開發(fā)
異常檢測研發(fā)目標(biāo)
故障檢測系統(tǒng)將從以下幾個方面為天然氣儲運場站的生產(chǎn)和儲運提供技術(shù)支持:
(1)對場站安全態(tài)勢進(jìn)行全方位刻畫。目前,公司對場站的各種設(shè)備進(jìn)行了實時檢測,在生產(chǎn)過程中利用計算機控制系統(tǒng)收集了計量設(shè)備、分離設(shè)備和壓縮機組等生產(chǎn)設(shè)備的運行狀態(tài),故障檢測系統(tǒng)將對這些數(shù)據(jù)進(jìn)行清洗、挖掘和分析,以實現(xiàn)對場站安全態(tài)勢的全方位刻畫;
(2)對場站安全態(tài)勢進(jìn)行預(yù)測。天然氣場站的儲運數(shù)據(jù)具有動態(tài)性、非線性和隨機性等復(fù)雜特性,故障檢測系統(tǒng)將結(jié)合機器學(xué)習(xí)、過程檢測等技術(shù)對數(shù)據(jù)進(jìn)行科學(xué)建模,預(yù)測可能出現(xiàn)的故障;
(3)降低場站事故發(fā)生率。在對安全態(tài)勢合理預(yù)測的基礎(chǔ)上,預(yù)知可能出現(xiàn)的故障,及時檢查清除故障,保證天然氣生產(chǎn)和儲運的平穩(wěn)運行,降低因天然氣運行設(shè)備老化、損壞、維護(hù)不及時等原因造成的事故發(fā)生率。
異常檢測設(shè)計方案
異常檢測系統(tǒng)的主要功能在于高效評價設(shè)備運行工況,預(yù)先發(fā)現(xiàn)運行故障,快速定位故障原因,為提高場站生產(chǎn)管理的安全級別提供決策依據(jù)。設(shè)計方案主要結(jié)合了機器學(xué)習(xí)、大數(shù)據(jù)管理、過程檢測等技術(shù),此外還參考了天然氣領(lǐng)域的相關(guān)知識。
具體來說,就是對單個傳感器得到的數(shù)據(jù)和多個傳感器得到的數(shù)據(jù)采用不同的模型進(jìn)行處理。其中,使用LSTM模型對單點數(shù)據(jù)進(jìn)行處理,判斷該變量是否產(chǎn)生故障;使用BP神經(jīng)網(wǎng)絡(luò)對多點支路數(shù)據(jù)進(jìn)行故障檢測,判斷該多點支路是否有故障產(chǎn)生。
單點檢測
單點是指單個傳感器檢測點,單點異常檢測實際上是對一維時間序列上的異常點進(jìn)行檢測。
由于天然氣數(shù)據(jù)不是一個純粹的隨機時間序列,它的時間序列可能存在某種長期依賴關(guān)系,而LSTM模型可以捕捉到這種長期依賴關(guān)系,因此考慮建立LSTM模型進(jìn)行天然氣數(shù)據(jù)的單點故障檢測。
LSTM,即長短期記憶網(wǎng)絡(luò),是為了解決一般的RNN(循環(huán)神經(jīng)網(wǎng)絡(luò))存在的長期依賴問題而專門設(shè)計出來的,適合于處理和預(yù)測時間序列中間隔和延遲非常長的重要事件。
(1)數(shù)據(jù)預(yù)處理
- 首先從CSV文件中提取出需要進(jìn)行異常檢測的一維時間序列,然后對數(shù)據(jù)進(jìn)行z-score標(biāo)準(zhǔn)化,即0均值標(biāo)準(zhǔn)化,將數(shù)據(jù)變換為均值為0、標(biāo)準(zhǔn)差為1的標(biāo)準(zhǔn)正態(tài)分布。
(2)劃分訓(xùn)練集、驗證集和測試集
- 將處理后的數(shù)據(jù)按照7:2:1的比例將數(shù)據(jù)劃分為訓(xùn)練集、驗證集和測試集。
(3)設(shè)定模型參數(shù)
(4)訓(xùn)練模型
- 將處理后的數(shù)據(jù)加載到pandas的數(shù)據(jù)框架中,它將輸出 ( N, W, F ) 三維numpy數(shù)組,其中N表示訓(xùn)練數(shù)據(jù)中的序列數(shù),W表示序列長度,F表示每個序列的特征數(shù);然后將數(shù)組饋送進(jìn)LSTM模型中。
(5)通過模型進(jìn)行預(yù)測
- LSTM模型使用訓(xùn)練集數(shù)據(jù)的第一部分(滑動窗口大小)初始化一次訓(xùn)練窗口,預(yù)測出單個點的值,然后不斷移動滑動窗口去預(yù)測下一個點的值。以此類推,LSTM模型可以預(yù)測出一個完整的時間序列。
(6)異常檢測與判定
將預(yù)測出來的數(shù)據(jù)和真實的測試集數(shù)據(jù)進(jìn)行對比,比較數(shù)據(jù)的真實值是否在其預(yù)測值的三倍標(biāo)準(zhǔn)差內(nèi),如果在,則表明該數(shù)據(jù)為正常數(shù)據(jù),否則該數(shù)據(jù)為異常數(shù)據(jù)。
多點檢測
多點是指多個傳感器檢測點。
使用BP神經(jīng)網(wǎng)絡(luò)做多點故障檢測:通過研究實測數(shù)據(jù),利用采集的壓力、溫度及時間點等數(shù)據(jù)在BP神經(jīng)網(wǎng)絡(luò)中進(jìn)行訓(xùn)練學(xué)習(xí)和預(yù)測評估。
總結(jié)
- 上一篇: 计算机中的数制和编码教案,数制与编码教案
- 下一篇: 一文看懂数据清洗:缺失值、异常值和重复值