日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

譯者 | 李睿

審校 | 孫淑娟 ?

如果用戶想在公共云基礎(chǔ)設(shè)施上運(yùn)行JAVA微服務(wù),那么可以利用多個(gè)云區(qū)域。這是一個(gè)好主意,其中有幾個(gè)原因。?

首先,由于硬件問題、云服務(wù)升級(jí)后引入的錯(cuò)誤或人為錯(cuò)誤,云計(jì)算可用區(qū)(Availability Zones)和云區(qū)域(Regions)經(jīng)常出現(xiàn)故障。最著名的S3中斷之一是因?yàn)锳WS公司的員工發(fā)布了錯(cuò)誤的操作命令。?

如果一個(gè)云區(qū)域發(fā)生故障,那么該區(qū)域的微服務(wù)也會(huì)發(fā)生故障。但是,如果跨多個(gè)云區(qū)域運(yùn)行微服務(wù)實(shí)例,即使美國東部地區(qū)出現(xiàn)大面積故障,也可以繼續(xù)運(yùn)行。?

其次,用戶可以選擇在美國東部部署微服務(wù),但應(yīng)用程序在大西洋彼岸的歐洲運(yùn)行。從歐洲用戶到美國東部應(yīng)用程序?qū)嵗耐笛舆t大約為100毫秒,將這個(gè)時(shí)間與來自美國東部(運(yùn)行微服務(wù)的數(shù)據(jù)中心附近)的用戶流量的5毫秒往返延遲進(jìn)行比較,當(dāng)歐洲用戶表示應(yīng)用程序速度較慢時(shí),不要感到驚訝。如果微服務(wù)實(shí)例部署在美國東部和歐洲西部地區(qū),就不會(huì)聽到這種負(fù)面反饋。?

最后,假設(shè)一個(gè)Java微服務(wù)服務(wù)于來自歐洲的用戶請(qǐng)求,但從美國的數(shù)據(jù)庫實(shí)例請(qǐng)求數(shù)據(jù)。在這種情況下,可能會(huì)違反數(shù)據(jù)駐留法規(guī)(如果GDPR法規(guī)將請(qǐng)求的數(shù)據(jù)分類為個(gè)人數(shù)據(jù))。然而,如果微服務(wù)實(shí)例在歐洲運(yùn)行,并從歐洲某個(gè)云區(qū)域的數(shù)據(jù)庫實(shí)例獲取個(gè)人數(shù)據(jù),那么就不會(huì)遇到監(jiān)管機(jī)構(gòu)所關(guān)注的問題。?

以下對(duì)本文的主題進(jìn)行介紹,但希望看到在多個(gè)云區(qū)域運(yùn)行Java微服務(wù)的一些好處。以下了解如何使用Spring Cloud開發(fā)和部署多個(gè)云區(qū)域微服務(wù)。?

高層次的概念?

以下以一個(gè)地理分布式Java Messenger為例,對(duì)微服務(wù)和Spring Cloud如何在多個(gè)云區(qū)域環(huán)境中發(fā)揮作用進(jìn)行深入了解。?

該應(yīng)用程序(由多個(gè)微服務(wù)組成)運(yùn)行在多個(gè)云區(qū)域:美國西部、美國中部、歐洲西部和亞洲南部。所有應(yīng)用程序?qū)嵗际菬o狀態(tài)的。?

Spring Cloud組件在應(yīng)用程序?qū)嵗诘南嗤茀^(qū)域中運(yùn)行。該應(yīng)用程序使用Spring Config Server進(jìn)行配置設(shè)置分發(fā),使用Spring Discovery Server進(jìn)行平滑和容錯(cuò)的服務(wù)間通信。?

選擇YugabyteDB作為分布式數(shù)據(jù)庫,可以輕松地遠(yuǎn)程運(yùn)行。另外,只要它是在PostgreSQL源代碼上構(gòu)建的,它就自然地與Spring Data和Spring生態(tài)系統(tǒng)的其他組件集成在一起。本文并不會(huì)回顧YugabyteDB多區(qū)域部署選項(xiàng)。?

