【遠程醫療】互聯網醫院 衛健委數據上報平臺技術方案

来源:https://www.cnblogs.com/Javame/archive/2020/03/23/12554736.html

說到數據上報,很多人第一印象是直接點對點的上報數據,優點是簡單直接省事,但是缺點很明顯,侵入性太強,業務中會摻雜很多非業務的事情。當然這裡的簡單省事是短暫的,如果業務以及開發完了,後面追加數據上報功能,再按照這個模式,將帶來空前的壓力,代碼基本上要重新寫、測試。這個任務量也許會很大,因為一時的省事為 ...


說到數據上報,很多人第一印象是直接點對點的上報數據,優點是簡單直接省事,但是缺點很明顯,侵入性太強,業務中會摻雜很多非業務的事情。當然這裡的簡單省事是短暫的,如果業務以及開發完了,後面追加數據上報功能,再按照這個模式,將帶來空前的壓力,代碼基本上要重新寫、測試。這個任務量也許會很大,因為一時的省事為以後埋下大坑,這個是做研發要極力避免的、不能容忍的。此時我們要做的事是如何解耦,將非業務性功能提取出來,做成一個統一的數據上報平臺。因此我們就有了下文的技術方案。

系統設計架構圖:

 

 

 圖示:關於技術選型,a、b、c都是基於springcloud,數據存儲我們選擇Elasticsearch,消息中間件使用kafka。

 

  上圖的業務是將a服務的數據上報到d服務。按照一般的流程我們可以直接將a服務的數據直接發送到d服務,這樣的好處是簡單,但是缺點顯而易見,侵入性、耦合性太強,這不是我們想要的。我們要將與業務無關的服務剝離出來,做成一個統一的數據上報中心也就是上圖中的b服務,在這個服務中只做一件事,那就是業務數據上報,而此時的a服務只管專心的做業務,無需關心其它,二者各司其職,互不影響,做到真正的業務分離。

 

   此時b服務的上報數據從哪兒來,a服務直接發給b服務?很明顯不是,如果這樣做和a服務點對點發送到d服務有什麼區別呢,反而增加了一個中間環節,增加了不穩定因素。那我們該怎麼做?想一想,多個程式如何進行消息傳遞?此時我們會想到消息中間件這個很神奇的一個東西。網上搜索一大堆消息中間件,那麼我們該如何選擇呢?我們這裡選擇的是kafka,原因是我們這裡的數據量大、生態環境非常好,實時數據處理比較好,而且我們之前已經在使用它了,在滿足業務的情況下,沒有必要再額外的維護一個中間件,我們要本著業務、經濟的原則去技術選型,不要為了技術而技術。

 

 

 

在上報數據的時候我們還得考慮很多問題:

1.上報數據日誌監控

我們這裡的日誌量很大,而且需要各種維度的日誌分析這個功能,因此日誌存儲我們採用Elasticsearch。

它是一個分散式搜索引擎,支持海量數據存儲,檢索查詢。在這裡使用它再適合不過。

 

2.數據丟失。比如服務d宕機、網路堵塞原因會導致上報數據丟失(在a、b服務正常的情況下),那麼如何解決這個?由於我們做了日誌監控,所以會很簡單的解決這個問題,將上報異常的數據重新發送就好了。

 

使用場景:

本架構使用在互聯網醫院項目中,業務是衛健委要求醫院上報線上看病患者產生的數據,且上報數據不允許丟失,如果對方平臺無法使用,則要求補發丟失數據。

a對應醫院線上看病服務,d對應衛健委數據接收服務。b、c就是內部非業務服務。

最後總結核心點,我們要將業務和非業務相關的東西剝離開來,各司其職,互不影響,這正符合現在流行的微服務理念。

 

推薦閱讀:

【大廠】基於rabbitMQ消息中心技術方案
【乾貨】一篇文章講透數據挖掘
【乾貨】微服務設計的基礎知識【對話老王】聊聊那數據
【輕鬆話題】閑話程式員
【劃劃重點】論大數據中主數據的重要性
【談大數據】CDH6.x學習筆記(角色簡介)

 


您的分享是我們最大的動力!

