技術沉澱轉型學習筆記總結(三) Springboot入門總結和微服務和單體服務介紹

1、Springboot是什麼?
SpringBoot的微服務的開發的解決框架方案,同時也是爲簡化Spring配置的快速開發整合包,但是springboot的核心的優勢從技術上來講是大大提升開發過程配置的和依賴的效率。

2、springboot幫我們做了什麼?
通常搭建一個基於spring的web應用,我們需要做以下工作:(典型SSM架構如下:)
1、pom文件中引入相關jar包,包括spring、springmvc、redis、mybaits、log4j、mysql-connector-java 等等相關jar ...
2、配置web.xml,Listener配置、Filter配置、Servlet配置、log4j配置、error配置 ...
3、配置數據庫連接、配置spring事務
4、配置視圖解析器
5、開啓註解、自動掃描功能
6、配置完成後部署tomcat、啓動調試
......

2.1、springBoot服務中關於:只需要一個非常簡單的配置,可以完成上面的所有工作:

讓開發者能核心重點關注:POJO->DAO->Service->Controller相關的設計和實現即可。大大提升開發效率。


springboot的pom.xml 配置文件如下:一個配置就可以完成所有的包的引入。

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <groupId>com.yijy</groupId>
    <artifactId>spring-boot01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot01</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>


2.2、運行代碼簡要案例:

運行主體類:

@SpringBootApplication
public class SpringBoot01Application {

    public static void main(String[] args) {
        //SpringApplication.run(SpringBoot01Application.class, args);
        SpringApplication sa = new SpringApplication(SpringBoot01Application.class);
        sa.run(args);
    }

}

控制器類

@RestController
public class TestController {
@RequestMapping("/index")
    public String index(){
        return "hello world";
    }
}

應用屬性配置:
application.properties中增加配置
server.port=7668

入門案例:騰訊課堂的操作參考。

https://ke.qq.com/course/361814?taid=2906408664532310


一個最單的springboot應用就構建完畢,運行應用,springboot就自動完成spring、springmvc、tomcat等加載,連tomcat都不用自動配置是不是很爽。

運行應用後SpringBoot01Application ,自動完成配置加載、類的依賴和注入、web.xml的配置依賴、並自動加載tomcat容器:

輸入地址:http://localhost:7668/index 即可以訪問應用了。


是不是超級簡單。

2.3、運行原理簡述:

核心關鍵註解:@SpringBootApplication 此註解對調用maven管理的jar包中的
spring-boot-autoconfigure-2.1.6.RELEASE.jar!/META-INF/spring.factories
文件中的配置信息:

配置較多,僅截取一部分:
# Initializers
org.springframework.context.ApplicationContextInitializer=\
org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,\
org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener

# Application Listeners
org.springframework.context.ApplicationListener=\
org.springframework.boot.autoconfigure.BackgroundPreinitializer

# Auto Configuration Import Listeners
org.springframework.boot.autoconfigure.AutoConfigurationImportListener=\
org.springframework.boot.autoconfigure.condition.ConditionEvaluationReportAutoConfigurationImportListener

# Auto Configuration Import Filters
org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\
org.springframework.boot.autoconfigure.condition.OnBeanCondition,\
org.springframework.boot.autoconfigure.condition.OnClassCondition,\
org.springframework.boot.autoconfigure.condition.OnWebApplicationCondition核心運行函數:
 SpringApplication sa = new SpringApplication(SpringBoot01Application.class);
        sa.run(args);
        
詳細的運行原理分析文章可以參見:
https://blog.csdn.net/qq_34975710/article/details/87898620

2.4、springBoot的優點:
2.4.1、可以快速上手,整合一些子項目
2.4.2、可以依賴很少的配置就能運行整個項目
2.4.3、基於Spring,門檻低很容易上手
2.4.4、Springboot創建可以獨立運行,不依賴於容器,如Tomcat。
2.4.5、不需要打包成war包,可以jar直接放入tomcat中直接運行
2.4.6、提供Maven極簡配置,不需要版本號等
2.4.7、提供了可視化的功能,方便監控應用健康狀態,以及性能等,後期維方便
2.4.8、拋棄xml,改用極簡化配置


3、Spring,SpringMVC,SpringBoot,SpringCloud有什麼區別和聯繫?

Spring是一個輕量級的控制反轉(IoC)和麪向切面(AOP)的容器框架。Spring使你能夠編寫更乾淨、更可管理、並且更易於測試的代碼。Spring更具體的介紹:https://spring.io/
Spring MVC是Spring的一個模塊,一個web框架。通過Dispatcher Servlet, ModelAndView 和 View Resolver,開發web應用變得很容易。主要針對的是網站應用程序或者服務開發——URL路由、Session、模板引擎、靜態Web資源等等。
Spring配置複雜,繁瑣,所以推出了Spring boot,約定優於配置,簡化了spring的配置流程。
Spring Cloud構建於Spring Boot之上,是一個關注全局的服務治理框架。


Spring是核心,提供了基礎功能;
Spring MVC 是基於Spring的一個 MVC 框架 ;
Spring Boot 是爲簡化Spring配置的快速開發整合包;
Spring Cloud是構建在Spring Boot之上的服務治理框架。


