淺談分布式架構搭建
- 基礎
- 理念
- 技術選型
- 后端技術設計
- 總體架構設計
- 關鍵案例設計
架構師搭建架一般優先考慮的是安全性、穩定性、高吞吐量,哈哈,菜鳥的我讓我裝個B,回憶一下以前架構搭建
基礎
理念
CAP(一致性、可用性、磁區容錯性)是沒法三者均做到,最多能實作兩個,在系統搭建是,這里系統搭建探討優先考慮幾個點,由高到低為安全性、穩定性、高吞吐量(系統方案的討論在“關鍵方案設計”)
技術選型
其實在一個框架的技術選型根據實際使用業務場景來決定的,還有通過多個技術比對優選技術型別,比對的方式我當時個人能力有限,充分利用自己行業知識和咨詢身邊人力資源以及查詢行業論文,熟話說我不能成為巨人,但是站在巨人的肩膀上也能看到一定高度,
這里主要講前后端和移動端,前端vue、后端java、移動端android WebView和h5, 下面來簡介如何簡單技術,具體在后面方案里更多描述
前端
前端基礎框架使用vue,頁面渲染PC端element-ui和移動端VUX,我們最好對element-ui進行二次型封裝,定好開發規范,推薦使用eslint約束和typeScript,開發工具用vs code和工具相關配置,以前個人搭建設定為如下
vs code:
{
"files.autoSave": "off",
"workbench.startupEditor": "welcomePage",
"vetur.validation.template": false,
"update.channel": "none",
"editor.formatOnSave": false,
"editor.tabSize": 2,
"editor.fontSize": 16,
"editor.detectIndentation": false,
"vetur.format.defaultFormatter.js": "vscode-typescript",
"vetur.format.defaultFormatter.html": "js-beautify-html"
}
eslint設計規范如下:
module.exports = {
//此項是用來告訴eslint找當前組態檔不能往父級查找
root: true,
globals: {
http: true,
$: true,
Swiper: true
},
parser: 'babel-eslint',
//此項是用來指定javaScript語言型別和風格,sourceType用來指定js匯入的方式,默認是script,此處設定為module,指某塊匯入方式
parserOptions: {
ecmaVersion: 6,
sourceType: 'module'
},
//此項指定環境的全域變數,下面的配置指定為瀏覽器環境
env: {
browser: true,
node: true
},
// https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style
// 此項是用來配置標準的js風格,就是說寫代碼的時候要規范的寫,如果你使用vs-code我覺得應該可以避免出錯
extends: 'standard',
// required to lint *.vue files
// 此項是用來提供插件的,插件名稱省略了eslint-plugin-,下面這個配置是用來規范html的
plugins: [
'html'
],
// add your custom rules here
// 下面這些rules是用來設定從插件來的規范代碼的規則,使用必須去掉前綴eslint-plugin-
// 主要有如下的設定規則,可以設定字串也可以設定數字,兩者效果一致
// 'off' -> 0 關閉規則
// 'warn' -> 1 開啟警告規則
//'error' -> 2 開啟錯誤規則
// 了解了上面這些,下面這些代碼相信也看的明白了
rules: {
// allow async-await
'generator-star-spacing': 'off',
// 回呼
'standard/no-callback-literal': 0,
// allow debugger during development
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
// 強制在 function的左括號之前使用一致的空格
'space-before-function-paren': 0
}
}
后端java
關注幾個關鍵字:java8、jvm調優和設計,maven、git、阿里巴巴規約(若要積分,找我給)、spring boot/cloud基礎框架(sofa或者spring cloud alibaba)、docker或者linux部署容器,我們Java版本用jdk8+,推薦使用apache開原始碼和阿里巴巴規約,使用開發工具ide,安裝阿里巴巴規約插件,構建工具用maven,同時搭建自己maven構件庫,使用版本控制工具為git或者gitlab,
移動端WebView和h5
其實對于金融行業來說移動端有更好的互聯網產品落地,比如mpass,這里只是簡單講解,大家可以撰寫WebView實作和前端h5頁面實作js互動,h5可以用VUX.
后端技術設計
這里只是技術簡介,不做細談,此外,搭建技術方案時,不是一上來就什么RPC或者什么Redis集群快取,這是錯誤做法,我們每一個架構都是居于業務驅動而搭建的,也就設計DDD設計理念,建議采用的基礎架構:技術架構spring boot、資料庫持久層架構mybatis、資料庫mysql分庫分表(水平拆分、垂直拆分)、方案設計(visio&UML&ppt案例架構設計、power design資料庫設計、axure原型設計)、介面除錯工具(swagger-ui和postman),下面是個人以前搭建系統的技術選型,黑色是個人采用技術
微服務架構RPC:spring cloud、spring cloud alibaba、dubbo,個人以前用spring cloud,后來流行了spring cloud alibaba
監控: Cat、Zipkin、Pinpoint、SkyWalking
注冊中心:consul、zookeeper、eurake,以前據行業說建議用consul,后來中國閉源,
配置中心:apollo、nacos、spring cloud config,動態配置
快取工具:redis或者memcache,可以結合spring session使用
分布式事務:2PC、TCC理念,redis實作事務,MQ實作異步,zookeeper方案或者資料庫ACID特性,
限流和熔斷:Hystrix熔斷,通過sentinel限流
API網關調度:spring cloud gateway還有個人撰寫的網關……
資料傳輸:采用json傳輸,Jackson(ObjectMapper)和gson以及DTO,VO,VO,PO理念
持久層訪問:mybatis
訊息佇列:RabbitMQ、RocketMQ、ActiveMQ、Kafka、IBMMQ,但是這里建議用RocketMQ
總體架構設計
結合上面技術選型完后,那就是撰寫結構設計圖樓,主要如下
- 邏輯架構
- 系統集成架構
- 物理部署結構
- 資料庫設計圖
- 系統中心模塊拆分
- 流量控制、網關、中心模塊拆分
- 雙活方案設計,同城雙活要考慮的問題是快取
關鍵案例設計
關鍵方案設計是居于DDD領域驅動設計,其實就是把大方案拆分成小方案,各自獨立完成,小方案再合并方案,最終實作大方案,下面需要考慮的點(個人)
- 高并發查詢(分庫分表,sql優化以及用mybatis的cursor查詢,游標查詢關閉的,所以要獲取sqlsession或者@Transational事務)
- 無會話機制(資料庫快取或者第三方快取工具redis)
- 日志規范(日志脫敏過濾器、鏈路跟蹤雪花演算法)
- 監控平臺(資料埋點cat)
- 公共組件(HandlerInterceptor攔截器統一處理上傳下載、資料庫選型和shardingsphere、redis重復提交、token冪等校驗、sm2簽名驗簽)
- 安全設計(跨站腳本攻擊過濾器、Filter和statement預處理防sql攻擊、跨站偽造攻擊跨域校驗)
- 前后分離(動靜分離,nginx服務器,靜態檔案服務器)
- 統一報文回傳
- 統一例外處理(ControllerAdvice),
- JVM引數設定和GC演算法設定
- 性能壓測Jmeter
更多關注敬請期待,希望有空再寫每個技術點的使用教程!
過去的作業筆記:
1、概述
安全性、穩定性、apache和互聯網產品落地案例
使用技術
語言、微服務架構、日志監控、監控、RPC框架、配置中心、注冊中心、
分布式事務、快取工具、分布式事務、限流和熔斷、API網關調度、資料傳輸
swagger-ui和postman
構建工具、迭代工具、部署工具(Docker和linux)
開發工具
設計理論:DDD
2、總體架構設計
邏輯架構
系統集成架構
3、關鍵方案設計
高并發查詢
無會話機制
日志規范(日志脫敏、鏈路跟蹤)
監控平臺(資料埋點)
公共組件(上傳下載、資料庫、重復提交、冪等校驗)
安全設計(跨站腳本攻擊、sql攻擊、跨站偽造攻擊)
前后分離(動靜分離)
統一報文回傳,統一例外處理,
5、未來發展計劃
流量控制、網關、中心模塊拆分
雙活方案設計
概念性描述
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/236060.html
標籤:其他
上一篇:2020-12-16
