中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

SpringCloud微服務(wù)架構(gòu)升級的示例分析

這篇文章主要介紹SpringCloud微服務(wù)架構(gòu)升級的示例分析,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)公司:于2013年創(chuàng)立為各行業(yè)開拓出企業(yè)自己的“網(wǎng)站建設(shè)”服務(wù),為數(shù)千家公司企業(yè)提供了專業(yè)的網(wǎng)站設(shè)計、成都網(wǎng)站制作、網(wǎng)頁設(shè)計和網(wǎng)站推廣服務(wù), 按需網(wǎng)站設(shè)計由設(shè)計師親自精心設(shè)計,設(shè)計的效果完全按照客戶的要求,并適當(dāng)?shù)奶岢龊侠淼慕ㄗh,擁有的視覺效果,策劃師分析客戶的同行競爭對手,根據(jù)客戶的實(shí)際情況給出合理的網(wǎng)站構(gòu)架,制作客戶同行業(yè)具有領(lǐng)先地位的。

一、背景

1.1 應(yīng)用系統(tǒng)的架構(gòu)歷史

SpringCloud微服務(wù)架構(gòu)升級的示例分析

1.2 什么是微服務(wù)?
起源:微服務(wù)的概念源于 2014 年 3 月 Martin Fowler 所寫的一篇文章“Microservices”。文中內(nèi)容提到:微服務(wù)架構(gòu)是一種架構(gòu)模式,它提倡將單一應(yīng)用程序劃分成一組小的服務(wù),服務(wù)之間互相協(xié)調(diào)、互相配合,為用戶提供最終價值。

通信方式:每個服務(wù)運(yùn)行在其獨(dú)立的進(jìn)程中,服務(wù)與服務(wù)間采用輕量級的通信機(jī)制互相溝通(通常是基于 HTTP 的 RESTful API)。

微服務(wù)的常規(guī)定義:微服務(wù)是一種架構(gòu)風(fēng)格,一個大型復(fù)雜軟件應(yīng)用由一個或多個微服務(wù)組成。系統(tǒng)中的各個微服務(wù)可被獨(dú)立部署,各個微服務(wù)之間是松耦合的。每個微服務(wù)僅關(guān)注于完成一件任務(wù)。

把原來的一個完整的進(jìn)程服務(wù),拆分成兩個或兩個以上的進(jìn)程服務(wù),且互相之間存在調(diào)用關(guān)系,與原先單一的進(jìn)程服務(wù)相比,就是“微服務(wù)”。(微服務(wù)是一個比較級的概念,而不是單一的概念)

1.3 微服務(wù)架構(gòu)的優(yōu)勢

  • 可擴(kuò)展性:在增加業(yè)務(wù)功能時,單一應(yīng)用架構(gòu)需要在原先架構(gòu)的代碼基礎(chǔ)上做比較大的調(diào)整,而微服務(wù)架構(gòu)只需要增加新的微服務(wù)節(jié)點(diǎn),并調(diào)整與之有關(guān)聯(lián)的微服務(wù)節(jié)點(diǎn)即可。在增加業(yè)務(wù)響應(yīng)能力時,單一架構(gòu)需要進(jìn)行整體擴(kuò)容,而微服務(wù)架構(gòu)僅需要擴(kuò)容響應(yīng)能力不足的微服務(wù)節(jié)點(diǎn)。

  • 容錯性:在系統(tǒng)發(fā)生故障時,單一應(yīng)用架構(gòu)需要進(jìn)行整個系統(tǒng)的修復(fù),涉及到代碼的變更和應(yīng)用的啟停,而微服務(wù)架構(gòu)僅僅需要針對有問題的服務(wù)進(jìn)行代碼的變更和服務(wù)的啟停。其他服務(wù)可通過重試、熔斷等機(jī)制實(shí)現(xiàn)應(yīng)用層面的容錯。

  • 技術(shù)選型靈活:微服務(wù)架構(gòu)下,每個微服務(wù)節(jié)點(diǎn)可以根據(jù)完成需求功能的不同,自由選擇最適合的技術(shù)棧,即使對單一的微服務(wù)節(jié)點(diǎn)進(jìn)行重構(gòu),成本也非常低。

  • 開發(fā)運(yùn)維效率更高:每個微服務(wù)節(jié)點(diǎn)都是一個單一進(jìn)程,都專注于單一功能,并通過定義良好的接口清晰表述服務(wù)邊界。由于體積小、復(fù)雜度低,每個微服務(wù)可由一個小規(guī)模團(tuán)隊或者個人完全掌控,易于保持高可維護(hù)性和開發(fā)效率。

