日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

iis7 您无权使用所提供的凭据查看此目录或页面。_使用Spring Cloud和Docker构建微服务架构

發布時間:2025/4/16 javascript 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iis7 您无权使用所提供的凭据查看此目录或页面。_使用Spring Cloud和Docker构建微服务架构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文:https://dzone.com/articles/microservice-architecture-with-spring-cloud-and-do作者:Alexander Lukyanchikov譯者:Oopsguy

本文通過一個使用了 Spring Boot、Spring Cloud 和 Docker 構建的概念型應用示例來提供了了解常見的微服務架構模式的起點。

代碼可以在 Github 上獲得,同時 Docker Hub 上也提供了鏡像。你只需要一個命令即可啟動整個系統。

我選擇了一個老項目作為這個系統的基礎,它的后端以前是單體應用。該應用提供了處理個人財務、整理收入開銷、管理儲蓄、分析統計和創建簡單預測等功能。

功能服務

整個應用分解為三個核心微服務。它們都是可以獨立部署的應用,圍繞某些業務功能進行組織。

賬戶服務

包含一般用戶輸入邏輯和相關驗證:收入/開銷記錄、儲蓄和賬戶設置。

統計服務

計算關鍵的統計參數,并獲取每一個賬戶的時間序列。一個數據點包含了基于貨幣和時間段常規化后的值。該數據可用于跟蹤賬戶生命周期中的現金流量動態。

通知服務

存儲用戶的聯系信息和通知設置(如提醒和備份頻率)。安排工作人員從其它服務收集所需的信息并向訂閱的客戶發送電子郵件。

注意

  • 每一個微服務擁有自己的數據庫,因此沒有辦法繞過 API 直接訪問和持久化數據。
  • 在這個項目中,我使用 MongoDB 作為每個服務的主數據庫。擁有一個混合持久化架構(polyglot persistence architecture)也是很有意義的(數據庫的選擇根據微服務的要求而定)。
  • 服務間(Service-to-service)通信非常簡單:微服務僅使用同步的 REST API 進行通信。現實中的系統常見的做法是使用多種組合的交互風格。例如,執行同步的 GET 請求檢索數據,并通過消息代理(broker)使用異步方法執行創建/更新操作,以便解除服務和緩沖消息之間的耦合。然而,我們需要面臨最終的一致性的問題。

基礎設施服務

分布式系統中常見的模式,可以幫助我們描述核心服務如何工作。Spring Cloud提供了強大的工具,可以增強 Spring Boot 應用的行為來實現這些模式。我會簡要介紹一下:

配置服務

Spring Cloud Config 是分布式可水平擴展的配置服務中心。它使用了一個可拔插存儲庫層(repository layer),當前支持本地存儲、Git 和 Subversion 等。

在此項目中,我使用了 native profile,它簡單地從本地 classpath 下加載配置文件。你可以在配置服務資源中查看 shared 目錄。此時,當通知服務請求它的配置時,配置服務將響應回 shared/notification-service.yml 和 shared/application.yml(所有客戶端應用之間共享)。

客戶端使用

只需要使用 sprng-cloud-starter-config 依賴構建 Spring Boot 應用,自動配置將會完成其它工作。

現在你的應用中不需要任何嵌入的 properties,只需要提供有應用名稱和配置服務 url 的 bootstrap.yml 即可:

spring:application:name: notification-servicecloud:config:uri: http://config:8888fail-fast: true

使用Spring Cloud Config,您可以動態更改應用配置

比如,EmailService bean 使用了 @RefreshScope 注解。這意味著你可以更改電子郵件的內容和主題,無需重新構建和重啟通知服務應用。

首先,在配置服務器中更改必要的屬性。然后,對通知服務執行刷新請求:curl -H "Authorization: Bearer #token#" -XPOST http://127.0.0.1:8000/notifications/refresh。

你也可以使用 webhook 來自動執行此過程。

注意

  • 動態刷新存在一些限制。@RefreshScope 不能和 @Configuraion 類一同工作,并且不會作用于 @Scheduled 方法。
  • fail-fast 屬性意味著如果 Spring Boot 應用無法連接到配置服務,將會立即啟動失敗。當你同時啟動所有應用時,它非常有用。
  • 下面有重要的安全提示

授權服務