用戶流量通過全局外部云負(fù)載均衡器到達(dá)微服務(wù)實(shí)例。簡(jiǎn)而言之,負(fù)載均衡器提供了一個(gè)單一的IP地址,可以從地球上的任何地點(diǎn)訪問。該IP地址(或轉(zhuǎn)換為該地址的DNS名稱)被提供給用戶的Web或移動(dòng)前端,它們使用該IP連接到應(yīng)用程序后端。負(fù)載均衡器自動(dòng)將用戶請(qǐng)求轉(zhuǎn)發(fā)到最近的應(yīng)用程序?qū)嵗O旅鎸⒃敿?xì)地演示這個(gè)云組件。?

目標(biāo)架構(gòu)?

多區(qū)域Java Messenger的目標(biāo)架構(gòu)如下所示:?

整個(gè)解決方案運(yùn)行在谷歌云平臺(tái)上。用戶可能更喜歡另一個(gè)云計(jì)算提供商提供的云服務(wù),所以可以放心使用。很多用戶喜歡使用谷歌云,因?yàn)樗峁┝碎_發(fā)人員體驗(yàn)、豐富且價(jià)格合理的基礎(chǔ)設(shè)施、快速且穩(wěn)定的網(wǎng)絡(luò),以及在本文中提到的其他好處。?

微服務(wù)實(shí)例可以根據(jù)需要部署在盡可能多的云區(qū)域中。?

在上圖中有兩個(gè)隨機(jī)云區(qū)域:Region A和Region B。微服務(wù)實(shí)例可以運(yùn)行在一個(gè)云區(qū)域的多個(gè)可用性分區(qū)中(例如Region A的Zone A和ZoneB),也可以運(yùn)行在一個(gè)云區(qū)域內(nèi)(Region B的Zone A)。?

每個(gè)云區(qū)域都有一個(gè)Spring Discovery和Config服務(wù)器的實(shí)例也是合理的,但特意為每個(gè)可用區(qū)運(yùn)行每個(gè)服務(wù)器的實(shí)例,以將延遲降至最低。?

誰決定哪個(gè)微服務(wù)實(shí)例將服務(wù)于用戶請(qǐng)求?那全局外部負(fù)載均衡器就是決策者!?

假設(shè)一位用戶通過手機(jī)打開Java Messenger,并發(fā)送了一條消息。帶有消息的請(qǐng)求將被發(fā)送到負(fù)載均衡器,它可以通過以下方式轉(zhuǎn)發(fā):?

(1)Region A是離用戶最近的云區(qū)域,并且在請(qǐng)求時(shí)處于正常狀態(tài)(沒有中斷)。負(fù)載均衡器根據(jù)這些條件選擇該區(qū)域。 ?

(2)在這個(gè)云區(qū)域中,微服務(wù)實(shí)例在Zone A和Zone B都可用。因此,如果這兩個(gè)可用區(qū)都處于活動(dòng)狀態(tài)并且正常運(yùn)行,負(fù)載均衡器可以選擇任何一個(gè)可用區(qū)。假設(shè)這個(gè)請(qǐng)求發(fā)送到Zone B。?

以下將解釋每個(gè)微服務(wù)負(fù)責(zé)什么。到目前為止,只需要知道消息傳遞微服務(wù)將所有應(yīng)用程序數(shù)據(jù)(消息、通道、用戶配置文件等)存儲(chǔ)在一個(gè)多區(qū)域YugabyteDB部署中。Attachments微服務(wù)使用全球分布的谷歌云存儲(chǔ)存儲(chǔ)用戶圖片。 ?

微服務(wù)和Spring Cloud?

以下進(jìn)一步討論微服務(wù)以及它們?nèi)绾卫肧pring Cloud。 ?