Spring Cloud作為目前最流行的微服務(wù)開發(fā)框架,不是采用了Spring Cloud框架就實(shí)現(xiàn)了微服務(wù)架構(gòu),具備了微服務(wù)架構(gòu)的優(yōu)勢。正確的理解是使用Spring Cloud框架開發(fā)微服務(wù)架構(gòu)的系統(tǒng),使系統(tǒng)具備微服務(wù)架構(gòu)的優(yōu)勢(Spring Cloud就像工具,還需要“做”的過程)。

1.4 什么是Spring Boot?什么是Spring Cloud?

Spring Boot框架是由Pivotal團(tuán)隊提供的全新框架,其設(shè)計目的是用來簡化基于Spring應(yīng)用的初始搭建以及開發(fā)過程。

SpringBoot框架使用了特定的方式來進(jìn)行應(yīng)用系統(tǒng)的配置,從而使開發(fā)人員不再需要耗費(fèi)大量精力去定義模板化的配置文件。

Spring Cloud是一個基于Spring Boot實(shí)現(xiàn)的云應(yīng)用開發(fā)工具,它為基于JVM的云應(yīng)用開發(fā)中的配置管理、服務(wù)注冊,服務(wù)發(fā)現(xiàn)、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分布式會話和集群狀態(tài)管理等操作提供了一種簡單的開發(fā)方式。

1.5 微服務(wù)、Spring Boot、Spring Cloud三者之間的關(guān)系

  • 思想:微服務(wù)是一種架構(gòu)的理念,提出了微服務(wù)的設(shè)計原則,從理論為具體的技術(shù)落地提供了指導(dǎo)思想。

  • 腳手架:Spring Boot是一套快速配置腳手架,可以基于Spring Boot快速開發(fā)單個微服務(wù)。

  • 多個組件的集合:Spring Cloud是一個基于Spring Boot實(shí)現(xiàn)的服務(wù)治理工具包;Spring Boot專注于快速、方便集成的單個微服務(wù)個體;Spring Cloud關(guān)注全局的服務(wù)治理框架。

二、技術(shù)解析

2.1 Everything is jar, Everything is http

Spring Boot通過@SpringBootApplication注解標(biāo)識為Spring Boot應(yīng)用程序。所有的應(yīng)用都通過jar包方式編譯,部署和運(yùn)行。

@SpringBootApplication 
public class Application {   
  private static final Logger LOGGER = LoggerFactory.getLogger(Application.class);   
  public static void main(String[] args) {     
    SpringApplication.run(Application.class, args);     
    LOGGER.info(”啟動成功!");   
  } 
}

每個Spring Boot的應(yīng)用都可以通過內(nèi)嵌web容器的方式提供http服務(wù),僅僅需要在pom文件中依賴spring-boot-start-web即可,原則上微服務(wù)架構(gòu)希望每個獨(dú)立節(jié)點(diǎn)都提供http服務(wù)。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

2.2 Spring boot Task 任務(wù)啟動和定時任務(wù)

在Spring Boot需要啟動任務(wù)時,只要繼承CommandLineRunner接口實(shí)現(xiàn)其run方法即可。

@SpringBootApplication 
public class ClientDataListener implements CommandLineRunner
  public void run(String... strings) throws Exception {   
    clientInfoListenerHandler(); 
  }
}

在Spring Boot需要執(zhí)行定時任務(wù)時,只需要在定時任務(wù)方法上增加@Scheduled(cron = “0 15 0 * * ?”)注解(支持標(biāo)準(zhǔn)cron表達(dá)式),并且在服務(wù)啟動類上增加@EnableScheduling的注解即可。

