基於SpringCloud的面試刷題系統,項目經驗統統搞定

2021-01-07 馬家軍談Java

來源:https://mp.weixin.qq.com/s/WWND70GFun2W9Dei5YAAyQ

今天給小夥伴們推薦一個朋友開源的面試刷題系統。

這篇文章我會從系統架構設計層面詳細介紹這個開源項目,並且會把微服務常用的一些技術都介紹一下。即使你對這個項目不感興趣,也能了解到很多微服務相關的知識。美滋滋!

昨晚肝了很久~原創不易,若有幫助,求贊求轉發啊!

不得不說,這個刷題系統確實是有點東西,你真的值得擁有!首先,這是一個微服務的項目,其次這個系統涵蓋了市面上常用的主流技術比如 SpringBoot、Spring Cloud 等等(後面會詳細介紹)。

不論是你想要學習分布式的技術,還是想找一個實戰項目練手或者作為自己的項目經驗,這個項目都非常適合你。

另外,因為項目作者提供了詳細的技術文檔,所以你不用擔心上手太難!

PassJava文檔

效果圖

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

PassJava前端展示

可以看到,除了少部分地方的顏色搭配比較難看之外,頁面整體 UI 還是比較美觀的。

再聊聊大家最關心的問題:「這套系統的技術棧是什麼樣的呢?」。

這套系統採用了目前企業都在用的主流技術:SpringBoot(基礎框架)、Spring Cloud(微服務)、MyBatis(ORM框架)、Redis(緩存)、MySql(關係型資料庫)、MongoDB(NoSQL)、RabbitMQ(消息隊列)、Elasticsearch(搜尋引擎)。並且,這個系統是以 Docker 容器化的方式進行部署的。非常實用!

系統架構設計

了解了技術棧之後,那必然需要簡單了解一下整個 系統的架構設計,這是系統的靈魂所在了(圖源:PassJava 官方文檔[1])。

網關

網關負責認證授權、限流、熔斷、降級、請求分發、負載均衡等等操作。一般情況下,網關一般都會提供這些功能。

這裡使用的是 Spring Cloud Gateway作為網關。Spring Cloud Gateway 是 Spring Cloud 官方推出的第二代網關框架,目的是取代 netflix 的 Zuul 網關。

註冊中心和配置中心

註冊中心和配置中心這塊使用的是阿里巴巴開源的 Nacos。Nacos 目前屬於 Spring Cloud Alibaba 中的一員。主要用於發現、配置和管理微服務,類似於 Consul、Eureka。並且,提供了分布式配置管理功能。

Nacos 的基本介紹如下(圖源:官網文檔-什麼是 Nacos[2]):

nacos_map

詳細介紹一下 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[3]快速開發腳手架。使用這個腳手架配合上代碼生成器 renren-generator[4] ,我們可以快速生成 70%左右的前後端代碼。絕對是快速開發項目並交付以及接私活的利器了!

我在之前的也推薦過這個腳手架,詳情請看下面這兩篇文章:

聽說你要接私活?Guide 連夜整理了 5 個開源免費的 Java 項目快速開發腳手架。解放雙手,再來推薦 5 個 Java 項目開發快速開發腳手架!項目經驗和私活都不愁了!總結

這篇文章我主要從架構設計層面分析了朋友開源的這個基於微服務的刷題系統。

當然了,朋友使用微服務開發這個項目的主要目的也是為了自己實踐微服務相關的知識,同時也是為了給需要微服務相關實戰項目經驗的小夥伴一個可以學習的項目。

不然的話,直接用單體就完事了,完全可以支撐這個項目目前的並發量以及可預見的未來的並發量。