Messenger微服務(wù)實(shí)現(xiàn)了每個(gè)Messenger應(yīng)用程序必須具備的跨渠道和工作區(qū)發(fā)送消息的關(guān)鍵功能。Attachments微服務(wù)上載圖片和其他文件,可以在geo messenger的存儲(chǔ)庫中查看它們的源代碼。?

Spring Cloud配置服務(wù)器?

這兩個(gè)微服務(wù)都是在Spring Boot上構(gòu)建的。當(dāng)它們啟動(dòng)時(shí),他們從Spring Cloud Config Server中檢索配置設(shè)置,如果需要在分布式環(huán)境中外部化配置文件,這是一個(gè)很好的選項(xiàng)。?

配置服務(wù)器可以托管并從各種后端獲取配置,包括Git存儲(chǔ)庫、Vault和JDBC兼容數(shù)據(jù)庫。在Java geo messenger的情況下,使用Git選項(xiàng),下面一行來自應(yīng)用程序。兩個(gè)微服務(wù)請(qǐng)求的屬性文件Spring Boot從配置服務(wù)器加載設(shè)置:?

YAML ?
1spring.config.import=configserver:http://${CONFIG_SERVER_HOST}:${CONFIG_SERVER_PORT}?
  • 1.
  • 2.

Spring Cloud Discovery Server?

一旦啟動(dòng)了Messenger和Attachments微服務(wù),它們就會(huì)向Spring Cloud Discovery Server(屬于Spring Cloud.NETflix組件)的區(qū)域本地實(shí)例注冊(cè)。?

Discovery Server實(shí)例的位置在從Config Server實(shí)例傳輸?shù)囊韵屡渲迷O(shè)置中定義:?

YAML ?
1eureka.client.serviceUrl.defaultZnotallow=http://${DISCOVERY_SERVER_HOST}:${DISCOVERY_SERVER_PORT}/eureka?
  • 1.
  • 2.

也可以在瀏覽器中打開HTTP地址,確認(rèn)服務(wù)已成功注冊(cè)到Discovery Server:?

微服務(wù)使用您通過應(yīng)用程序的spring.Application.name設(shè)置傳遞的名稱注冊(cè)到application.properties file。如上圖所示,選擇了以下名稱: ?

·spring.application.name=messenger for the Messenger microservice?
·spring.application.name=attachments for the Attachments service?
  • 1.
  • 2.

微服務(wù)實(shí)例使用這些名稱來定位并通過Discovery Server相互發(fā)送請(qǐng)求。例如,當(dāng)用戶想要在討論頻道中上傳圖片時(shí),該請(qǐng)求首先會(huì)發(fā)送到Messenger服務(wù)。然后,Messenger在Discovery Server的幫助下將此任務(wù)委托給Attachments微服務(wù)。?

首先,Messenger服務(wù)獲得一個(gè)附件對(duì)應(yīng)的實(shí)例: ?

Java 
 List<ServiceInstance> serviceInstances = discoveryClient.getInstances("ATTACHMENTS");

 ServiceInstance instance;

 if (!serviceInstances.isEmpty()) {
 instance = serviceInstances
    .get(ThreadLocalRandom.current().nextInt(0, serviceInstances.size()));
 }

  System.out.printf("Connected to service %s with URI %sn", 
       instance.getInstanceId(), instance.getUri());
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

接下來,Messenger微服務(wù)使用附件的實(shí)例URI創(chuàng)建一個(gè)HTTP客戶端,并通過InputStream發(fā)送圖片: ?

Java 
 HttpClient httpClient = HttpClient.newBuilder().build();

 HttpRequest request = HttpRequest.newBuilder()
  .uri(URI.create(instance.getUri() + "/upload?fileName=" + fileName))
  .header("Content-Type", mimeType)
    .POST(HttpRequest.BodyPublishers.ofInputStream(new Supplier<InputStream>() {
        @Override
        public InputStream get() {         
               return inputStream;
        }
  })).build();
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

