系統架構設計(通用型)

系統架構圖:

系統架構設計(通用型),推薦給苦於寫文檔的同窗們,乾貨分享!

系統採用四層架構設計

1、展示層前端

  1. Web前端mysql

    基於HTML/HTML5/Vue/CSS3開發web前端頁面,兼容主流瀏覽器。展示層和數據層徹底分離,經過跨域實現先後端數據通訊。android

  2. APPios

    android,ios 基於原生開發。在app端實現https鏈路請求優化,作防盜鏈和DNS劫持處理。web

  3. 微信公衆號/微信小程序spring

    更新業務須要,將部分數據以微信公衆號+H5的方式展示;涉及硬件設備控制功能的系統部分模塊採用微信小程序,增長用戶操做體驗和訪問便捷性。sql

  4. Restful接口mongodb

    基於特定業務,採用Restful標準接口,對外提供數據服務。數據庫

2、通信層小程序

  1. 基於阿里雲CDN實現靜態數據加速;

  2. 基於阿里雲SLB,實現服務器負載均衡;

  3. 基於TCP/HTTP/HTTPS 三種通訊方式,實現先後端數據通訊。其中,TCP基於Netty實現;

3、服務層

核心業務基於Spring Cloud 架構實現微服務化。

系統架構設計(通用型),推薦給苦於寫文檔的同窗們,乾貨分享!

Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它爲基於JVM的雲應用開發中的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分佈式會話和集羣狀態管理等操做提供了一種簡單的開發方式。

微服務是能夠獨立部署、水平擴展、獨立訪問(或者有獨立的數據庫)的服務單元,springcloud就是這些微服務的大管家,採用了微服務這種架構以後,項目的數量會很是多,springcloud作爲大管家須要管理好這些微服務。

相關的組件包括以下:

一、Netflix Eureka:

服務中心,雲端服務發現,一個基於 REST 的服務,用於定位服務,以實現雲端中間層服務發現和故障轉移

二、Netflix Hystrix:

熔斷器,容錯管理工具,旨在經過熔斷機制控制服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。

系統架構設計(通用型),推薦給苦於寫文檔的同窗們,乾貨分享!

系統架構設計(通用型),推薦給苦於寫文檔的同窗們,乾貨分享!

三、Netflix Zuul:

是在雲平臺上提供動態路由,監控,彈性,安全等邊緣服務的框架。Zuul 至關因而設備和 Netflix 流應用的 Web 網站後端全部請求的前門,具備攔截和路由功能。

系統架構設計(通用型),推薦給苦於寫文檔的同窗們,乾貨分享!

四、Netflix Archaius:

配置管理API,包含一系列配置管理API,提供動態類型化屬性、線程安全配置操做、輪詢框架、回調機制等功能。能夠實現動態獲取配置,原理是每隔60s(默認,可配置)從配置源讀取一次內容,這樣修改了配置文件後不須要重啓服務就可使修改後的內容生效,前提使用archaius的API來讀取。

五、Spring Cloud Config:

俗稱的配置中心,配置管理工具包,讓你能夠把配置放到遠程服務器,集中化管理集羣配置,目前支持本地存儲、Git以及Subversion。

系統架構設計(通用型),推薦給苦於寫文檔的同窗們,乾貨分享!

六、Spring Cloud Bus:

事件、消息總線,用於在集羣(例如,配置變化事件)中傳播狀態變化,可與Spring Cloud Config聯合實現熱部署。

系統架構設計(通用型),推薦給苦於寫文檔的同窗們,乾貨分享!

七、Spring Cloud Sleuth:

日誌收集工具包,封裝了Dapper和log-based追蹤以及Zipkin和HTrace操做,爲SpringCloud應用實現了一種分佈式追蹤解決方案。

八、Spring Cloud Task:

主要解決短命微服務的任務管理,任務調度的工做,好比說某些定時任務晚上就跑一次,或者某項數據分析臨時就跑幾回。

