1. 程式人生 > >eureka實戰——高可用服務治理框架

eureka實戰——高可用服務治理框架

之前Sunny有聊過grpc框架,那是用於遠端服務呼叫的框架。今天我們來搭建一個eureka服務治理框架。本文所做的demo程式碼,Sunny已經上傳,歡迎大家根據上面地址fork實踐。另外,之前grpc的文章地址也在上面。
關於eureka,從eureka的角度來看,主要分為兩個角色:eureka server和eureka client。而從整個系統的角度來看,可以分為三個角色。eureka server叫做服務註冊中心,eureka client中可以分為服務提供者和服務呼叫者。
今天要做的系統大致架構如下,Sunny畫的比較簡陋:
圖片.png
服務註冊中心有三個,整合一個高可用叢集,且三個eureka server之間互相註冊自己,三者之間會進行互現通訊。另外有兩個服務提供者,以實現服務的高可用性,他們在某臺服務註冊中心註冊服務,三臺服務註冊中心相互之間會同步服務資訊,因此服務消費者在任何一臺服務註冊中心都能發現所有已註冊的服務——事實上,通常會找較近zone的服務註冊中心發現服務。服務消費者通過服務註冊中心獲得目前已經註冊的服務列表,通過客戶端負載均衡選擇某個服務提供者,然後發起遠端呼叫。事實上,包括註冊服務、續約、終止服務或者發現服務都是通過restful的形式。服務具體的儲存形式是雙層map,外層key為服務名,內層key為例項名。

正式開始

一、建立總專案

本專案還是用多模組來做。為了更簡潔明瞭一些,我們真的來建立多個實際模組,而不採取同一個模組多個配置啟動多個例項的方式。感興趣的小夥伴可以自己嘗試一下或者和我交流。總專案名為eureka-demo,其中包括eureka-server、service-provider和service-consumer等多個模組。專案目錄如下圖所示:
圖片.png

二、建立服務註冊中心

首先,我們需要設定總的專案的pom.xml檔案,各模組的一個基礎。總的pom.xml檔案如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sunny</groupId> <artifactId
>
eureka-demo</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>eurekaserver1</module> <module>eurekaserver2</module> <module>eurekaserver3</module> <module>serviceprovider2</module> <module>serviceprovider1</module> <module>serviceconsumer</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <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> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

這裡我們Spring boot的版本用1.5.9.RELEASE。其實之前Sunny想嘗試用Spring boot2,但是和Spring cloud多次版本匹配都出現了問題。因此還是選擇用Spring boot的1.5.9.RELEASE版本,Spring cloud版本選擇Edgware.SR3版本。
然後我們新建立eureka server1的pom.xml檔案:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>eureka-demo</artifactId>
        <groupId>com.sunny</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>eureka-server1</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Edgware.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


</project>

這裡我們以整個專案的pom.xml為基礎,另外匯入spring-cloud-starter-eureka-server依賴。當然不要忘了spring cloud依賴。
然後我們寫application.yml檔案:

server:
  port: 1111
eureka:
  instance:
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer2:1112/eureka/,http://peer3:1113/eureka/
spring:
  application:
    name: eureka-server

這裡,我們設定埠為1111,當前例項主機名為peer1。同時,設定eureka.client.serviceUrl.defaultZone為另外兩臺eureka server的服務註冊地址。如果是單eureka server的環境,就將eureka.client.serviceUrl.defaultZone設定為本機的服務註冊地址,同時需要設定eureka.client.registerWithEureka和eureka.client.fetchRegistry為false,以防止自己註冊自己。同時設定應用名為eureka-server,另外兩臺服務註冊中心也需要設定相同的名稱。值得一提的是,這裡peer1、peer2和peer3需要在hosts檔案中設定為127.0.0.1,在生產環境中可以寫真實的域名。
接下來,我們寫一個啟動類,加上@EnableEurekaServer註解即可。

@EnableEurekaServer
@SpringBootApplication
public class Server1Application {

    public static void main(String[] args) {

        new SpringApplicationBuilder(Server1Application.class).web(true).run(args);

    }

}

另外兩臺eureka server的pom.xml檔案一樣,當然除了埠,通過eureka server1中的application.yml檔案中的配置就可以發現eureka server2的域名為peer2,其埠為1112;eureka server3的域名為peer3,埠為1113。application.yml檔案中的eureka.client.serviceUrl.defaultZone分別設定為另外兩個eureka server的服務地址。具體程式碼可參見傳送門原始碼連結。

三、建立服務提供者

還是從pom.xml檔案說起,服務提供者作為一個eureka client匯入的依賴有所不同,不需要匯入spring-cloud-starter-eureka-server依賴,需要匯入的是spring-cloud-starter-eureka依賴。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>eureka-demo</artifactId>
        <groupId>com.sunny</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>service-provider1</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Edgware.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


