推薦👍:html
今天給小夥伴們推薦一個朋友開源的面試刷題系統。前端
這篇文章我會從系統架構設計層面詳解介紹這個開源項目,而且會把微服務經常使用的一些技術都介紹一下。即便你對這個項目不感興趣,也能瞭解到不少微服務相關的知識。美滋滋!java
昨晚肝了好久~原創不易,如有幫助,求贊求轉發啊!git
不得不說,這個刷題系統確實是有點東西,你真的值得擁有!首先,這是一個微服務的項目,其次這個系統涵蓋了市面上經常使用的主流技術好比 SpringBoot、Spring Cloud 等等(後面會詳細介紹)。github
不管是你想要學習分佈式的技術,仍是想找一個實戰項目練手或者做爲本身的項目經驗,這個項目都很是適合你。面試
另外,由於項目做者提供了詳細的技術文檔,因此你不用擔憂上手太難!數據庫
咱們先來看看這個面試刷題系統的效果圖。這裏咱們只展現的是這個系統的前端(微信小程序),後臺管理系統這裏就不展現了。小程序
能夠看到,除了少部分地方的顏色搭配比較難看以外,頁面總體 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 在這個項目中提供的兩個核心功能:
關於配置中心,咱們這裏再拓展一下,除了 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%左右的先後端代碼。絕對是快速開發項目並交付以及接私活的利器了!
我在以前的也推薦過這個腳手架,詳情請看下面這兩篇文章:
這篇文章我主要從架構設計層面分析了朋友開源的這個基於微服務的刷題系統。
固然了,朋友使用微服務開發這個項目的主要目的也是爲了本身實踐微服務相關的知識,同時也是爲了給須要微服務相關實戰項目經驗的小夥伴一個能夠學習的項目。否則的話,直接用單體就完事了,徹底能夠支撐這個項目目前的併發量以及可預見的將來的併發量。
再來一次!昨晚肝了好久~原創不易,如有幫助,求贊求轉發啊!
個人Github地址:Snailclimb - Overview