微服務入門java
單體應用web
「單體架構(monolith application)」就是將應用程序的全部功能都打包成一個獨立的單元進行部署,能夠是JAR、WAR、EAR或其它歸檔格式。spring
優勢:設計模式
1.單個系統包含全部功能tomcat
2.部署簡單springboot
3.易於測試網絡
缺點:架構
1.代碼臃腫、模塊耦合度高、邏輯複雜、修改難度大mvc
2.編譯、啓動週期長app
3.系統錯誤隔離性差、可用性差,任何一個模塊的錯誤都可能形成整個系統的宕機
4.可伸縮性差,系統的擴容只能只對這個應用進行擴容,不能作到對某個功能點進行擴容
5.線上問題修復週期長;任何一個線上問題修復須要對整個應用系統進行全面升級,版本迭代效率低
微服務
微服務:一種架構設計模式。業務邏輯被拆分紅一系列小而鬆散耦合的分佈式組件,每一個組件都被稱爲微服務,多個組件共同構成了較大的應用。
優勢:
1.每一個服務足夠內聚,足夠小,代碼容易理解、開發效率提升
2.服務之間能夠獨立部署,微服務架構讓持續部署成爲可能
3.提升容錯性(fault isolation),一個服務的內存泄露並不會讓整個系統癱瘓
4.系統不會被長期限制在某個技術棧上
缺點:
1.運維難度增長,問題追蹤定位難度增長
2.團隊依賴強,一個服務的版本延遲會拖慢整個應用的開發週期
3.開發難度、複雜度增長;垮服務的調用一般是不一樣的機器,甚至是不一樣的機房,開發人員須要處理超時、網絡異常等問題
4.部署、測試難度增長
5.數據一致性問題
微服務
微服務架構
Dubbo:阿里服務化治理的核心框架。國內使用較多,表明性:
--新浪:Motan-dubbo裁剪版
--噹噹:DubboX-dubbo加強版
Dubbo 只是實現了服務治理,提供各類 Filter,能夠經過擴展 Filter 來完善,如:
分佈式配置:可使用淘寶的 diamond、百度的 disconf 來實現分佈式配置管理。
服務跟蹤:可使用京東開源的 Hydra,或者擴展 Filter 用 Zippin 來作服務跟蹤。
批量任務:可使用噹噹開源的 Elastic-Job、tbschedule。
Spring Cloud:一系列框架的有序集合
--整合Netflix 組件
Spring Cloud基於Spring Boot實現了衆多分佈式系統基礎設施,如服務發現註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,服務治理只是其中的一個方面。
Spring Cloud組件
Spring Cloud Netflix Eureka:服務註冊與發現
Spring Cloud Netflix Zuul:服務網關
Spring Cloud Netflix Hystrix:斷路器
Spring Cloud Ribbon:客戶端負載均衡
Spring Cloud Feign:聲明式服務調用
Spring Cloud Config:分佈式配置
Spring Cloud Sleuth:服務跟蹤
Spring Cloud Bus:消息總線
…
組件參考:https://springcloud.cc/
簡單微服務
準備工做:
技能要求:熟悉Spring Mvc、Spring註解熟悉
工具環境:
Maven:3.X
開發工具:Eclipse oxygen、Spring Tool Suite(STS)、IDEA
JDK:1.8版本
Spring Boot:1.5.7.RELEASE
構建Maven項目
1、經過SPRING INITIALIZR構建maven項目:
2、手動構建:
1.新建spring-boot-helloword文件
2.新建文件夾src/main/java、src/main/resources、src/test/java、src/test/resources
2.新建pom.xml文件,內容:
<modelVersion>4.0.0</modelVersion>
<groupId>fun.deepsky.springboot</groupId>
<artifactId>spring-boot-helloword</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-boot-helloword</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.7.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<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>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Spring Boot Starter
Spring Boot Starter:
在Spring Boot生態中被稱爲Starter POMs,是一系列的輕便依賴包,是一套一站式Spring相關技術的解決方案,開發者在使用和整合時,沒必要關注依賴配置,只須要引入對應的模塊便可。
如開發web應用,只須要引入spring-boot-starter-web,Starter會自動引入如下jar包:
■ org.springframework.boot:spring-boot-starter
■ org.springframework.boot:spring-boot-starter-tomcat
■ org.springframework.boot:spring-boot-starter-validation
■com.fasterxml.jackson.core:jackson-databind
■ org.springframework:spring-web
■ org.springframework:spring-webmvc
主類
建立Application.java:
@SpringBootApplication
@RestController
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);//①
}
@RequestMapping(「/index」) //②
public String index() {
return "hello world";
}
}
①:對容器進行參數,經過SpringApplicationBuilder來對SpringApplication的屬性進行配置。如
new SpringApplicationBuilder(Application.class).bannerMode(Mode.OFF).web(true).run(args);
②:增長web訪問路徑,默認爲get訪問
啓動,訪問:http://localhost:8080/index