</project>

然後寫配置檔案,也與服務註冊中心有所不同。

server:
  port: 8081
eureka:
  client:
    serviceUrl:
      defaultZone: http://peer1:1111/eureka/
spring:
  application:
    name: hello-service

這裡,埠設定為8081;在peer1上註冊服務,如前面所說,只需向一臺eureka server註冊即可,其他服務註冊中心會進行服務同步——當然,這裡想要向多臺服務註冊中心註冊也行,地址之間以逗號隔開即可;並且設定應用名為hello-service。
然後我們寫一個啟動類,ServiceProvider1Application.class,加上EnableEurekaClient註解。

@SpringBootApplication
@EnableEurekaClient
public class ServiceProvider1Application {

    public static void main(String[] args) {

        SpringApplication.run(ServiceProvider1Application.class,args);

    }

}

接著就是寫實際的服務了,我們就寫最簡單的hello world式的restful介面。

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(){

        return "hello world";

    }

}

現在服務提供者service provider1基本完成了,我們用同樣的程式碼再寫一個service provider2。在配置上,我們將埠設定為8082,其他都可一樣,當然也可以將eureka.client.serviceUrl.defaultZone設定為其他兩臺eureka server的服務註冊地址。具體配置如下:

server:
  port: 8082
eureka:
  client:
    serviceUrl:
      defaultZone: http://peer1:1111/eureka/
spring:
  application:
    name: hello-service
四、建立服務消費者

建立服務消費者,還是先看相關的依賴。關於eureka client的依賴和服務提供者一樣,另外還需要新增spring-cloud-starter-ribbon的依賴用於客戶端負載均衡,預設是輪詢的方式。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>eureka-demo</artifactId>
        <groupId>com.sunny</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>service-consumer</artifactId>


    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
        </dependency>
    </dependencies>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Edgware.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

配置和服務提供者基本一樣,但是這裡,我們讓服務消費者的eureka.client.serviceUrl.defaultZone為eureka server2,這裡是特意不設定成eureka server1的,喜歡的童鞋可以按自己的喜好設定,甚至是設定多個,用逗號隔開。

spring:
  application:
    name: hello-consumer
server:
  port: 9090
eureka:
  client:
    serviceUrl:
      defaultZone: http://peer2:1112/eureka/

然後就是啟動類,這裡一樣加上EnableEurekaClient的註解。同時建立RestTemplate的bean,加上LoadBalanced註解用於負載均衡。具體如下:

@SpringBootApplication
@EnableEurekaClient
public class ConsumerApplication {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    public static void main(String[] args) {

        SpringApplication.run(ConsumerApplication.class,args);

    }

}

然後就是具體的服務消費類了,這裡我們注入restTemplate例項,並用它來呼叫服務。同樣,我們寫成一個restful介面,可以用於驗證結果。具體如下:

@RestController
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/helloConsumer")
    public String helloConsumer(){
        return restTemplate.getForEntity("http://hello-service/hello",String.class).getBody();
    }

}
五、啟動並驗證

首先我們啟動eureka server1、eureka server2和eureka server3。啟動過程中控制檯中可能會有warn或者error資訊,如下面的資訊,但是這時候不要慌,這是因為peer2和peer3還未啟動,所以出現連線失敗的情況,當三個eureka server全部啟動後,系統就是完全正常執行的。

2018-06-05 21:27:39.233 ERROR 10164 --- [-target_peer2-2] c.n.e.cluster.ReplicationTaskProcessor   : Network level connection to peer peer2; retrying after delay

com.sun.jersey.api.client.ClientHandlerException: java.net.SocketTimeoutException: Read timed out
    at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1]
    at com.netflix.eureka.cluster.DynamicGZIPContentEncodingFilter.handle(DynamicGZIPContentEncodingFilter.java:48) ~[eureka-core-1.7.2.jar:1.7.2]
    at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.7.2.jar:1.7.2]
    at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1]
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1]
    at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1]
    at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570) ~[jersey-client-1.19.1.jar:1.19.1]
    at com.netflix.eureka.transport.JerseyReplicationClient.submitBatchUpdates(JerseyReplicationClient.java:116) ~[eureka-core-1.7.2.jar:1.7.2]
    at com.netflix.eureka.cluster.ReplicationTaskProcessor.process(ReplicationTaskProcessor.java:71) ~[eureka-core-1.7.2.jar:1.7.2]
    at com.netflix.eureka.util.batcher.TaskExecutors$BatchWorkerRunnable.run(TaskExecutors.java:187) [eureka-core-1.7.2.jar:1.7.2]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_161]