相關焦點

  • SpringCloud常見面試題(2020最新版)
    整體架構 主要項目 Spring Cloud的子項目,大致可分成兩類,一類是對現有成熟框架"Spring Boot化"的封裝和抽象,也是數量最多的項目;第二類是開發了一部分分布式系統的基礎設施的實現,如Spring Cloud Stream扮演的就是kafka, ActiveMQ這樣的角色。
  • 2021-Java後端工程師面試指南-(SpringBoot+SpringCloud)
    「https://www.processon.com/view/link/600ed9e9637689349038b0e4」上面的是腦圖地址叨絮分布式系統開發,微服務架構的一種主流實現方式,當然在面試中是必不可少的拉。
  • 基於Spring Boot和Spring Cloud實現微服務架構學習
    >本公眾號主要推送java技術、web(html/js/ui)技術、資料庫技術、web項目開發經驗、IT生活、IT熱點,讓有經驗的人知識面更廣、技術更紮實、工資更高,讓0基礎的人秒變大牛,讓你的生活更積極,更有樂趣。點擊上方的藍字,這樣您每天可以看到更多的java知識和資訊!完全是免費訂閱,請放心關注。
  • leetcode如何刷題?(參考)
    也歡迎正閱讀的你,可以給我一些你的經驗、想法、建議,可以在底部評論給我,或者私人微信告訴我~1、建議未刷過題的人按著順序來。
  • 基於Spring Boot和Spring Cloud實現微服務架構
    Spring 頂級框架談及微服務,作為當前主流的企業框架Spring,它提供了一整套相關的頂級項目,能讓開發者快速的上手實現自己的應用,今天就介紹下Spring旗下各個頂級項目:Spring IO platform:用於系統部署,是可集成的,構建現代化應用的版本平臺,具體來說當你使用maven
  • 基於 Spring Boot 和 Spring Cloud 實現微服務架構
    Spring Boot:旨在簡化創建產品級的 Spring 應用和服務,簡化了配置文件,使用嵌入式web伺服器,含有諸多開箱即用微服務功能,可以和spring cloud聯合部署。Spring Framework:即通常所說的spring 框架,是一個開源的Java/Java EE全功能棧應用程式框架,其它spring項目如spring boot也依賴於此框架。
  • 基於Spring Boot+Cloud構建微雲架構
    Spring 頂級框架談及微服務,作為當前主流的企業框架Spring,它提供了一整套相關的頂級項目,能讓開發者快速的上手實現自己的應用,今天就介紹下Spring旗下各個頂級項目:Spring IO platform:用於系統部署,是可集成的,構建現代化應用的版本平臺,具體來說當你使用maven
  • 可以秒殺全場的SpringCloud微服務電商實戰項目,文檔賊全
    很多程式設計師每項技術單獨拿出來有可能很厲害,例如:springcloud、springboot、redis、nginx、mysql、rabbitMq等,但是普遍缺乏將所有的這些技術整合到一起,從前端到後端,從開發到部署上線,從每個知識點到整體的設計。
  • Spring Cloud-Hystrix 斷路器
    1.Hystrix是什麼Hystrix(strix)是Netflix(span>在分布式系統中,總會有一些必不可免發生的問題,比如超時、異常、服務提供者不可用等,如何保證在依賴出問題的情況下,不會導致整體服務失敗,對延遲和故障提供更強大的容錯能力,這個就是Hystrix需要做的事情。
  • SpringCloud Gateway動態路由
    概述線上項目發布一般有以下幾種方案:停機發布藍綠部署滾動部署上邊介紹的幾種發布方案,主要是引出我們接下來介紹的 spring-cloud-gateway 動態路由,我們可以基於動態路由、負載均衡和策略加載去實現灰度發布。當然現在有很多開源的框架可以實現灰度發布,這裡只是研究學習。
  • springcloud實踐二:gateway網關詳解
    Spring Cloud Gateway基於Spring Boot 2.x, Spring WebFlux, 由Spring Webflux提供Netty的運行環境。它不能在傳統Servlet容器中工作,也不能在構建為WAR時工作。
  • springcloud五大組件
    首先我們來看springcloud是什麼?它是微服務架構集大成者,基於springboot構建,可以將一系列優秀組件進行完美整合。對熟悉的程式設計師來說,上手不麻煩,對新手來說,就需要了解springcloud架構再去學習。
  • Spring Cloud Hoxton.RELEASE 版本發布!異步即未來
    <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies
  • Spring Cloud 2020.0.0 正式發布,移除大量模塊
    代號"Ilford",伊爾福德)版本正式發布,目前已可以從 maven 中央倉庫獲取,坐標如下:<dependencyManagement>    <dependencies>        <dependency>            <groupId>org.springframework.cloud
  • 擁抱Kubernetes,再見了Spring Cloud
    這一需求促成了2013年初開始的Spring Boot項目。2014年4月,Spring Boot 1.0.0發布。從那以後,一些Spring Boot小版本開始出現。Spring boot可以說是Java中開發基於RESTful微服務Web應用的最快方法之一。
  • 使用Spring Cloud Data Flow 來實現數據流處理
    那麼,對於數據密集型(Data Intensive)的應用,比如定期執行的批處理(Batch Processing)或持續的實時數據流處理(Stream Processing),Spring社區是否也有對應的開源項目可以方便大家日常的工作呢?
  • SpringCloud 必知的18道面試題
    今天跟大家分享下SpringCloud常見面試題的知識。
  • 安全的Spring Cloud配置
    安全的Spring Cloud配置如果您要在Spring Boot和Spring Cloud之上構建微服務架構,那麼我幾乎可以確定您正在使用的項目之一是Spring Cloud Config。Spring Cloud Config負責實現一種最流行的微服務模式,稱為分布式配置。
  • 4年 46 個版本,一文讀懂 Spring Cloud 發展歷史
    目前處於維護模式的 Netflix 大部分項目都會被刪除(spring-cloud-netflix Github 項目已經刪除了這些維護模式的項目);簡化 Spring Cloud 發布列車。spring-cloud-commons 模塊對熔斷器模式客戶端調用模型進行統一(早期有個單獨的項目 spring-cloud-circuit-breaker,後來合併到 spring-cloud-commons 模塊);消息總線:Message Bus。
  • 阿里巴巴SpringCloud開源教程、文檔合集,趕緊收藏
    cloud config將配置存儲在資料庫中Spring Cloud Sleuth 之Greenwich版本全攻略Spring Boot Admin 2.1.0 全攻略阿里分布式事務框架GTS開源了!面試請不要再問我Spring Cloud底層原理微服務註冊中心如何承載大型系統的千萬級訪問?