<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Spring Boot 構建微服務實踐

          共 2669字,需瀏覽 6分鐘

           ·

          2021-01-06 21:17

          前言

          在本文中將分享關于 Spring Boot 構建微服務程序的 "黃金法則" ,歡迎大家補充。

          系統(tǒng)運行在白盒之上

          • 監(jiān)控可視化系統(tǒng)的作用效果絕對是出乎你的預料,無論是簡單的 Spring Boot Admin 還是復雜的 Grafana ,能夠識別出應用運行中的大部分問題,及時反饋給開發(fā)團隊。監(jiān)控系統(tǒng)提供了大量的圖表和報警監(jiān)控,使得對于故障有更快的響應速度。在微服務架構下,運行指標監(jiān)控和收集,則比單體應用更為重要。

          • 對于 Spring Boot 應用內(nèi)置 Spring Boot Actuator 來暴露一些運行的指標。若使用它,僅需要增加以下依賴即可:

          <dependency>
          ????<groupId>org.springframework.bootgroupId>
          ????<artifactId>spring-boot-starter-actuatorartifactId>
          dependency>
          • 對我們來說 http.server.requests 是最重要的指標之一,它提供了統(tǒng)計信息以及傳入請求的數(shù)量和響應時間。
          • 關于 actuator 存儲,業(yè)界比較成熟的是 InfluxDB 和 Prometheus。它們代表著不同的收集模型,Prometheus 會定期從應用公開的端點檢索數(shù)據(jù),而 InfluxDB 提供了必須由應用程序調(diào)用的 REST API。(當然如果你的應用規(guī)模比較小、或者團隊能力有限可以使用 Spring Boot Admin 這種基于內(nèi)存形式展示的中間件)

          • 當然注意生產(chǎn)環(huán)境務必屏蔽對外暴露,筆者在使用某些 APP 的后臺竟然可以直接獲取部分信息(某些操作可使服務宕機)。

          日志記錄

          • 對于日志記錄在開發(fā)過程中往往被忽視,但在后期運維過程中變得尤為重要。建議項目經(jīng)理在 review code 、測試團隊在業(yè)務測試過程中將日志輸出作為一項重要的依據(jù)。

          • 對于微服務架構應用使用相同的日志記錄標準,通過 MDC 記錄應用傳遞過程,區(qū)分不同的實例,并且能夠計算和存儲每個請求的執(zhí)行時間。

          • 對于日志存儲我們建議統(tǒng)一集中存儲,那么業(yè)界比較推薦的就是 Elastic Stack(ELK) 技術棧。

          <dependency>
          ????<groupId>net.logstash.logbackgroupId>
          ????<artifactId>logstash-logback-encoderartifactId>
          ????<version>5.3version>
          dependency>
          • 當然如果項目規(guī)模比較小或者團隊經(jīng)驗有限,可直接使用云廠商提供的日志處理工具 (七牛 logkit、日志易等價格挺便宜)

          確保接口文檔清晰可用

          • 對于微服務架構服務之間調(diào)用或者對外提供的 REST API 調(diào)用非常繁多,因此要特別注意提供清晰而正確的(及時)文檔。

          • 提起 swagger 大家肯定很熟悉強大的 API 文檔工具,業(yè)界必備的開發(fā)工具。通過簡單依賴和配置,即可完成在線接口文檔的維護。

          • 但 swagger 的功能相對較弱,對于實際開發(fā)過程中需要打通整套 DevOps 體系遠遠不夠。YApi 是高效、易用、功能強大的 api 管理平臺,旨在為開發(fā)、產(chǎn)品、測試人員提供更優(yōu)雅的接口管理服務。可以幫助開發(fā)者輕松創(chuàng)建、發(fā)布、維護 API,YApi 還為用戶提供了優(yōu)秀的交互體驗,開發(fā)人員只需利用平臺提供的接口數(shù)據(jù)寫入工具以及簡單的點擊操作就可以實現(xiàn)接口的管理。當然支持 swagger 接口一鍵導入 yapi 實時自動維護,減少重復勞動。
          • 如果是 dubbo 可以嘗試使用一下 smart-doc,是一款同時支持 java restful api 和 apache dubbo rpc 接口文檔生成的工具。完全基于注釋生成文檔,做到零侵入。

          應用信息透明

          • 我們遷移到微服務架構最重要的原因之一是對于持續(xù)交付的需求,快速交付的能力已經(jīng)能夠為市場人員帶來強大的競爭優(yōu)勢。甚至于一天可以發(fā)布多個版本,因此務必在版本中聲明當前的版本信息和變更信息等。

          • Spring Boot 提供了強大的 maven 插件,通過簡單的配置即可完成

          <plugins>
          ???<plugin>
          ??????<groupId>org.springframework.bootgroupId>
          ??????<artifactId>spring-boot-maven-pluginartifactId>
          ??????<executions>
          ?????????<execution>
          ????????????<goals>
          ???????????????<goal>build-infogoal>
          ????????????goals>
          ?????????execution>
          ??????executions>
          ???plugin>
          plugins>
          • 訪問 /actuator/info 端點即可發(fā)現(xiàn)部分有趣的信息
          curl?http://localhost:8080/actuator/info???????????????????????????15:35:44
          {"build":{"artifact":"demo","name":"demo","time":"2020-12-31T07:33:54.017Z","version":"0.0.1-SNAPSHOT","group":"com.example"}}?
          • 當然若通過 SpringBootAdmin 我們可以輕松瀏覽已注冊的應用程序列表,并檢出每個應用程序的版本或提交信息(需要額外引入 git-commit-id-plugin 插件)。

          及時更新依賴

          • 目前 Spring Boot 、Spring Cloud 團隊保持每月發(fā)布新的版本,每個版本或多或少的引入新的功能或者 BUG 修復。此外在最新穩(wěn)定版本中 Spring Boot 改善了應用程序的啟動時間和內(nèi)存占用,更好的和容器化結合。正因如此,所以值得去使用新的版本

          • 最新穩(wěn)定版本


          <parent>
          ???<groupId>org.springframework.bootgroupId>
          ???<artifactId>spring-boot-starter-parentartifactId>
          ???<version>2.4.1version>
          parent>
          <dependencyManagement>
          ???<dependencies>
          ??????<dependency>
          ?????????<groupId>org.springframework.cloudgroupId>
          ?????????<artifactId>spring-cloud-dependenciesartifactId>
          ?????????<version>2020.0.0version>
          ?????????<type>pomtype>
          ?????????<scope>importscope>
          ??????dependency>
          ???dependencies>
          dependencyManagement>
          • Spring Cloud 版本說明


          往期推薦

          伊爾福德站正式通車!Spring Cloud 2020 發(fā)布

          「Spring Boot 新特性」節(jié)省95%內(nèi)存占用

          「2020封箱」Spring Boot 2.4.1 發(fā)布

          「Spring Boot 新特性」一鍵構建Docker鏡像

          「SpringBoot 新特性」啟動耗時詳細監(jiān)控

          「Spring Boot 新特性」 jar 大小自動瘦身



          瀏覽 22
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美激精品 | 91精品国久久久久久无码一区二区三区 | 国产又粗又长又大视频 | 日韩国产精品一区 | av男人天堂网 |