Caused by: java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_161]
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[na:1.8.0_161]
    at java.net.SocketInputStream.read(SocketInputStream.java:171) ~[na:1.8.0_161]
    at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[na:1.8.0_161]
    at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:161) ~[httpcore-4.4.8.jar:4.4.8]
    at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:82) ~[httpcore-4.4.8.jar:4.4.8]
    at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:278) ~[httpcore-4.4.8.jar:4.4.8]
    at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138) ~[httpclient-4.5.3.jar:4.5.3]
    at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56) ~[httpclient-4.5.3.jar:4.5.3]
    at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259) ~[httpcore-4.4.8.jar:4.4.8]
    at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:286) ~[httpcore-4.4.8.jar:4.4.8]
    at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:257) ~[httpclient-4.5.3.jar:4.5.3]
    at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:230) ~[httpclient-4.5.3.jar:4.5.3]
    at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273) ~[httpcore-4.4.8.jar:4.4.8]
    at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) ~[httpcore-4.4.8.jar:4.4.8]
    at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:684) ~[httpclient-4.5.3.jar:4.5.3]
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:486) ~[httpclient-4.5.3.jar:4.5.3]
    at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3]
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.3.jar:4.5.3]
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3]
    at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1]
    ... 10 common frames omitted

我們可以檢視服務註冊中心的相關資訊,訪問peer1:1111或者peer2:1112或者peer3:1113可以檢視。
可以看到服務已經註冊上了:
圖片.png
同時可以檢視相關的可用節點:
圖片.png
然後我們啟動兩個服務提供者,同樣在此檢視服務註冊中心的資訊,可以發現服務已經註冊上了:
圖片.png
然後在啟動服務消費者,再次檢視服務註冊中心的資訊:
圖片.png
最後,我們來驗證服務是否呼叫成功,訪問localhost:9090/helloConsumer,成功得到如下結果:
圖片.png
最後的最後,我們驗證負載均衡的效果。為了驗證負載均衡,我們在服務提供者的restful介面中加入一個列印資訊,service provider1中為:

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(){

        System.out.println("1");
        return "hello world";

    }

}

service provider2中為:

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(){

        System.out.println("2");

        return "hello world";

    }

}

然後多次呼叫服務消費者的restful介面,發現兩個服務提供者的控制檯資訊中依次列印1和2,這也說明了確實是輪詢的。

第一種

評論留言

第二種

郵箱聯絡:[email protected]

相關推薦

eureka實戰——可用服務治理框架

之前Sunny有聊過grpc框架,那是用於遠端服務呼叫的框架。今天我們來搭建一個eureka服務治理框架。本文所做的demo程式碼,Sunny已經上傳,歡迎大家根據上面地址fork實踐。另外,之前grpc的文章地址也在上面。 關於eurek

五、Spring cloud可用服務治理Eureka

一、Eureka 客戶端 (一)啟用 Eureka 客戶端 @EnableEurekaClient (二)配置多個 eureka 註冊中心 application.properties #定義應用的名稱 spring.application.name=spri

Spring Cloud Eureka 4 (可用服務註冊中心)

自己 def port hello -c 圖片 sys img 效果 在微服務這樣的分布式環境中,我們需要充分考慮發生故障的情況,所以在生產環境中必須考慮對各個組件進行高可用部署,對於服務註冊中心也是一樣。 Eureka Server 的高可用實際上就是講自己作為服

spring cloud 入門系列三:使用Eureka 搭建可用服務註冊中心

在上一篇中分享了如何使用Eureka 進行服務治理,裡面搭建的服務註冊中心是單體的, 但是在實際的應用中,分散式系統為了防止單體服務宕機帶來嚴重後果,一般都會採用伺服器叢集的形式,服務註冊中心也是一樣,需要多臺服務一起工作,組成高可用的服務註冊中心。這樣,如果有其中一臺宕機,系統也能正常執行。 那麼如何來

springcloud-eureka搭建可用服務註冊叢集

服務的註冊和發現可以說是微服務架構中最核心的地方,微服務的服務註冊中心有很多個,之前選了consul作為註冊中心,之所以選擇它是因為它有非常強大的功能,除了服務的註冊發現之外還支援KV儲存、具有多語言能力、支援多資料中心等等,後來發現這些都沒有什麼用,畢竟我們的服務是純Jav

Spring cloud Eureka 服務治理(可用服務中心)

image 本地host available png active url 狀態 name spring 在微服務的架構中,我們考慮發生故障的情況,所以在生產環境中我們需要對服務中各個組件進行高可用部署。 Eureka Server 的高可用實際上就是將自己作為服務想其