4、微服務架構和單體服務架構?
系統架構遵循的三大原則
提升用戶體驗:提升用戶體驗,減少用戶流失
提高敏捷性:及時響應業務需求,促進企業發展
降低成本:降低增加產品、客戶或業務方案的成本
傳統單體架構
先來看看傳統單體項目架構圖

從單體應用架構圖得出如下結論:

傳統的單體應用架構功能集中,代碼和數據中心化,一個發佈包部署後運行在同一個進程中的應用程序。
複雜性高:由於是單個歸檔文件,所以整個項目文件包含的模塊非常多,導致模塊的邊界模糊、依賴關係不清晰、代碼的質量參差不齊,混亂的堆在一起,使得整個項目非常複雜。以致每次修改代碼,都非常小心,可能添加一個簡單的功能,或者修改一個Bug都會帶來隱藏的缺陷。
技術債務:隨着時間的推移、需求的變更和技術人員的更替,會逐漸形成應用程序的技術債務,並且越積越多。
擴展能力受限:單體應用只能作爲一個整體進行擴展,無法根據業務模塊的需要進行伸縮。

 

再看下微服務的架構圖:


從微服務架構圖得出如下結論:

微服務把每一個職責單一的功能放在一個獨立的服務中 。
每個服務有多個實例在運行,每個實例可以運行在容器化平臺內,達到平滑伸縮的效 果,單個微服務啓動較快。
每個服務應該有自己的運營平臺,以及獨享的運營人員,這包括技術運維和業務運營人 員:每個服務都高度自治,內部的變化對外透明。
易於開發和維護:一個微服務只會關注一個特定的業務功能,所以業務清晰、代碼量較少。開發和維護單個微服務相對簡單。
局部修改容易部署:單體應用只要有修改,就得重新部署整個應用。微服務解決了這樣的問題。一般來說,對某個微服務進行修改,只需要重新部署這個服務即可。
技術棧不受限制:在微服務架構中,可以結合項目業務及團隊的特點,合理的選擇技術棧。
也可以看看漫畫版的微服務:【很簡單】
http://www.sohu.com/a/221400925_100039689

 

5、什麼時候採用微服務架構?

單體架構與微服務架構

就像很難用一個絕對的方式去判斷架構好壞一樣,在大多數場景下,我們也很難從一個外部的視角去判斷服務拆分粒度的合理性,需要對上下文非常瞭解才能做出一個好決策。例如,團隊規模多大,代碼規模多大,有沒有平臺化,有沒有工具鏈,是否需要持續交付,團隊文化如何等。因此,一個外部的架構師是很難在短時間內將架構規劃合理的,這需要一個過程,當真正瞭解這一切之後,不斷權衡才能最終確定。在規劃之前,有必要參考下面這張表,綜合各方面的情況,最終做出決策。

 

單體架構與微服務架構對比

產品初期優先選擇單體架構。面對一個新的領域,對業務的理解很難在開始階段就比較清晰,往往是經過一段時間之後,才能逐步弄清楚。很多時候,從一個已有的單體架構中逐步劃分服務,要比一開始就構建微服務簡單得多。另外,在資源受限的情況下,採用微服務架構風險較大,很多優勢無法體現,性能上的劣勢反而會比較明顯。

單體、組件化、微服務架構成本趨勢,如下圖。當業務複雜度達到一定程度後,微服務架構消耗的成本纔會體現優勢,並不是所有的場景都適合採用微服務架構,服務的劃分應逐步進行,持續演進。產品初期業務複雜度不高的時候,應該儘量採用單體架構。 SpringBoot也是可以創建單體的服務應用的。

單體、組件化、微服務架構成本趨勢

摘自Martin Fowler 博客的內容簡單翻譯如下。

當我聽到關於使用微服務架構的故事的時候,我注意到了一種通用的模式。

1.幾乎所有成功的微服務架構都是從一個巨大的單體架構開始的,並且都是由於單體架構太大而被拆分爲微服務架構。

2.幾乎在所有我聽說過從一開始就構建爲微服務架構的故事中,最終都有人遇到了巨大的麻煩。

在服務劃分之前,應該保證基礎設施及公共基礎服務已經準備完畢。可以通過監控快速定位故障,通過工具自動化部署、管理服務,通過服務化框架降低服務開發的複雜度,通過灰度發佈提升可用性,通過資源調度服務快速申請、釋放資源,通過彈性伸縮快速擴展應用。

 

6、結束語:

關於springboot快速開發的特徵,適應微服務的結構服務,以及相關的生態、springbootadmin 監控和管理、springcloud 服務治理 的內容還有很多去理解和實踐,本篇文章只是一個入門的嘗試和微服務的梳理和分析。不同類型的IT系統(管理型、OA、CRM、ERP等)、分析型系統(BI、大數據平臺、智能報表平臺、智能分析平臺)、一線客戶業務強交互服務系統(新聞、電商、微博、微信、以及客戶一線服務系統) 如何選擇微服務架構,這些問題都是需要在實際工作中做進一步的思考和實踐,纔能有更好的答案。希望後面在工作中一起思考分享。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章