Attachments服務(wù)通過REST端點(diǎn)接收請(qǐng)求,并最終將圖片存儲(chǔ)在谷歌云存儲(chǔ)中,將圖片URL返回給Messenger微服務(wù):?

Java 
 public Optional<String> storeFile(String filePath, String fileName, String contentType) {
  if (client == null) {
  initClient();
   }
 
  String objectName = generateUniqueObjectName(fileName);
 
  BlobId blobId = BlobId.of(bucketName, objectName);
  BlobInfo blobInfo = BlobInfo.newBuilder(blobId).build();

 try {
  client.create(blobInfo, Files.readAllBytes(Paths.get(filePath)));
 } catch (IOException e) {
  System.err.println("Failed to load the file:" + fileName);
  e.printStackTrace();

 return Optional.empty();
  }

  System.out.printf(
  "File %s uploaded to bucket %s as %s %n", filePath, bucketName, objectName);

 String objectFullAddress = "http://storage.googleapis.com/" + bucketName + "/" + objectName;

  System.out.println("Picture public address: " + objectFullAddress);

 return Optional.of(objectFullAddress);
 }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

如果想探索微服務(wù)的完整實(shí)現(xiàn)以及它們?nèi)绾瓮ㄟ^Discovery Server進(jìn)行通信,可以訪問GitHub repo。 ?

在谷歌云平臺(tái)上部署?

現(xiàn)在,在谷歌云平臺(tái)上跨三個(gè)地理位置和五個(gè)云區(qū)域部署Java geo-messenger:北美('us-west2','us-central1','us-east4'),歐洲('Europe-west3')和亞洲('Asia-east1')。 ?

遵循以下步驟部署:?

(1)創(chuàng)建一個(gè)谷歌項(xiàng)目。 ?

(2)創(chuàng)建自定義高級(jí)網(wǎng)絡(luò)。 ?

(3)配置谷歌云存儲(chǔ)。 ?

(4)為虛擬機(jī)創(chuàng)建實(shí)例模板。 ?

(5)以應(yīng)用實(shí)例啟動(dòng)虛擬機(jī)。 ?

(6)配置全局外部負(fù)載均衡器。?

將跳過上述步驟的詳細(xì)說明。與其相反,采用下圖來闡明為什么在步驟2中選擇高級(jí)谷歌網(wǎng)絡(luò):?

 

假設(shè)一個(gè)應(yīng)用程序?qū)嵗渴鹪诿绹墓雀柙破脚_(tái)上,用戶從印度連接到該應(yīng)用程序。從用戶的位置到應(yīng)用程序有快速路徑和慢速路徑。?

如果為這個(gè)部署選擇了標(biāo)準(zhǔn)網(wǎng)絡(luò),則采用慢速路徑。在這種情況下,用戶請(qǐng)求通過公共互聯(lián)網(wǎng)傳輸,在到達(dá)美國之前進(jìn)入和退出許多云計(jì)算提供商的網(wǎng)絡(luò)。最終,在美國,請(qǐng)求到達(dá)靠近應(yīng)用程序?qū)嵗墓雀璧腜oP(存在點(diǎn)),進(jìn)入谷歌網(wǎng)絡(luò),并到達(dá)應(yīng)用程序。 ?

如果部署使用高級(jí)網(wǎng)絡(luò),則選擇快速路徑。在這種情況下,用戶請(qǐng)求在離用戶最近的PoP處進(jìn)入谷歌網(wǎng)絡(luò),并且永遠(yuǎn)不會(huì)離開它。該P(yáng)oP在印度,請(qǐng)求將通過快速穩(wěn)定的連接加速到美國的應(yīng)用程序?qū)嵗A硗猓仆獠控?fù)載均衡器需要高級(jí)層。否則,將無法在最近的PoP處攔截用戶請(qǐng)求,并將它們轉(zhuǎn)發(fā)到附近的應(yīng)用程序?qū)嵗?nbsp;?