SpringCloud系列四:Eureka 服務發現框架(定義 Eureka 服務端、Eureka 服務信息、Eureka 發現管理、Eureka 安全配置、Eureka-HA(可用) 機制、Eureka 服務打包部署)

pac elf figure 傳遞 uri rect body 情況 服務組 1、概念:Eureka 服務發現框架 2、具體內容 對於服務發現框架可以簡單的理解為服務的註冊以及使用操作步驟,例如:在 ZooKeeper 組件,這個組件裏面已經明確的描述了一個服務的註冊以及發

Spring Cloud學習一:服務治理Spring Cloud Eureka搭建可用註冊中心

Spring Cloud Eureka是Spring Cloud NetFlix微服務套件中的一部分,基於NetFlix Eureka做了二次封裝,主要負責完成微服務架構中的服務治理功能,是微服務架構中最為核心和基礎的模組,既包含了服務端元件,也包含了客戶端元件。 又涉及到服務註冊與服務發現兩個

億級流量電商詳情頁系統實戰-緩存架構+可用服務架構+微服務架構第二版視頻教程

class 全文檢索 ron pan 教程 ec2 dubbo sgx 技術經理 14套java精品高級架構課,緩存架構,深入Jvm虛擬機,全文檢索Elasticsearch,Dubbo分布式Restful 服務,並發原理編程,SpringBoot,SpringCloud

服務註冊與發現-Eureka可用設計)

功能 num -a 特點 解決方案 一個 subst 同步 進程 什麽是高可用 部署需要考慮的是什麽: 1、系統遇到單點失效問題,如何能夠快速切換到其他節點完成任務 2、如何應對網絡故障,即系統如何設計成“故障開放型”(expecting failure)的 典型的問題包括

Spring Cloud 服務治理框架 eureka使用記錄

微服務:微服務是一種架構風格,一個大型複雜軟體應用由一個或多個微服務組成。系統中的各個微服務可被獨立部署,各個微服務之間是鬆耦合的。每個微服務僅關注於完成一件任務並很好地完成該任務。在所有情況下,每個任務代表著一個小的業務能力。 服務治理:主要用來實現各個微服務例項的自動化註冊與發現 使用服

SpringCloud --Eureka叢集搭建(可用服務註冊中心)

Eureka是Spring Cloud框架裡的核心服務, 幾乎每個服務都依賴它。 所以要建立多個Eureka例項程序, 即使其中一個程序掛了, 註冊中心功能仍然正常執行。為了實現高可用,必須叢集   增加Eureka服務註冊中心配置檔案: application-pe

spring cloud---服務治理框架 Eureka

首先建立spring boot 工程,引入 如下 pom.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-

Spring Cloud 公司專案實戰(Eureka相關):Eureka-Server 可用叢集 關於宕機後主動踢出該節點

重要性:一級 問題 spring cloud Eureka註冊中心的重要性 什麼是高可用叢集 為何搭建註冊中心高可用叢集 為何要踢出宕機的節點 大家仔細想想以上的問題即可發現我們關於 示例:application-peer*.yml配置 sprin

①SpringCloud 實戰:引入Eureka元件,完善服務治理

### 簡介 Netflix Eureka 是一款由 Netflix 開源的基於 REST 服務的註冊中心,用於提供服務發現功能。Spring Cloud Eureka 是 Spring Cloud Netflix 微服務套件的一部分,基於 Netflix Eureka 進行了二次封裝,主要負責完成微服務架

分布式服務治理框架Dubbo

dubbo前言Dubbo是一個被國內很多互聯網公司廣泛使用的開源分布式服務治理框架,是一個非常全面的SOA基礎框架,當當網在Dubbo基礎上新增了一些功能,並將其命名為Dubbox(Dubbo eXtensions)。為什麽需要Dubbo?以前所有的業務處理,都在一個系統當中;接著,這個大系統按照業務領域劃分

alwayson08-啟動always on可用服務

always on ima images sql http always 服務 com .com 打開sql server 配置管理器 alwayson08-啟動always on高可用服務

keepalived安裝與配置,組建可用服務

eight 如何 .org keep 局域網 yum 從服務器 改變 -1 一、準備環境   linux系統:CentOS7   keepalived版本:keepalived-1.3.5.tar.gz   keepalived下載地址:http://www.keepali

【架構】Heartbeat可用服務(2)

agents 可用 分享 ont .com war 集群 需求 spa Heartbeat高可用服務 【13】Heartbeat發展情況及分支軟件介紹   有關Heartbeat分3個分支的說明     自2.1.4版本後,Linux-HA將Heartbeat分包

使用PHP構建服務治理框架

存在 數據 本地 協議 配置 htm 監控 統一 傳輸 參考:https://segmentfault.com/a/1190000010224335https://segmentfault.com/a/1190000011581339https://mengkang.net