前言
系統的技術架構(相對于業務架構),主要會考慮下面5個點:
高性能、高可用、可伸縮、可擴展、安全,
一、高性能
1、架構層面
1.1、快取
瀏覽器快取
CDN快取
反向代理快取
本地快取
分布式快取
快取注意的點:
1)避免快取穿透:把空物件保存在記憶體快取里
2)快取與資料庫的資料一致性:Cache Aside模式:先更新DB,再清除快取,DB主從同步完成后,再清理快取,
1.2、異步
本地佇列
分布式佇列
1.3、資源復用
執行緒池、連接池、物件池
單例
2、代碼層面
2.1、多執行緒
執行緒池,執行緒數與CPU核數相關:看IO密集型還是計算密集型
執行緒數 = (任務執行時間 / (任務執行時間 - IO等待時間))* CPU核數
2.2、記憶體:空間換時間
2.3、鎖
盡量不用鎖
非要用鎖,盡量降低鎖粒度、控制鎖總數、盡量使用無鎖框架CAS,putIfAbsent等
2.4、資料結構的時間復雜度
Skiplist 替代 TreeMap
2.5、訪問量大時可批量請求,降低請求次數
Kafka producer批量請求
3、DB層面
3.1、索引
InnoDB引擎 默認BTree+ 索引
3.2、SQL優化
3.3、NoSQL
4、附錄:衡量性能指標
4.1、TPS & QPS
4.2、系統性能引數:CPU Load Average, CPU User Usage, 記憶體,網路IO,磁盤IOPS
CPU Load Average:平均每核CPU,理想值在100%
CPU User Usage:理想值在70%以內
4.3、回應時間

4.4、并發數:并發訪問數、在線用戶數
二、高可用
1、冗余:資料冗余 & 依賴服務冗余
2、限流、降級、熔斷
3、故障自愈
4、自動擴縮容
5、自動化運維
6、自動化測驗
7、預發布測驗
8、灰度發布
9、服務自動失效轉移
10、多維度監控,告警逐步升級
維度1:客戶端APM打點 & Server端監控
維度2:業務級監控 & 系統指標引數監控
自動化巡檢,發現問題
三、可伸縮
1、應用層可伸縮:無狀態服務
微服務的拆分方式:
1)橫向拆分:拆分成職責不同的應用:如chatroom和CMP
2)縱向拆分:如chatroom和chatroommessage服務
每個微服務都要可水平擴展
2、快取層可伸縮:Redis容器云方案
Redis Cluster集群模式的負載均衡策略:槽位遷移
3、關系型資料庫:在DB上游通過Proxy保證可伸縮
4、NoSQL:天然可伸縮
四、易擴展
易擴展主要指微服務的拆分時保證每個微服務“高內聚、低耦合”
1、應用間通過佇列異步解耦
2、分布式微服務
五、安全
1、密碼和手機校驗碼做身份認證
用戶對于開放http API介面訪問時,要攜帶秘鑰做簽名認證
2、登錄、交易、敏感資料等,對網路通信做加密
加解密方式:
1)單向散列加密:如MD5,SHA等,通常加密后加點salt,
單向加密不可逆,僅能比較加密后資料是否一致,如用于做密碼校驗,但不能還原密碼,
2)對稱加密:即加密和解密用同一個秘鑰,如DES,RC等
優點:演算法簡單、性能快
缺點:加解密用同一個秘鑰,不夠安全,
3)非對稱加密:加密和解密用不同的秘鑰,如RSA等
一個對外公開,叫公鑰;一個只有網站系統知道,叫私鑰
用公鑰加密的資訊,必須用私鑰才能解密;反之,用私鑰加密的資訊,用公鑰才能解開,
3、請求編碼轉換,避免XSS攻擊、SQL注入等
1)XSS(Cross Site Script):指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使用戶加載并執行攻擊者惡意制造的網頁程式,
這些惡意網頁程式通常是JavaScript,但實際上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML,
攻擊成功后,攻擊者可能得到包括但不限于更高的權限(如執行一些操作)、私密網頁內容、會話和cookie、密碼等各種內容,
防攻擊手段:
1)消毒:對某些HTML危險字符轉義,如">"轉義為“>”等
2)HttpOnly:禁止瀏覽器JS訪問帶有HttpOnly屬性的cookie,即對于存敏感資訊的cookie,如用戶密碼等,未該cookie添加HttpOnly屬性,防止被JavaScript竊取
2)SQL注入
通過預編譯引數系結,如ibatis, hibernate等框架都實作了參與預系結,
4、敏感詞過濾
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287841.html
標籤:其他