4、數據層

  1. mongodb:存儲非結構化、關聯性弱的業務數據。如,控制器下發的指令數據,監測設備收集的傳感器數據,

  2. mysql:存儲事務性數據,以及關聯性將強的數據。如,訂單、資金、交易數據;

  3. HDSF:存儲監控設備上傳的圖片和視頻,以及報表文件;

  4. ElasticSearch:實現ELK,存儲日誌數據;

其餘:

一、認證系統:

採用雙token的方式完成jwt。其中accessToken 用於用戶身份認證。refreshToken用於當accessToken失效時從新生成。

用戶登陸:

系統架構設計(通用型),推薦給苦於寫文檔的同窗們,乾貨分享!

token認證訪問(accessToken有效)

系統架構設計(通用型),推薦給苦於寫文檔的同窗們,乾貨分享!

token認證訪問(accessToken失效,refreshToken有效):

系統架構設計(通用型),推薦給苦於寫文檔的同窗們,乾貨分享!

accessToken和refreshToken 都失效

系統架構設計(通用型),推薦給苦於寫文檔的同窗們,乾貨分享!

二、日誌系統:

日誌集中化管理,採用ELK解決方案。

系統架構設計(通用型),推薦給苦於寫文檔的同窗們,乾貨分享!

Elasticsearch:是個開源分佈式搜索引擎,提供蒐集、分析、存儲數據三大功能。它的特色有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。

Logstash :主要是用來日誌的蒐集、分析、過濾日誌的工具,支持大量的數據獲取方式。通常工做方式爲c/s架構,client端安裝在須要收集日誌的主機上,server端負責將收到的各節點日誌進行過濾、修改等操做在一併發往elasticsearch上去。

Kibana :也是一個開源和免費的工具,Kibana能夠爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,能夠幫助彙總、分析和搜索重要數據日誌。

三、會話治理

此處的會話是指Netty 會話管理。實現Channel自定義會話管理,如會話監控、會話超時、會話重建等。

四、DNS劫持處理

移動端產品在實際用戶環境下會面臨 DNS 劫持、耗時波動等問題,這些 DNS 環節的不穩定因素,致使後續網絡請求被劫持或是直接失敗, 對產品的用戶體驗產生很差的影響。

DNS 有 LocalDNS VS HTTP DNS之分

在長期的實踐中,互聯網公司發現 LocalDNS 會存在以下幾個問題:

  • 域名緩存: 運營商 DNS 緩存域名解析結果,將用戶導向網內緩存服務器;

  • 解析轉發 & 出口 NAT: 運營商 DNS 轉發查詢請求或是出口 NAT 致使流量調度策略失效;

爲了解決 LocalDNS 的這些問題,業內也催生了 HTTP DNS 的概念,它的基本原理以下:

本來用戶進行 DNS 解析是向運營商的 DNS 服務器發起 UDP 報文進行查詢,而在 HTTP DNS 下,咱們修改成用戶帶上待查詢的域名和本機 IP 地址直接向 HTTP WEB 服務器發起 HTTP 請求,這個 HTTP WEB 將返回域名解析後的 IP 地址。

好比 DNSPod 的實現原理以下:

系統架構設計(通用型),推薦給苦於寫文檔的同窗們,乾貨分享!

相比 LocalDNS, HTTP DNS 會具有以下優點:

  • 根治域名解析異常: 繞過運營商的 DNS,向具有 DNS 解析功能的 HTTP WEB 服務器發起查詢;

  • 調度精準: HTTP DNS 可以直接獲取到用戶的 IP 地址,從而實現準確導流;

  • 擴展性強: 自己基於 HTTP 協議,能夠實現更強大的功能擴展;

本文轉自:https://www.toutiao.com/a6556087350529622535/?tt_from=mobile_qq&utm_campaign=client_share&timestamp=1526464349&app=news_article&utm_source=mobile_qq&iid=32174471432&utm_medium=toutiao_android

相關文章
相關標籤/搜索