@SpringBootApplication
@EnableScheduling
public class Application {   
  private static final Logger LOGGER = LoggerFactory.getLogger(Application.class);   
  public static void main(String[] args) {     
    SpringApplication.run(Application.class, args);     
    LOGGER.info(”啟動成功!");   
  } 
}
// some class
@Scheduled(cron = "0 15 0 * * ?")
public void someTimeTask() {
  ***
}

2.3 Spring boot Actuator 監(jiān)控

Actuator是spring boot提供的對應(yīng)用系統(tǒng)自身進(jìn)行監(jiān)控的組件,在引入spring-boot-start-web基礎(chǔ)上引入spring-boot-starter-actuator即可。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2.4 Spring cloud Config 配置中心

在我們實(shí)現(xiàn)微服務(wù)架構(gòu)時,每個微服務(wù)節(jié)點(diǎn)都需要自身的相關(guān)配置數(shù)據(jù)項(xiàng),當(dāng)節(jié)點(diǎn)眾多,維護(hù)就變得非常困難,因此需要建立一個中心配置服務(wù)。

Spring Cloud Config分為兩部分。Spring Cloud Config server作為一個服務(wù)進(jìn)程,Spring Cloud Config File為配置文件存放位置。

2.5 Spring cloud Eureka 服務(wù)注冊中心

服務(wù)注冊的概念早在微服務(wù)架構(gòu)之前就出現(xiàn)了,微服務(wù)架構(gòu)更是把原先的單一應(yīng)用節(jié)點(diǎn)拆分成非常多的微服務(wù)節(jié)點(diǎn)?;ハ嘀g的調(diào)用關(guān)系會非常復(fù)雜,Spring Cloud Eureka作為注冊中心,所有的微服務(wù)都可以將自身注冊到Spring Cloud Eureka進(jìn)行統(tǒng)一的管理和訪問(Eureka和Zookeeper不同,在AOP原則中選擇了OP,更強(qiáng)調(diào)服務(wù)的有效性)

2.6 Spring cloud Zuul 服務(wù)端智能路由

當(dāng)我們把所有的服務(wù)都注冊到Eureka(服務(wù)注冊中心)以后,就涉及到如何調(diào)用的問題。Spring Cloud Zuul是Spring Cloud提供的服務(wù)端代理組件,可以看做是網(wǎng)關(guān),Zuul通過Eureka獲取到可用的服務(wù),通過映射配置,客戶端通過訪問Zuul來訪問實(shí)際需要需要訪問的服務(wù)。所有的服務(wù)通過spring.application.name做標(biāo)識,

不同IP地址,相同spring.application.name就是一個服務(wù)集群。當(dāng)我們增加一個相同spring.application.name的節(jié)點(diǎn),Zuul通過和Eureka通信獲取新增節(jié)點(diǎn)的信息實(shí)現(xiàn)智能路由,增加該類型服務(wù)的響應(yīng)能力。

2.7 Spring cloud Ribbon 客戶端智能路由

與Spring Cloud Zuul的服務(wù)端代理相對應(yīng),Spring Cloud Ribbon提供了客戶端代理。在服務(wù)端代理中,客戶端并不需要知道最終是哪個微服務(wù)節(jié)點(diǎn)為之提供服務(wù),而客戶端代理獲取實(shí)質(zhì)提供服務(wù)的節(jié)點(diǎn),并選擇一個進(jìn)行服務(wù)調(diào)用。Ribbon和Zuul相似,也是通過和Eureka(服務(wù)注冊中心)進(jìn)行通信來實(shí)現(xiàn)客戶端智能路由。

2.8 Spring cloud Sleuth 分布式追蹤

SpringCloud微服務(wù)架構(gòu)升級的示例分析

2.9 Spring cloud Zipkin 調(diào)用鏈

SpringCloud微服務(wù)架構(gòu)升級的示例分析

2.10 Spring cloud Feign http客戶端

Spring Cloud Feign是一種聲明式、模板化的http客戶端。 使用Spring Cloud Feign請求遠(yuǎn)程服務(wù)時能夠像調(diào)用本地方法一樣,讓開發(fā)者感覺不到這是遠(yuǎn)程方法(Feign集成了Ribbon做負(fù)載均衡)。

把遠(yuǎn)程服務(wù)和本地服務(wù)做映射

@FeignClient(name = "rabbitmq-http", url = "${SKYTRAIN_RABBITMQ_HTTP}") 
public interface TaskService {   
  @RequestMapping(value = "/api/queues", method = RequestMethod.GET)   
  public String query(@RequestHeader("Authorization") String token); 
}

以調(diào)用本地服務(wù)的方式調(diào)用遠(yuǎn)程服務(wù)

@Autowired 
private TaskService taskService; 
private String queryRabbitmqStringInfo() {   
  byte[] credentials = Base64 .encodeBase64((rabbitmqHttpUserName + ":" + rabbitmqHttpPassword).getBytes(StandardCharsets.UTF_8));   
  String token = "Basic " + new String(credentials, StandardCharsets.UTF_8);   
  return taskService.query(token); 
}

2.11 Spring cloud Hystrix 斷路器

SpringCloud微服務(wù)架構(gòu)升級的示例分析

三、微服務(wù)實(shí)踐

3.1 我們開發(fā)的幾個微服務(wù)組件—應(yīng)用管理中心

應(yīng)用管理中心可以對每個已經(jīng)注冊的微服務(wù)節(jié)點(diǎn)進(jìn)行停止,編譯,打包,部署,啟動的完整的上線操作。

3.2 我們開發(fā)的幾個微服務(wù)組件—zookeeper數(shù)據(jù)查詢中心

zookeeper數(shù)據(jù)查詢中心根據(jù)zookeeper地址,端口,命令獲取zookeeper數(shù)據(jù)信息。

3.3 我們開發(fā)的幾個微服務(wù)組件—微服務(wù)健康檢測中心

健康檢測中心周期性檢查每個微服務(wù)的狀態(tài),當(dāng)發(fā)現(xiàn)有微服務(wù)狀態(tài)處于DOWN或連接超時時,觸發(fā)報警。

3.4 我們開發(fā)的幾個微服務(wù)組件—定時任務(wù)查詢中心

// 在BeanPostProcessor子類中攔截
@Component
public class SkytrainBeanPostProcessor implements BeanPostProcessor, Ordered {
  ***
  /**
   * Bean 實(shí)例化之后進(jìn)行的處理
   */
  public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
    beanPostProcessor.postProcessAfter(bean, beanName);
    return bean;
  }
  ***
}
// 攔截后獲取定時任務(wù)注解
***
public Object postProcessAfter(Object bean, String beanName) {
  Class targetClass = AopUtils.getTargetClass(bean);
  Map annotatedMethods = MethodIntrospector.selectMethods(targetClass,
      new MethodIntrospector.MetadataLookup() {
 
        public Set inspect(Method method) {
 
          Set scheduledMethods = AnnotatedElementUtils.getMergedRepeatableAnnotations(method,
              Scheduled.class, Schedules.class);
          return (!scheduledMethods.isEmpty() ? scheduledMethods : null);
        }
      });
  if (!annotatedMethods.isEmpty()) {
    String className = targetClass.getName();
    for (Map.Entry entry : annotatedMethods.entrySet()) {
      Method method = entry.getKey();
      for (Scheduled scheduled : entry.getValue()) {
        String key = className + ":" + method.getName();
        String value = scheduled.toString();
        taskInfos.put(key, value);
      }
    }
  }
  return null;
}
***
 
