面試刷題37:微服務是什麼?springcloud,springboot是什麼?
面試中被問到為什麼要使用微服務架構?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開發接口的過程;
簡單介紹了 工程結構,依賴的處理方式 , 運作指令等細節;
然後基于配置,介紹了配置參數的加載順序,多環境下的最佳實踐。
最後介紹了微服務繼續的自動監控和運維機制 actuator ,收集微服務的端點資訊。
原文位址
https://www.cnblogs.com/snidget/p/12691636.html