面試刷題37:微服務是什麼?springcloud,springboot是什麼?
- 2020 年 4 月 13 日
- 筆記
- Java技術 技術管理
面試中被問到為什麼要使用微服務架構?springcloud的核心組件有哪些?
拿我們國家的兵種來說,如何把戰爭這個單體架構微服務化,就是根據適用的場景,拆分出不同的兵種(微服務)
然後每個兵種之間通過軍區指揮部採用特有的通訊協議連接起來(RPC) ;
每個兵種內部自治,有自己的業務,數據,部署單元(建制)對外提供打擊服務(HTTP)。
微服務
微服務是一種架構風格:
把單體系統拆分成各種微服務(進程集群裡面),服務之間通過HTTP或者RPC協議進行通訊。
服務內部是圍繞某一個問題領域的業務,有自己單獨的業務流程,數據存儲,自動化測試,和自動化獨立部署機制。
解決單體系統的難題:
開發端:部分業務的修改要修改整個項目, 開發維護成本高,容易出錯,不利於團隊協作;
運維線:部分業務的上線影響整體服務品質,運維無法精確評估系統資源的需求量;
帶來的問題:
1,運維需要維護數量龐大的進程;
2,介面的業務流程拉長,一致性比較更難以控制;
3,分散式的複雜性:網路延遲,非同步消息,分散式事務等;
基於敏捷項目管理和自動化部署可以應對這些問題。
springcloud整體介紹
基於springboot實現的微服務架構開發工具。
提供了這些分散式問題的解決方案:
springboot帶來了什麼?
1,提供了一個開發微服務的腳手架(idea的initializer創建springcloud的微服務),減少了從0開始搭建項目的問題;
2,並非重寫spring或者替代spring,主要是提供了自動化配置簡化原有的樣板配置
3,快速開發,提供了各種starter集成其它的組件和解決依賴管理問題
4,輕鬆部署,內置了web容器,輕鬆跟docker融合;
涵蓋了項目的構建,開發,測試階段;
springboot快速使用
idea的initializer創建springcloud的微服務
開發一個rest介面
開發介面的單元測試程式碼
例子程式碼點我獲取!
工程結構
依賴處理
1, parent處理方式
2,dependencyManagemant處理方式
運行
1,java -jar x.jar 運行 正式環境
2,idea提供調試運行; 開發環境
3,maven的spring-boot:run插件運行 開發環境;
springboot配置
自動化配置是springboot最大的亮點。
配置的載入優先順序如下:
1,命令行中的參數 ;
2, 系統環境變數中的SPRING_APPLICATION_JSON配置;
3,JNDI屬性: java:comp/env
4,java的作業系統屬性 System.getProperties();
5, 作業系統的環境變數
6,jar包外部的 application-${profile}.properties
7, jar包內部的 application-${profile}.properties
8, @Configuration註解修改過的類 @PropertySource註解定義的屬性
9, SpringApplication.setDefaultProperties()
多環境配置
application.properties放通用配置,指定激活 dev環境
在其他的環境中提供差異化的配置,發布的時候通過命令行指定環境spring.profiles.active=prod;
springboot監控
微服務是的進程的數量增多,必須有一套自動化的監控運維機制來收集微服務的運行指標,進行監控和預警。
spring-boot-starter-actuator 來進行監控。
並配置開啟的端點。
常見的監控端點: /health /beans /mappings
小結
首先宏觀上回答了為什麼微服務會出現,解決了什麼問題?
然後初步介紹了spring-cloud帶來了什麼?
接著從spring-cloud的基礎出發,即springboot分析了springboot帶來了什麼,簡單實用,配置和監控;
springboot帶來了什麼?
以及快速使用springboot開發介面的過程;
簡單介紹了 工程結構,依賴的處理方式 , 運行指令等細節;
然後基於配置,介紹了配置參數的載入順序,多環境下的最佳實踐。
最後介紹了微服務繼續的自動監控和運維機制 actuator ,收集微服務的端點資訊。
原創不易,點贊關注支援一下吧!轉載請註明出處,讓我們互通有無,共同進步,歡迎溝通交流。
我會持續分享Java軟體編程知識和程式設計師發展職業之路,歡迎關注,我整理了這些年編程學習的各種資源,關注公眾號『李福春持續輸出』,發送’學習資料’分享給你!