// 獲取定時任務(wù)后注冊
***
public void taskRegister() {
  String nodeInfo = ipAddress + ":" + serverPort + ":";
  try {
    /**
     * 定時任務(wù)
     */
    Map infos = taskInfos;
    for (Entry item : infos.entrySet()) {
      String taskId = nodeInfo + item.getKey();
      String taskParameter = item.getValue();
      JSONObject info = new JSONObject();
      info.put("taskId", taskId);
      info.put("taskParameter", taskParameter);
      info.put("applicationName", applicationName);
      info.put("taskType", "schedule");
      LOGGER.info(info.toString());
      zooKeeperExecutor.createZKNode(SKYTRAIN_TASK_ZKNODE_PREFIX + taskId, info.toString());
    }
  }
  catch (Exception ex) {
    LOGGER.error("", ex);
  }
}
***

3.5 微服務(wù)的分類

  • 微服務(wù)平臺組件

  • 公共服務(wù)組件

  • 基礎(chǔ)服務(wù)組件/業(yè)務(wù)服務(wù)組件

3.6 整體微服務(wù)架構(gòu)圖

SpringCloud微服務(wù)架構(gòu)升級的示例分析

以上是“SpringCloud微服務(wù)架構(gòu)升級的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

名稱欄目:SpringCloud微服務(wù)架構(gòu)升級的示例分析
標(biāo)題網(wǎng)址:http://www.rwnh.cn/article0/ghcgio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站移動網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航響應(yīng)式網(wǎng)站、關(guān)鍵詞優(yōu)化、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司
紫阳县| 读书| 凤阳县| 永修县| 龙井市| 保定市| 泰来县| 宁远县| 綦江县| 莱州市| 镇巴县| 东至县| 东台市| 兴业县| 札达县| 乐昌市| 博白县| 河西区| 钦州市| 榆林市| 昭觉县| 海安县| 临西县| 沭阳县| 海口市| 邵阳县| 五台县| 阿拉善左旗| 垣曲县| 黔东| 龙陵县| 佛冈县| 临邑县| 阳信县| 潼南县| 赞皇县| 个旧市| 新巴尔虎左旗| 望城县| 廉江市| 怀来县|