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

2021-01-08 馬家軍談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 項目開發快速開發腳手架!項目經驗和私活都不愁了!總結

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

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

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

相關焦點

  • 擁抱Kubernetes,再見了Spring Cloud
    這一需求促成了2013年初開始的Spring Boot項目。2014年4月,Spring Boot 1.0.0發布。從那以後,一些Spring Boot小版本開始出現。Spring boot可以說是Java中開發基於RESTful微服務Web應用的最快方法之一。
  • Spring Cloud 和 Dubbo,到底用哪個好?
    從公司整體規劃:我不會選擇很久沒人維護的dubbo,重啟之後也未必是原班人馬從程式設計師招聘難度:招springcloud的程式設計師會更好招,因為更新更炫從系統結構簡易程序:springcloud的系統結構更簡單
  • 從零搭建 Spring Cloud 服務(超詳細)
    ps: 博主基於Maven+idea搭建。 另外SpringCloud需要基於springboot搭建。--引入springboot-parent父項目--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId
  • 初識Spring Cloud Stream,什麼是消息驅動微服務框架
    通過使用 Spring Cloud Stream 可以有效簡化開發人員對消息中間件的使用複雜度,讓系統開發人員可以有更多的精力關注於核心業務邏輯的處理。Spring Cloud Stream 基於 Spring Boot 實現,所以它秉承了 Spring Boot 的優點,自動化配置功能可以幫助我們快速上手使用。
  • Java面試題中Spring常問問題
    IOC - 控制反轉 AOP - 面向切面編程可以將應用業務邏輯和系統服務分離,以實現高內聚。 容器 - Spring 負責創建和管理對象(Bean)的生命周期和配置。 MVC - 對 web 應用提供了高度可配置性,其他框架的集成也十分方便。
  • 繼「劉強東」之後京東的第二位程式設計師「呂科」spring面試題講解
    ,但是具體面試內容是什麼,2020年7月1日,京東的第二位程式設計師「呂科」講解最新面試信息:一面:也就是基礎面試二面:資料庫基礎面試三面:綜合面試四面:HR面試今天講解的是京東spring面試問題答案及spring常見面試問題答案1、什麼是Spring框架?
  • Spring Boot面試題(2020最新版)
    Apache Kafka 是一個分布式發布 - 訂閱消息系統。它是一個可擴展的,容錯的發布 - 訂閱消息系統,它使我們能夠構建分布式應用程式。這是一個 Apache 頂級項目。Kafka 適合離線和在線消息消費。什麼是 Swagger?你用 Spring Boot 實現了它嗎?
  • 面試被問spring的aop的機制,這樣答
    參加過面試的或者是準備要參加面試在刷面試題的小夥伴,肯定遇到過「spring的aop的機制是什麼?」這個問題。刷過面試題的小夥伴肯定要說了,aop的機制是代理啊。那代理又是怎麼回事呢?java的代理就是這樣,在完成原功能(服務、實現類)之外通過另外做一些事情就完成了spring的aop了。好了,今天就講這些吧。以後會再寫一些設計模式的內容,到時候會再詳細謝謝代理模式的。歡迎大家關注我,有問題也歡迎留言評論。
  • 詳解SpringCloud中RabbitMQ消息隊列原理及配置,一篇就夠!
    2、應用解耦場景:用戶下單後,訂單系統需要多渠道通知用戶。下單服務系統:用戶使用下單服務後,將下單信息寫入資料庫,下單成功。rabbitmq已經被spring-boot做了整合訪問實現。spring cloud也對springboot做了整合邏輯。所以rabbitmq的依賴可以在spring cloud中直接使用。
  • 面試題:SpringBoot的啟動流程
    面試題:SpringBoot的啟動流程不管是用springboot開發還是面試,都需要對SpringBoot的啟動流程所了解。的實現類搜索META-INF\spring.factories文件配置的ApplicationListenerr的實現類推斷MainApplication的Class
  • springcloud的五大組件是什麼?讀完這篇就懂了
    概括而言,springcloud的五大組件包括Netflix Eurek,Netflix Ribbon,Netflix Hystrix,Netflix Zuul和Spring Cloud Config。
  • 迷茫期後面試阿里奮發圖強8個月,如願拿到offer,定級阿里P7
    分享下這段時期面試總結的一些經驗1、面試一定要帶簡歷,這是態度問題,不然容易第一印象就不好。2、簡歷上最核心的2點,1是自己掌握的技術棧說明,讓面試官清楚知道你掌握技術棧;2是項目中使用了哪些技術棧,體現自己對這些技術棧的實際項目的運用情況。
  • SpringCloud服務間通信方式
    總結:在springcloud中服務間調用方式主要是使用 http restful方式進行服務間調用1|0 1.基於RestTemplate的服務調用在上面的基礎上,使用的是consul註冊,pom.xml文件1|1 1.
  • 工作3年,去參加大廠面試Java開發,結果被Spring問自閉了……
    前言:又到了金九銀十的日子,前幾天好朋友發來喜訊,跳槽一個月了,面試了有二十家公司,在面試官的狂轟濫炸下終於拿到了不錯的offer。但是比較可惜的是朋友內推的大廠面試失敗了,而且還是在Spring上,就令人挺無語的。
  • 基於springboot2+mybatis+layui在線心理諮詢管理系統源碼分享
    基於springboot2+mybatis+layui在線心理諮詢管理系統源碼分享spring boot2開發的在線心理諮詢管理系統運行環境>jdk8+mysql5.7+IntelliJ IDEA+maven項目技術spring boot2+mybatis+thymeleaf+layui項目截圖如果您需要獲取到這個項目的源碼進行學習的話~ 可以按照獲取方式
  • 7.spring cloud系列教程第六篇-Eureka集群版
    spring cloud系列教程第六篇-Eureka集群版本文主要內容:1:Eureka執行步驟理解2:集群原理3:Eureka集群搭建4:修改payment和order項目註冊到集群中本文是由凱哥(凱哥Java:kagejava)發布的《spring cloud系列教程》教程的總第六篇:《spring cloud系列教程第六篇-Eureka集群版》。
  • 工作五年,一年內我靠這系列java面試寶典從13K到大廠30K
    我認為對於面試以及進階最佳的學習方法莫過於刷題+博客+書籍+總結!前三者我將淋漓盡致地揮毫於這篇文章中,至於總結要靠個人。實際上越到後面你越會發現面試並不難,其次就是在刷題的過程中有沒有去思考,刷題只是次之,這又是一個層次了,這裡暫時不提後面再談。
  • Spring全家桶、Dubbo、分布式、消息隊列後端必備全套開源項目
    Spring Boot 專欄基於 Spring Boot 2.X 版本的深度入門教程。市面上的 Spring Boot 基礎入門文章很多,但是深度入門文章卻很少。《Spring Cloud Alibaba 服務調用 Dubbo 入門》 對應 labx-07-spring-cloud-alibaba-dubbo《Spring Cloud Alibaba 服務容錯 Sentinel 入門》 對應 labx-04-spring-cloud-alibaba-sentinel
  • 國家公務員面試2019年2月22日海事系統面試題
    【導讀】華圖國家公務員考試網同步華圖教育發布:國家公務員面試2019年2月22日海事系統面試題,詳細信息請閱讀下文!如有疑問請加【2021國家公務員考試微信客服】 ,更多資訊請關注寧夏華圖微信公眾號(ningxiaht),國家公務員培訓諮詢電話:0951-6028571/6027571 18295188220,微信號:HT15202602573   國家公務員面試2019年2月22日海事系統面試題   1.有一個工作項目,小王一直辛苦工作,但做到一半時
  • 基於SpringBoot和Vue的企業級中後臺項目
    2020年最新的常問企業面試題大全以及答案免費領取大家想看什麼類型的文章呢留言告訴亦夏哦,亦夏會在一周內進行推送~簡介的標籤頁,做到標籤頁該緩存的時候緩存,比如左右切換等,不該緩存的時候不緩存,比如新建,表單提交結束等前端常量維護: vue-enum,拒絕出現魔法數字,代碼不可維護的現象全新的基於前端的權限設計(忘掉傳統的權限設計吧,已經不適合這個前端時代)基於