阿里雲KubernetesSpringCloud實踐進行時(1):分散式服務註冊與發現
簡介
為了更好地支撐日益增長的龐大業務量,我們常常需要把服務進行整合、拆分,使我們的服務不僅能通過叢集部署抵擋流量的衝擊,又能根據業務在其上進行靈活的擴充套件。隨著分散式的普及、服務的快速增長與雲端計算技術的進步,微服務架構也因其特有的優勢而備受關注。微服務架構的本質,是把整體的業務拆分成很多有特定明確功能的服務,通過很多分散的小服務之間的配合,去解決更大,更復雜的問題。對被拆分後的服務進行分類和管理,彼此之間使用統一的介面來進行互動。
本系列講述了在阿里雲Kubernetes容器服務基礎之上,如何快速搭建基於Spring Cloud的微服務架構中的基礎設施:
- 第一篇:分散式服務註冊與發現系統
- 第二篇:分散式配置管理系統
- 第三篇:API閘道器服務Zuul 系統
- 第四篇:分散式追蹤系統
- 第五篇:分散式彈性服務與容錯處理框架Hystrix及其監控儀表板
- 第六篇:熔斷器聚合監控Hystrix Turbine
本文是系列中的第一篇,著重介紹分散式服務的註冊與發現。
在Spring Cloud裡,負責微服務註冊與發現的專案是Spring Cloud Netflix專案中的Eureka元件。Eureka分為兩大部分,Eureka Server與Eureka Client。相應地,Eureka Server負責管理、協調所有的微服務提供者,即Eureka Client。
下面講述一下在阿里雲Kubernetes容器服務基礎之上,如何快速搭建一套分散式服務註冊與發現系統。
準備Kubernetes環境
阿里雲容器服務Kubernetes 1.9.3目前已經上線,可以通過容器服務管理控制檯非常方便地快速建立 Kubernetes 叢集。具體過程可以參考 建立Kubernetes叢集。
體驗通過應用目錄簡便部署
點選左側的應用目錄
,在右側選中ack-springcloud-eureka
,如下:
點選引數
, 可以通過修改引數配置進行定製化。例如,可以通過執行2個例項,並進行互相註冊的方式來實現高可用的部署。
replicaCount: 2
image:
repository: registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/eureka
tag: 1.5.13.RELEASE
pullPolicy: Always
service:
enabled: true
type: LoadBalancer
externalPort: 8761
internalPort: 8761
management:
endpointsEnabled: true
修改之後,在右側選擇對應的叢集、名稱空間,指定釋出名稱,然後點選部署。
幾分鐘之後,一個高可用的Eureka Server例項就可以建立出來。
體驗Eureka Server
點選左側的服務
,在右側點選剛建立的Eureka Server服務提供的訪問地址,如下所示:
在開啟的Eureka Server介面中,可以看到如下類似的內容,則證明Eureka Server已正常啟動,並且通過執行2個例項,進行互相註冊的方式來實現高可用的部署。
開發微服務並註冊到Eureka Server
為了演示微服務如何註冊到Eureka Server, 我們提供了1個基於Spring Boot開發的微服務示例,具體程式碼請參閱: https://github.com/AliyunContainerService/spring-cloud-k8s-sample/tree/master/sample-service-eureka-client
import java.net.MalformedURLException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient
@RestController
@EnableHystrix
public class SampleServiceApplication {
@Autowired
private DiscoveryClient discoveryClient;
public static void main(String[] args) {
SpringApplication.run(SampleServiceApplication.class, args);
System.out.println("Running " + SampleServiceApplication.class + " via Spring Boot!");
}
@RequestMapping("/")
public String home(@RequestParam(value = "service", required = false) String serviceName)
throws MalformedURLException {
List<ServiceInstance> list = discoveryClient.getInstances(serviceName);
if (list != null && list.size() > 0) {
String serviceURL = list.get(0).getUri().toURL().toString();
serviceURL += "/hello?service=" + serviceURL;
RestTemplate restTemplate = new RestTemplate();
return restTemplate.getForObject(serviceURL, String.class);
}
return "Hello! This is from Sample Service 1!";
}
@RequestMapping("/hello")
public String hello(@RequestParam(value = "service", required = false) String serviceName) {
return "Hello! This is from " + serviceName + "!";
}
}
注意,該Spring Boot的 application.yaml中需要確保如下配置:
eureka:
instance:
preferIpAddress: true
這樣註冊到Eureka Server上的是IP地址,而不是連不上的pod的hostname。
在開啟的Eureka Server介面中,可以看到如下類似的內容,則證客戶端也能正常註冊服務。
總結
我們可以利用阿里雲Kubernetes容器服務,快速搭建一套分散式服務註冊與發現系統,為應用引
入和配置Eureka服務。歡迎大家使用阿里雲上的容器服務,快速搭建一套分散式服務註冊與發現系統Eureka,比較簡單地整合到自己專案的微服務開發中。
相關文章
- 分散式(一) 搞定服務註冊與發現分散式
- 微服務5:服務註冊與發現(實踐篇)微服務
- 分散式註冊服務中心etcd在雲原生引擎中的實踐分散式
- spring cloud微服務分散式雲架構(一)-spring cloud 服務註冊與發現SpringCloud微服務分散式架構
- (十四)spring cloud微服務分散式雲架構-服務註冊與發現(Eureka、Consul)SpringCloud微服務分散式架構
- NodeJs服務註冊與服務發現實現NodeJS
- Eureka實現服務註冊與發現
- 實現etcd服務註冊與發現
- 分散式中幾種服務註冊與發現元件的原理與比較分散式元件
- nacos服務註冊與發現
- Eureka服務註冊與發現
- Spring Cloud Eureka 實現服務註冊與發現SpringCloud
- 服務註冊與發現的原理和實現
- SpringCloudAlibaba - 整合 Nacos 實現服務註冊與發現SpringGCCloud
- 企業分散式微服務雲SpringCloud SpringBoot mybatis -服務的註冊與發現(Eureka)分散式微服務GCCloudSpring BootMyBatis
- Zookeeper實現服務註冊/發現
- spring cloud微服務分散式雲架構--服務註冊(consul)SpringCloud微服務分散式架構
- 微服務4:服務註冊與發現微服務
- etcd與服務註冊及發現
- springcloud之服務註冊與發現SpringGCCloud
- Nacos服務註冊與發現原理
- 服務註冊與發現之ETCD
- 三. SpringCloud服務註冊與發現SpringGCCloud
- 聊聊微服務的服務註冊與發現!微服務
- 微服務SpringCloud之服務註冊與發現微服務SpringGCCloud
- consul服務註冊與服務發現的巨坑
- SpringCloud服務的註冊與發現(Eureka)SpringGCCloud
- SpringColud Eureka的服務註冊與發現SpringGC
- 04-Consul服務註冊與發現
- Nacos服務註冊與發現的原理
- SpringCloud(3)---Eureka服務註冊與發現SpringGCCloud
- Nacos 服務註冊與發現原理分析
- 6.Zookeeper服務註冊與發現
- 用 etcd 實現服務註冊和發現
- spring cloud構建網際網路分散式微服務雲平臺-服務註冊與發現SpringCloud分散式微服務
- go-kit微服務:服務註冊與發現Go微服務
- 微服務Consul系列之服務註冊與發現微服務
- 一文搞懂服務註冊發現的原理與實現