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