更多相關文章
  • JavaScript面向對象, 註意啦在這其實面向對象是一種編程的方式,它的思想是通用的,因此 我強烈的建議你去查看我在python,面向對象編程中做的筆記。 面向對象與面向過程 這裡還是相對比較容易理解的,這是兩種截然不同的編程方式。 | |面向過程 | 面向對象 | | : |: :| :| | ...
  • 一、Bootstrap Table列寬拖動的方法 Bootstrap Table可拖動列,需要用到它的Resizable擴展插件 需要引入 bootstrap-table擴展插件 bootstrap-table-resizable.js 這個插件還依賴於colResizable v1.6(下載地址: ...
  • 組件化的思想 將一個頁面中的處理邏輯放在一起,處理起來就會很複雜,不利於後續管理和擴展。 如果將頁面拆分成一個個小的功能塊,每個功能塊實現自己的內容,之後對頁面的管理和維護就變得很容易了。 註冊組件的基本步驟 1.創建組件構造器 2.註冊組件 3.使用組件 //創建組件構造器對象 const cpn ...
  • 事件註冊單個事件註冊語法: $('div').click(function () { 處理的事情 })$('div').click(function () { $(this).css('backgroundColor', 'red') });$('div').mouseenter(function ... ...
  • 前端是什麼? 工作流程為從UI處得到原型圖或者效果圖,在項目(網站、微信公眾號、小程式、WEBAPP)中還原圖片效果,然後與後臺進行各種數據交互。 目前的前端市場整體還是處於迅速發展期,市場對於前端的需求也一直比較大。市場對於中高級的前端工程師需求更加迫切,所以就算入了前端的門,也需要不斷的提升自己 ...
  • 在頁面中我們經常會使用到 checkbox 和 radio,但是,部分瀏覽器顯示的效果並不能讓我們滿意,因此想通過一種方式,更改其樣式。 這裡使用到的就是使用 label,結合 before 實現樣式的更改。 完整代碼: 效果圖: 這樣相比之前就好看那麼一點點,如果引入字體圖標,對 css 稍作更改 ...
  • 1.有關於屬性的操作 "項目源碼" 所謂的屬性操作就是操作一系列的元素的屬性,value啦class啦 .......特別是有關於input的操作是非常重要的。 為了完成後續有關於框架的高級騷操作,我們現在先來學習一下,jQuery的常用屬性操作的三種 prop(),attr(),data() (1 ...
  • 通過VueRouter實例的push()操作,可以進行路由跳轉,對於<router-link/>組件來說,它綁定的是click事件,最後也是通過執行push()方法來進行路由跳轉的。 對於push()方法來說,一共可以傳入三種形式的參數: 字元串形式,值為路勁 含有name的對象形式,可以搭配par ...
一周排行
  • 前幾天發佈了 "抄抄《CSS 故障藝術》的動畫" 這篇文章,在這篇文章里介紹瞭如何使用Win2D繪製文字然後配合BlendEffect製作故障藝術的動畫。本來打算就這樣收手不玩這個動畫了,但後來又發現性能不符合理想。明明只是做做Resize動畫和用BlendEffect混合,為什麼性能會這麼差呢? ...
  • 控制條控制項: progressBar 不能按照你程式的進程自動變化,需認為計算,調整變化量 private void progressBar1_Click(object sender, EventArgs e) { this.progressBar1.Maximum = 100;//設置進度條最大長 ...
  • 首先創建一個asp.net core web應用程式 第二步 目前官方預置了7種模板項目供我們選擇。從中我們可以看出,既有我們熟悉的MVC、WebAPI,又新添加了Razor Page,以及結合比較流行的Angular、React前端框架的模板項目。 空項目模板 Program.cs using S ...
  • 對閉包的理解 1.對於成員變數和局部變數:成員變數就是方法外部,類的內部定義的變數;局部變數就是方法或語句塊內部定義的變數。局部變數必須初始化。 形式參數是局部變數,局部變數的數據存在於棧記憶體中。棧記憶體中的局部變數隨著方法的消失而消失。成員變數存儲在堆中的對象裡面,由垃圾回收器負責回收。 成員變數它 ...
  • Xamarin.Forms讀取並展示Android和iOS通訊錄 TerminalMACS客戶端 本文同步更新地址: https://dotnet9.com/11520.html https://terminalmacs.com/861.html 閱讀導航: 一、功能說明 二、代碼實現 三、源碼獲取 ...
  • 做下對文件複製操作相關的筆記: /// <summary> /// 文件幫助類 /// </summary> public class FileHelper { /// <summary> /// 複製一個目錄下所有文件到一個新目錄下 /// </summary> /// <param name=" ...
  • 前言 有一個東西叫做鴨子類型,所謂鴨子類型就是,只要一個東西表現得像鴨子那麼就能推出這玩意就是鴨子。 C 裡面其實也暗藏了很多類似鴨子類型的東西,但是很多開發者並不知道,因此也就沒法好好利用這些東西,那麼今天我細數一下這些藏在編譯器中的細節。 不是只有 和 才能 在 C 中編寫非同步代碼的時候,我們經 ...
  • [toc] 1.應用背景 底端設備有大量網路報文(位元組數組):心跳報文,數據採集報文,告警報文上報。需要有對應的報文結構去解析這些位元組流數據。 2.結構體解析 由此,我第一點就想到了用結構體去解析。原因有以下兩點: 2.1.結構體存在棧中 類屬於引用類型,存在堆中;結構體屬於值類型,存在棧中,在一個 ...
  • 《深入淺出 C#》 (第3版) [作者] (美) Andrew Stellman (美) Jennifer Greene[譯者] (中) 徐陽 丁小峰 等譯[出版] 中國電力出版社[版次] 2016年08月 第1版[印次] 2018年04月 第4次 印刷[定價] 148.00元 【引子】 要學習編程 ...
  • 記錄使用對象初始值設定項初始化對象。 using System; using System.Collections.Generic; namespace ConsoleApp2 { class Program { static void Main(string[] args) { // 使用構造函數 ...
x