推薦??:
- 接近100K star 的Java學習/面試指南
- Github 95k+點贊的Java面試/學習手冊.pdf
今天給小伙伴們推薦一個朋友開源的面試刷題系統,
這篇文章我會從系統架構設計層面詳解介紹這個開源專案,并且會把微服務常用的一些技術都介紹一下,即使你對這個專案不感興趣,也能了解到很多微服務相關的知識,美滋滋!
昨晚肝了很久~原創不易,若有幫助,求贊求轉發啊!
不得不說,這個刷題系統確實是有點東西,你真的值得擁有!首先,這是一個微服務的專案,其次這個系統涵蓋了市面上常用的主流技術比如 SpringBoot、Spring Cloud 等等(后面會詳細介紹),
不論是你想要學習分布式的技術,還是想找一個實戰專案練手或者作為自己的專案經驗,這個專案都非常適合你,
另外,因為專案作者提供了詳細的技術檔案,所以你不用擔心上手太難!

效果圖
我們先來看看這個面試刷題系統的效果圖,這里我們只展示的是這個系統的前端(微信小程式),后臺管理系統這里就不展示了,

可以看到,除了少部分地方的顏色搭配比較難看之外,頁面整體 UI 還是比較美觀的,
技術堆疊
再聊聊大家最關心的問題:“這套系統的技術堆疊是什么樣的呢?”,
這套系統采用了目前企業都在用的主流技術:SpringBoot(基礎框架)、Spring Cloud(微服務)、MyBatis(ORM框架)、Redis(快取)、MySql(關系型資料庫)、MongoDB(NoSQL)、RabbitMQ(訊息佇列)、Elasticsearch(搜索引擎),并且,這個系統是以 Docker 容器化的方式進行部署的,非常實用!
系統架構設計
了解了技術堆疊之后,那必然需要簡單了解一下整個 系統的架構設計 ,這是系統的靈魂所在了(圖源:PassJava 官方檔案),

網關
網關負責認證授權、限流、熔斷、降級、請求分發、負載均衡等等操作,一般情況下,網關一般都會提供這些功能,
這里使用的是 Spring Cloud Gateway 作為網關,Spring Cloud Gateway 是 Spring Cloud 官方推出的第二代網關框架,目的是取代 netflix 的 Zuul 網關,
注冊中心和配置中心
注冊中心和配置中心這塊使用的是阿里巴巴開源的 Nacos ,Nacos 目前屬于 Spring Cloud Alibaba 中的一員,主要用于發現、配置和管理微服務,類似于 Consul、Eureka,并且,提供了分布式配置管理功能,
Nacos 的基本介紹如下(圖源:官網檔案-什么是 Nacos):

詳解介紹一下 Nacos 在這個專案中提供的兩個核心功能:
- 注冊中心 :API 網關通過注冊中心實時獲取到服務的路由地址,準確地將請求路由到各個服務,
- 配置中心 :傳統的配置方式需要重新啟動服務,如果服務很多,則需要重啟所有服務,非常不方便,通過 Nacos,我們可以動態配置服務,并且,Nacos 提供了一個簡潔易用的 UI 幫助我們管理所有的服務和應用的配置,
關于配置中心,我們這里再拓展一下,除了 Nacos ,還有 Apollo、SpringCloud Config、K8s ConfigMap 可供選擇,
分布式鏈路追蹤
不同于單體架構,在分布式架構下,請求需要在多個服務之間呼叫,排查問題會非常麻煩,我們需要分布式鏈路追蹤系統來解決這個痛點,
分布式鏈路追蹤這塊使用的是 Twitter 的 Zipkin ,并且結合了 Spring Cloud Sleuth ,
Spring Cloud Sleuth 只是做一些鏈路追蹤相關的資料記錄,我們可以使用 Zipkin Server 來處理這些資料,
相關閱讀:《40 張圖看懂分布式追蹤系統原理及實踐》 ,
監控系統
監控系統可以幫助我們監控應用程式的狀態,并且能夠在風險發生前告警,
監控系統這塊使用的是 Prometheus + Grafana,Prometheus 負責收集監控資料,Grafana 用于展示監控資料,我們直接將 Grafana 的資料源選擇為 Prometheus 即可,
關于監控系統更詳細的技術選型,可以看這篇文章:《監控系統選型看這一篇夠了!選擇 Prometheus 還是 Zabbix ?》 ,
訊息佇列
我們知道,訊息佇列主要能為系統帶來三點好處:
- 通過異步處理提高系統性能(減少回應所需時間),
- 削峰/限流
- 降低系統耦合性,
常用的訊息佇列有:RabbitMQ(本系統所采用的方案)、Kafka、RocketMQ,
快取
快取這里使用的是 Redis ,老生常談了,這里就不再多做介紹,
另外, 為了保證快取服務的高可用,我們使用 Redis 官方提供了一種 Redis 集群的解決方案 Redis Sentinel 來管理 Redis 集群,
資料庫
資料庫這里使用的是 MySQL ,并使用主從模式實作讀寫分離,以提高讀性能,
物件存盤
由于是分布式系統,傳統的將檔案上傳到本機已經沒辦法滿足我們的需求了,
由于自己搭建分布式檔案系統也比較麻煩,所以物件存盤這里我們使用的是阿里云 OSS,它主要用于存盤一些檔案比如圖片,
快速開發腳手架
另外,為了后臺的快速搭建這里使用的是 renren-fast 快速開發腳手架,使用這個腳手架配合上代碼生成器 renren-generator ,我們可以快速生成 70%左右的前后端代碼,絕對是快速開發專案并交付以及接私活的利器了!
我在之前的也推薦過這個腳手架,詳情請看下面這兩篇文章:
- 聽說你要接私活?Guide 連夜整理了 5 個開源免費的 Java 專案快速開發腳手架,
- 解放雙手,再來推薦 5 個 Java 專案開發快速開發腳手架!專案經驗和私活都不愁了!
總結
這篇文章我主要從架構設計層面分析了朋友開源的這個基于微服務的刷題系統,
當然了,朋友使用微服務開發這個專案的主要目的也是為了自己實踐微服務相關的知識,同時也是為了給需要微服務相關實戰專案經驗的小伙伴一個可以學習的專案,不然的話,直接用單體就完事了,完全可以支撐這個專案目前的并發量以及可預見的未來的并發量,
- 專案地址:https://github.com/Jackson0714/PassJava-Platform
- 檔案地址:http://jayh2018.gitee.io/passjava-learning/#/
再來一次!昨晚肝了很久~原創不易,若有幫助,求贊求轉發啊!
我的Github地址:Snailclimb - Overview

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/241712.html
標籤:Java
上一篇:關于DriverManager.getConnection()里的增強實作
下一篇:SpringBoot-組態檔
