1. 程式人生 > >springCloud學習1

springCloud學習1

http協議 應用 分享 pen hid spa 包括 opened default

傳統項目架構

傳統項目分為三層架構,將業務邏輯層、數據庫訪問層、控制層放入在一個項目中。

優點:適合於個人或者小團隊開發,不適合大團隊開發。

分布式項目架構

根據業務需求進行拆分成N個子系統,多個子系統相互協作才能完成業務流程子系統之間通訊使用RPC遠程通訊技術。

優點:

1.把模塊拆分,使用接口通信,降低模塊之間的耦合度。

2.把項目拆分成若幹個子項目,不同的團隊負責不同的子項目。

3.增加功能時只需要再增加一個子項目,調用其它系統的接口就可以。

4.可以靈活的進行分布式部署。

有優點就有缺點,缺點如下:

1.系統之間交互需要使用遠程通信,接口開發增加工作量。

2.各個模塊有一些通用的業務邏輯無法共用。

為了解決上面分布式架構的缺點,我們引入了soa架構。

SOA:面向服務的架構。也就是把工程拆分成服務層、表現層兩個工程。服務層中包含業務邏輯,只需要對外提供服務即可。

表現層只需要處理和頁面的交互,業務邏輯都是調用服務層的服務來實現。

什麽是項目集群

多臺服務器部署相同的應用構成一個集群,然後通過反向代理,進行訪問。

作用:通過負載均衡設備共同對外提供服務

RPC遠程調用

RPC 的全稱是 Remote Procedure Call 是一種進程間通信方式。
它允許程序調用另一個地址空間(通常是共享網絡的另一臺機器上)的過程或函數,而不用程序員顯式編碼這個遠程調用的細節。即無論

是調用本地接口/服務 還是調用遠程的接口/服務,本質上編寫的調用代碼基本相同。


比如兩臺服務器A,B,一個應用部署在A服務器上,想要調用B服務器上應用提供的函數或者方法,由於不在一個內存空間,不能直接調用,

這時候需要通過就可以應用RPC框架的實現來解決

restful、soap、rpc

1. restful是一種架構設計風格,提供了設計原則和約束條件,而不是架構。而滿足這些約束條件和原則的應用程序或設計就是 RESTful架構或服務。
2. soap協議是一種數據交換協議規範,是一種輕量的、簡單的、基於XML的協議的規範。SOAP協議和HTTP協議一樣,都是底層的通信協議,只是

請求包的格式不同而已,SOAP包是XML格式的。

soap協議 基於xml並封裝成了符合http協議,因此它符合任何路由器、 防火墻或代理服務器的要求。Soap = http + xml


soap可以使用任何語言來完成,只要發送正確的soap請求即可,基於soap的服務可以在任何平臺無需修改即可正常使用。

RPC就是從一臺機器(客戶端)上通過參數傳遞的方式調用另一臺機器(服務器)上的一個函數或方法(可以統稱為服務)並得到返回的結果。
RPC 會隱藏底層的通訊細節(不需要直接處理Socket通訊或Http通訊)
RPC 是一個請求響應模型。客戶端發起請求,服務器返回響應(類似於Http的工作方式)
RPC 在使用形式上像調用本地函數(或方法)一樣去調用遠程的函數(或方法)。

rpc遠程調用框架

幾種比較典型的RPC的實現和調用框架
1. RMI實現,利用java.rmi包實現,基於Java遠程方法協議(Java Remote Method Protocol) 和java的原生序列化。
2. Hessian,是一個輕量級的remoting on http工具,使用簡單的方法提供了RMI的功能。 基於HTTP協議,采用二進制編解碼。
3. thrift是一種可伸縮的跨語言服務的軟件框架。thrift允許你定義一個描述文件,描述數據類型和服務接口。依據該文件,編譯器方便地生成RPC客戶端和服務器通信代碼。

4. SpringCloud 為開發人員提供了快速構建分布式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分布式會話等等。

5. Dubbo是阿裏巴巴公司開源的一個高性能優秀的服務框架,使得應用可通過高性能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫集成。

面向於服務架構

業務系統分解為多個組件,讓每個組件都獨立提供離散,自治,可復用的服務能力

通過服務的組合和編排來實現上層的業務流程

作用:簡化維護,降低整體風險,伸縮靈活

技術分享圖片

微服務架構

架構設計概念,各服務間隔離(分布式也是隔離),自治(分布式依賴整體組合)其它特性(單一職責,邊界,異步通信,獨立部署)是分布式概念的跟嚴格執行

SOA到微服務架構的演進過程

作用:各服務可獨立應用,組合服務也可系統應用(巨石應用[monolith]的簡化實現策略-平臺思想)

SOA架構與微服務架構區別

SOA架構主要針對企業級、采用ESB服務(ESB企業服務總線),非常重,需要序列化和反序列化,采用XML格式傳輸。

微服務架構主要互聯網公司,輕量級、小巧,獨立運行,基於Http+Rest+JSON格式傳輸。

ESB也可以說是傳統中間件技術與XML、Web服務等技術相互結合的產物。

SpringCloud

SpringCloud 為開發人員提供了快速構建分布式系統的一些工具,包括配置管理、服務發現、斷路器、路由、負載均衡、微代理、事件總線、全局鎖、

決策競選、分布式會話等等。它運行環境簡單,可以在開發人員的電腦上跑。另外說明spring cloud是基於Springboot的,所以需要開發中對Springboot

有一定的了解。

服務提供者與消費關系

服務提供者:提供服務被人調用

消費者:服務調用方

容錯機制:負載均衡 網關 路由策略 高並發情況下,怎麽限流

Springcloud 解決什麽問題?

rpc遠程調用 是一套微服務解決方案

配置管理(註冊中心eureka)

服務發現 服務註冊

斷路器(調用失敗怎麽解決)

路由策略 負載均衡 全局鎖

分布式會話系統 客戶端調用

接口網管 服務管理系統

springcloud 依賴於springboot

服務的註冊與發現(Eureka)

我們需要用的組件是Spring Cloud Netflix的Eureka ,eureka是一個服務註冊和發現模塊。

技術分享圖片

什麽是Eureka

Eureka是Netflix開源的一個RESTful服務,主要用於服務的註冊發現。

Eureka由兩個組件組成:Eureka服務器和Eureka客戶端。

Eureka服務器用作服務註冊服務器。Eureka客戶端是一個java客戶端,用來簡化與服務器的交互、作為輪詢負載均衡器,並提供服務的故障切換支持。

Netflix在其生產環境中使用的是另外的客戶端,它提供基於流量、資源利用率以及出錯狀態的加權負載均衡。

Eureka的吸引力來源於以下幾點:

開源:大家可以對實現一探究竟,甚至修改源碼。

可靠:經過Netflix多年的生產環境考驗,使用應該比較靠譜省心

功能齊全:不但提供了完整的註冊發現服務,還有Ribbon等可以配合使用的服務。

基於Java:對於Java程序員來說,使用起來,心裏比較有底。

spring cloud可以使用Spring Cloud, 與Eureka進行了很好的集成,使用起來非常方便。

創建EureKaserver 項目

Maven依賴

技術分享圖片
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
        <relativePath />
    </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>
        <!--eureka server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
        <!-- spring boot test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.RC1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
View Code

配置application.yml

server:
  port: 8888
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

啟動EurekaServer

@SpringBootApplication
@EnableEurekaServer
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
       }
}

springCloud學習1