負責授權的部分被完全提取到單獨的服務器中,它為后端資源服務提供OAuth2 令牌。授權服務器用于用戶授權以及在一定范圍內保護機器間的通信安全。

在此項目中,我使用密碼憑據作為用戶授權的授權類型(因為它僅被本地應用 UI 使用)和客戶端憑據作為微服務授權的授權類型。

Spring Cloud Security 提供了方便的注解和自動配置,使其在服務器端或者客戶端都可以很容易地實現。你可以在文檔中了解到更多信息,并在授權服務器代碼中檢查配置明細。

從客戶端角度來看,一切都與傳統基于會話的授權方式完全相同。你可以從請求中獲取 Principal 對象、檢查用戶角色和其他基于表達式訪問控制和 @PreAuthorize 注解的內容。

PiggyMetrics(帳戶服務、統計服務、通知服務和瀏覽器)中的每一個客戶端都有一個邊界:用于后臺服務的服務器、用于瀏覽器展示的 UI。所以我們也可以保護控制器避免受到外部訪問,例如:

@PreAuthorize("#oauth2.hasScope('server')") @RequestMapping(value = "accounts/{name}", method = RequestMethod.GET) public List<DataPoint> getStatisticsByAccountName(@PathVariable String name) {return statisticsService.findByAccountName(name); }

API 網關

你可以看到,有三個核心服務。它們向客戶端暴露外部 API。在現實系統中,這個數量可以增長得非常快速,同時整個系統將會變得非常復雜。實際上,一個復雜頁面的渲染可能涉及到數百個服務。

理論上,客戶端可以直接向每個微服務發送請求。但這種方式是存在挑戰和限制的,比如需要知道所有端點的地址,分別對每一段信息執行 HTTP 請求,然后在客戶端合并所有請求結果。另一個問題是,部分微服務使用的協議并不是 Web 友好協議,可能只適用于后端。

通常,一個更好的方法是使用 API 網關。它是正系統的單入口點,用于通過將請求路由到適當的后端服務或者通過調用多個后端服務并聚合結果來處理請求。此外,它還可以用于認證、insights、壓力測試、金絲雀測試(canary testing)、服務遷移、靜態響應處理和動態流量管理。

Netflix 開源了這樣的邊緣服務,現在用 Spring Cloud,我們可以用一個 @EnabledZuulProxy 注解來啟用它。在這個項目中,我使用 Zuul 存儲靜態內容(UI 應用),并將請求路由到適當的微服務。以下是一個簡單的基于前綴(prefix-based)路由的通知服務配置:

zuul:routes:notification-service:path: /notifications/**serviceId: notification-servicestripPrefix: false

上述配置這意味著所有以/notification開頭的請求將被路由到通知服務。你可以看到,里面沒有硬編碼的地址。Zuul 使用服務發現機制來定位通知服務實例以及斷路器和負載均衡器,如下所述。

服務發現

另一種常見的架構模式是服務發現。它允許自動檢測服務實例的網絡位置,由于自動擴展、故障和升級,服務實例的地址可能是動態分配的。

服務發現的關鍵部分是注冊。我將 Netflix Eureka 引入這個項目,當客戶端需要負責確定可用的服務實例(使用注冊服務器)的位置和跨平臺的負載均衡請求時,Eureka 就是客戶端發現模式的一個很好例子。

使用 Spring Boot,你只需使用 spring-cloud-starter-eureka-server 依賴、@EnabledEurekaServer 注解和簡單的配置屬性就能輕松構建 Eureka 注冊中心(Eureka Registry)。

使用 @EnabledDiscoveryClient 注解和帶有應用名稱的 bootstrap.yml 來啟用客戶端支持:

spring:application:name: notification-service

現在,在應用啟動時,它將向 Eureka 服務器注冊并提供元數據,如主機和端口、健康檢查指示器 URL、主頁等信息。Eureka 接收來自從某服務的每個實例的心跳消息。如果心跳失敗超過配置的時間限制,該實例將從注冊表中刪除。

此外,Eureka 還提供了一個簡單的界面,你可以通過它來跟蹤運行中的服務和可用實例的數量:http://localhost:8761

負載均衡器、斷路器和 HTTP 客戶端

Netflix OSS 提供了另一套很棒的工具。

> Ribbon

Ribbon 是一個客戶端負載均衡器,可以很好地控制 HTTP 和 TCP 客戶端的行為。與傳統的負載均衡器相比,每次線上調用都不需要額外的跨越 —— 你可以直接請求所需的服務。

它與 Spring Cloud 和服務發現是集成在一起的,可開箱即用。Eureka 客戶端提供了可用服務器的動態列表,因此 Ribbon 可以在它們之間進行平衡。

> Hystrix

Hystrix 是斷路器模式的一種實現。它可以通過網絡訪問依賴來控制延遲和故障,旨在能在具有大量微服務的分布式環境中停止級聯故障。這有助于快速失敗并盡快恢復 —— 自我修復在容錯系統中是非常重要的。

除了斷路器控制,在使用 Hystrix,你可以添加一個備用方法,在主命令失敗的情況下,該方法將被調用以獲取默認值。

此外,Hystrix 生成每個命令的執行結果和延遲的指標信息,我們可以用它來監視系統的行為。

> Feign

Feign 是一個聲明式 HTTP 客戶端,能與 Ribbon 和 Hystrix 無縫集成。實際上,通過一個 spring-cloud-starter-feign 依賴和 @EnabledFeignClients 注解,你可以使用一整套負載均衡器、斷路器和 HTTP 客戶端,并附帶一個合理的的默認配置。

以下是賬戶服務的示例:

@FeignClient(name = "statistics-service") public interface StatisticsServiceClient {@RequestMapping(method = RequestMethod.PUT, value = "/statistics/{accountName}", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)void updateStatistics(@PathVariable("accountName") String accountName, Account account); }
  • 你需要的只是一個接口
  • 你可以在 Spring MVC 控制器和 Feign 方法之間共享 @RequestMapping 部分
  • 以上示例僅指定所需要的服務 ID —— statistics-service,這得益于 Eureka 的自動發現(但顯然你可以使用特定的 URL 訪問任何資源)。

監控儀表盤

在這個項目配置中,每一個集成了 Hystrix 的微服務都通過 Spring Cloud Bus(通過 AMQP broker)將指標推送到 Turbine。監控項目只是一個使用了 Turbine和 Hystrix 儀表盤的小型 Spring Boot 應用。

讓我們看看系統在負載下的行為:賬戶服務調用統計服務和它在一個變化的模擬延遲下的響應。響應超時閾值設置為 1 秒。

日志分析

當你嘗試查找分布式環境中的問題時,集中式日志記錄就顯得非常有用。Elasticsearch、Logstash 和 Kibana 技術棧可讓你輕松搜索和分析日志、利用率和網絡活動數據。在我的另一個項目中已經有現成的 Docker 配置。

安全

高級安全配置已經超過了此概念性項目的范圍。為了模擬真實系統,請考慮使用 HTTPS 和 JCE 密鑰庫來加密微服務的密碼和配置服務器的 properties 內容(有關詳細信息,請參閱文檔)。

基礎設施自動化

部署微服務比部署單一的應用的流程要復雜得多,因為它們相互依賴,因此擁有完全基礎設置自動化是非常重要的。我們可以通過持續交付的方式獲得以下好處:

  • 隨時發布軟件的能力。
  • 任何構建都可能成為一個發行版本。
  • 構建工件(artifact)一次,根據需要進行部署。

這是一個簡單的持續交付工作流程,該項目的實現:

在此配置中,Travis CI 為每一次的 Git 推送創建了標簽鏡像。因此,每個微服務在 Docker Hub 上的都會有一個 latest 鏡像,而較舊的鏡像則使用 Git 提交的哈希進行標記。在需要時,可以輕松部署任何一個鏡像,并快速回滾。

如何運行全部?

這真的很簡單,我建議你嘗試一下。請記住,你將要啟動 8 個 Spring Boot 應用、4 個 MongoDB 實例和一個 RabbitMq。請確保你的機器上有 4GB 的內存來運行網關、注冊中心、配置中心、認證服務和賬戶中心這些重要的服務。

運行之前

  • 安裝 Docker 和 Docker Compose
  • 配置環境變量:CONFIG_SERVICE_PASSWORD, NOTIFICATION_SERVICE_PASSWORD, STATISTICS_SERVICE_PASSWORD, ACCOUNT_SERVICE_PASSWORD, MONGODB_PASSWORD

生產模式

這種模式下,所有最新的鏡像都將從 Docker Hub 上拉取。只需要復制docker-compose.yml并執行docker-compose up -d即可。

開發模式

如果你想自己構建鏡像(例如,修改部分代碼),你需要克隆所有倉庫(repository)并使用 Mavne 構建工件(artifact)。然后,運行 docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d

docker-compose.dev.yml 繼承了 docker-compose.yml,附帶額外配置,可在本地構建鏡像,并暴露所有容器端口以方便開發。

重要的端點(Endpoint)

  • localhost:80 —— 網關
  • localhost:8761 —— Eureka儀表盤
  • localhost:9000 —— Hystrix儀表盤
  • localhost:8989 —— Turbine stream(Hystrix儀表盤來源)
  • localhost:15672 —— RabbitMq管理

注意

所有 Spring Boot 應用都需要在配置服務器運行時才能啟動。得益于 Spring Boot 的 fail-fast 屬性和 docker-compsoe 的 restart:always 選項,我們可以同時啟動所有容器。這意味著所有依賴的容器將嘗試重啟,直到配置服務器啟動運行為止。

此外,服務發現機制在所有應用啟動后需要一段時間。在實例、Eureka 服務器和客戶端的本地緩存中都具有相同的元數據之前,任何服務都不可用于客戶端發現,因此可能需要 3 次心跳。默認的心跳周期為 30 秒。

總結

以上是生活随笔為你收集整理的iis7 您无权使用所提供的凭据查看此目录或页面。_使用Spring Cloud和Docker构建微服务架构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 夜夜躁狠狠躁日日躁 | 国产精品一区二区精品 | 天堂精品一区二区三区 | 在线蜜桃| 狠狠爱五月婷婷 | av解说在线观看 | 亚洲精品国产成人av在线 | 毛片高清 | 国产精选一区二区 | 欧美乱大交xxxxx潮喷l头像 | 少妇流白浆 | 国产福利第一页 | 日韩美女一区二区三区 | 亚洲中文字幕97久久精品少妇 | 亚洲欧美精品久久 | 国产伦一区二区三区 | 成人动态视频 | 亚洲欧洲免费 | 极品销魂美女少妇尤物 | 免费在线播放av | 69精品久久| 性色av蜜臀av色欲av | 超碰97av | 亚洲蜜桃av | 人人干av| 日韩三级av| 重囗味sm一区二区三区 | 午夜67194| 国产3p在线播放 | 奇米777第四色 | 在线播放精品视频 | 欧美激情一区二区三区四区 | 一本—道久久a久久精品蜜桃 | 九九热这里只有精品6 | www天堂av| 夜夜综合网 | 成人自拍在线 | 成人在线网站 | 极品av在线 | 91视频一区 | 黄色aa大片| 色综合天天综合综合国产 | 亚洲精品人妻av | 欧美综合在线一区 | 制服丝袜在线第一页 | av之家在线| 波多野结衣一二三四区 | 最新中文字幕第一页 | 成人免费毛片色戒 | 乱日视频| 欧美熟妇另类久久久久久不卡 | 在线一区二区三区视频 | 夜夜操免费视频 | 不卡的av | 亚洲最大的黄色网 | 精品国产1区2区 | 男女精品视频 | 国产午夜精品久久 | 中文字幕无码av波多野吉衣 | 欧美人与禽zoz0性3d | 国产一级aa大片毛片 | 美女av网址| 国产精品第12页 | 五月天婷婷伊人 | 久久免费公开视频 | 欧美久久天堂 | 亚洲永久无码精品一区二区 | 亚色综合| 亚洲成人基地 | 国产精品视频在线播放 | 亚洲综合套图 | 91在线观看视频网站 | 日本熟妇成熟毛茸茸 | 国产精品资源站 | 免费激情小视频 | 一级色网站 | www.色呦呦 | 久久精品国产99久久不卡 | 少妇欧美激情一区二区三区 | 久国产| 中文字幕日本 | 成人春色影视 | 欧美香蕉网 | 少妇av一区二区 | 91天堂网 | 男人在线天堂 | 日韩一卡二卡三卡四卡 | 亚洲va久久久噜噜噜无码久久 | 色哟哟网站 | 亚洲欧美日韩天堂 | 国产九九精品 | 精品人妻无码一区二区三区蜜桃一 | 97狠狠操| www.天天操.com | 99热这里只| 中文字幕人妻无码系列第三区 | 日韩在线免费 | 夜色综合网 | 亚洲综合在线观看视频 |