測(cè)試容錯(cuò)性?

一旦微服務(wù)部署到全球各大洲,就可以看到云負(fù)載均衡器在正常時(shí)間和停機(jī)期間的工作情況。?

在瀏覽器中打開負(fù)載均衡器使用的IP地址,并在其中一個(gè)討論通道中發(fā)送一些帶有照片的消息:?

Messenger和Attachments微服務(wù)的哪個(gè)實(shí)例為最后請(qǐng)求提供了服務(wù)?這取決于在世界上的位置。在本文的例子中,來自美國東部(ig-us-east)的實(shí)例服務(wù)于流量: ?

如果美國東部地區(qū)無法使用,導(dǎo)致該地區(qū)的所有微服務(wù)都無法使用,應(yīng)用程序?qū)?huì)發(fā)生什么? ?

對(duì)于多區(qū)域部署來說不是問題。負(fù)載均衡器將檢測(cè)美國東部的問題,并將流量轉(zhuǎn)發(fā)到另一個(gè)最近的位置。在這種情況下,只要住在大西洋附近的美國東海岸,流量就會(huì)被轉(zhuǎn)發(fā)到歐洲:?

為了模擬美國東部地區(qū)的停機(jī),連接到該地區(qū)的虛擬機(jī)并關(guān)閉了所有的微服務(wù)。負(fù)載均衡器檢測(cè)到該區(qū)域的微服務(wù)不再響應(yīng),并開始將流量轉(zhuǎn)發(fā)到歐洲數(shù)據(jù)中心。?

現(xiàn)在可以享受開箱即用的容錯(cuò)功能! ?

測(cè)試性能?

除了容錯(cuò)之外,如果跨多個(gè)云區(qū)域部署Java微服務(wù),那么無論用戶請(qǐng)求位于何處,應(yīng)用程序都能夠以較低的延遲服務(wù)用戶請(qǐng)求。 ?

為了實(shí)現(xiàn)這一點(diǎn),首先,需要在大多數(shù)用戶所在的云區(qū)域部署微服務(wù)實(shí)例,并配置全局外部負(fù)載均衡器,可以進(jìn)行路由。這就是在“跨多個(gè)云區(qū)域自動(dòng)化Java應(yīng)用程序部署”一文中討論的內(nèi)容。 ?

其次,需要在這些位置正確地排列數(shù)據(jù)。數(shù)據(jù)庫需要跨多個(gè)區(qū)域運(yùn)行,與微服務(wù)實(shí)例一樣。否則,微服務(wù)和數(shù)據(jù)庫之間的延遲會(huì)很高,整體性能會(huì)很差。?

在討論的架構(gòu)中,使用了YugabyteDB,因?yàn)樗且粋€(gè)分布式SQL數(shù)據(jù)庫,可以跨多個(gè)云區(qū)域部署。?

結(jié)語?

如果為公共云環(huán)境開發(fā)Java應(yīng)用程序,則應(yīng)該通過跨多個(gè)區(qū)域部署應(yīng)用程序?qū)嵗齺砝萌蛟朴?jì)算基礎(chǔ)設(shè)施。這將使解決方案更具彈性、性能更高,并符合數(shù)據(jù)監(jiān)管要求。 ?

重要的是要記住,創(chuàng)建跨云區(qū)域運(yùn)行和協(xié)調(diào)的微服務(wù)并不難。Spring生態(tài)系統(tǒng)提供了Spring Cloud框架,而像谷歌這樣的公共云提供商提供了簡(jiǎn)化工作所需的基礎(chǔ)設(shè)施和服務(wù)。?

原文標(biāo)題:??Run Java Microservices Across Multiple Cloud Regions With Spring Cloud??,作者:Denis Magda

分享到:
標(biāo)簽:Spring Cloud
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定