微服務化入門

 

微服務入門java

 

單體應用web

「單體架構(monolith application)」就是將應用程序的全部功能都打包成一個獨立的單元進行部署,能夠是JARWAREAR或其它歸檔格式。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-Jobtbschedule

 

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 MvcSpring註解熟悉

 

工具環境:

Maven3.X

開發工具:Eclipse oxygenSpring Tool Suite(STS)IDEA

JDK1.8版本

Spring Boot1.5.7.RELEASE

 

 

構建Maven項目

1、經過SPRING INITIALIZR構建maven項目:

2、手動構建:

1.新建spring-boot-helloword文件

2.新建文件夾src/main/javasrc/main/resourcessrc/test/javasrc/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-webStarter會自動引入如下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

相關文章
相關標籤/搜索