自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Istio:微服務(wù)開(kāi)發(fā)的終極利器,你還在為繁瑣的通信和部署流程煩惱嗎?

開(kāi)發(fā) 架構(gòu)
總的來(lái)說(shuō),Istio為開(kāi)發(fā)人員帶來(lái)了許多變革。首先,它提供了批注入的方式來(lái)自動(dòng)注入sidecar,簡(jiǎn)化了應(yīng)用部署的過(guò)程。其次,通過(guò)Istio,開(kāi)發(fā)人員可以輕松地進(jìn)行灰度發(fā)布、A/B測(cè)試和故障注入等操作,而無(wú)需手動(dòng)配置路由規(guī)則。

引言

在前面的講解中,我們已經(jīng)提及了微服務(wù)的一些弊端,并介紹了Istio這樣的解決方案。那么,對(duì)于我們開(kāi)發(fā)人員來(lái)說(shuō),Istio究竟會(huì)帶來(lái)哪些變革呢?今天我們就來(lái)簡(jiǎn)要探討一下!

Kubernetes簡(jiǎn)單介紹

Kubernetes,俗稱(chēng)K8s,僅僅是因?yàn)長(zhǎng)與s之間有8個(gè)字母所以叫的K8s,是一種用于管理和編排Docker集群的工具。它被廣泛使用且備受推崇,因此在講解Istio技術(shù)時(shí),我們選擇與Kubernetes進(jìn)行集成開(kāi)發(fā)。接下來(lái),我們將重點(diǎn)關(guān)注如何在集成了Istio的項(xiàng)目中進(jìn)行代碼編寫(xiě)和重構(gòu)。盡管Kubernetes技術(shù)對(duì)于開(kāi)發(fā)者來(lái)說(shuō)關(guān)系不是特別密切,但我們會(huì)在以后的時(shí)間里專(zhuān)門(mén)設(shè)立一個(gè)Kubernetes系列專(zhuān)欄,來(lái)詳細(xì)介紹該技術(shù)。

bookinfo 架構(gòu)介紹

bookinfo是Istio提供的學(xué)習(xí)樣例,通過(guò)使用bookinfo,您可以更深入地理解Istio提供的路由、遙測(cè)等功能。下圖展示了bookinfo在未集成Istio之前的物理架構(gòu):

圖片圖片

bookinfo是一個(gè)在線書(shū)店應(yīng)用,由四個(gè)微服務(wù)組成,分別是Product page、Reviews、Details和Ratings。為了展示Istio的無(wú)侵入性,這四個(gè)微服務(wù)分別使用Python、Java、Ruby和Node進(jìn)行開(kāi)發(fā)。下面對(duì)每個(gè)服務(wù)進(jìn)行詳細(xì)說(shuō)明:

Product page:這是一個(gè)聚合服務(wù),它通過(guò)聚合Reviews和Details的內(nèi)容來(lái)展示產(chǎn)品頁(yè)面。

Details:這是圖書(shū)詳情服務(wù),提供了書(shū)籍的詳細(xì)信息。

Reviews:這是圖書(shū)評(píng)價(jià)服務(wù),它有多個(gè)版本供選擇。Reviews還是一個(gè)聚合服務(wù),它將Ratings的評(píng)分信息與評(píng)價(jià)內(nèi)容進(jìn)行聚合。

Ratings:這是圖書(shū)預(yù)訂排名服務(wù),提供了圖書(shū)的評(píng)分信息。

下圖展示了bookinfo在嵌入了Istio后的物理架構(gòu):

圖片圖片

部署 bookinfo 應(yīng)用

為了簡(jiǎn)化bookinfo應(yīng)用的部署過(guò)程,可以使用批注入的方式來(lái)自動(dòng)注入sidecar。這樣可以避免每次手動(dòng)注入sidecar的繁瑣步驟。

配置 istio 自動(dòng)注入

批注入是一種將sidecar自動(dòng)注入到Kubernetes部署中的方法。通過(guò)批注入,可以在應(yīng)用部署的同時(shí)自動(dòng)添加sidecar容器,而無(wú)需手動(dòng)進(jìn)行注入操作。

在部署bookinfo應(yīng)用之前,需要確保已經(jīng)安裝和配置了Istio。然后,可以按照以下步驟進(jìn)行批注入部署bookinfo應(yīng)用:

kubectl create ns test
kubectl label ns test istio-injectinotallow=enabled
kubectl get ns test --show-labels

部署 bookinfo 應(yīng)用

kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -n test

這里就不再贅述了,你可以在官方網(wǎng)站上詳細(xì)了解:https://istio.io/latest/zh/docs/examples/bookinfo/

當(dāng)你部署完bookinfo 之后,打開(kāi)瀏覽器并訪問(wèn)網(wǎng)址,多次刷新頁(yè)面,你會(huì)發(fā)現(xiàn) bookinfo 應(yīng)用使用了多個(gè)不同版本的 reviews,如下所示:

Review-v1

圖片圖片

Review-v2

圖片圖片

Review-v3

圖片圖片

bookinfo 服務(wù)調(diào)用示意圖

圖片圖片

代碼開(kāi)發(fā)

這里我們將不再配置關(guān)于Istio的虛擬服務(wù)和路由規(guī)則。這些都可以通過(guò)編寫(xiě)一個(gè)YAML格式的文件,并在Kubernetes中執(zhí)行一條命令來(lái)完成。你可以參考官方提供的示例來(lái)進(jìn)行配置。配置完成后,Istio將能夠捕獲所有當(dāng)前服務(wù)發(fā)送的請(qǐng)求,并進(jìn)行解析路由,從而實(shí)現(xiàn)灰度發(fā)布、A/B測(cè)試、故障注入等邏輯。但是這不是我們文章的重點(diǎn),我們只需要關(guān)注代碼的編寫(xiě)即可。剩下的運(yùn)維工作將由相關(guān)人員負(fù)責(zé)

在開(kāi)發(fā)之前,讓我們先來(lái)看一下官方GitHub上的bookinfo項(xiàng)目是如何進(jìn)行調(diào)用的。官方倉(cāng)庫(kù)的地址是:https://github.com/istio/istio/blob/master/samples/bookinfo/src/reviews/reviews-application/src/main/java/application/rest/LibertyRestEndpoint.java

我已經(jīng)將地址定位到了我們關(guān)注的Java文件。如果你是Python開(kāi)發(fā)或者使用Node.js,你可以自行切換到相應(yīng)的目錄。無(wú)論使用哪種語(yǔ)言,基本的邏輯都是相同的。

private final static Boolean ratings_enabled = Boolean.valueOf(System.getenv("ENABLE_RATINGS"));
private final static String star_color = System.getenv("STAR_COLOR") == null ? "black" : System.getenv("STAR_COLOR");
private final static String services_domain = System.getenv("SERVICES_DOMAIN") == null ? "" : ("." + System.getenv("SERVICES_DOMAIN"));
private final static String ratings_hostname = System.getenv("RATINGS_HOSTNAME") == null ? "ratings" : System.getenv("RATINGS_HOSTNAME");
private final static String ratings_port = System.getenv("RATINGS_SERVICE_PORT") == null ? "9080" : System.getenv("RATINGS_SERVICE_PORT");
private final static String ratings_service = String.format("http://%s%s:%s/ratings", ratings_hostname, services_domain, ratings_port);
private final static String pod_hostname = System.getenv("HOSTNAME");
private final static String clustername = System.getenv("CLUSTER_NAME");
//·······此處省略沒(méi)必要的代碼

//調(diào)用邏輯
private JsonObject getRatings(String productId, HttpHeaders requestHeaders) {
  ClientBuilder cb = ClientBuilder.newBuilder();
  Integer timeout = star_color.equals("black") ? 10000 : 2500;
  cb.property("com.ibm.ws.jaxrs.client.connection.timeout", timeout);
  cb.property("com.ibm.ws.jaxrs.client.receive.timeout", timeout);
  Client client = cb.build();
  WebTarget ratingsTarget = client.target(ratings_service + "/" + productId);
  Invocation.Builder builder = ratingsTarget.request(MediaType.APPLICATION_JSON);
  //·······此處省略沒(méi)必要的代碼

通過(guò)以上的代碼,我們可以發(fā)現(xiàn),使用Istio可以大大簡(jiǎn)化微服務(wù)架構(gòu)中的代碼邏輯。通過(guò)使用服務(wù)名進(jìn)行HTTP調(diào)用,Istio會(huì)自動(dòng)處理請(qǐng)求的路由、負(fù)載均衡和流量控制等功能,從而減少了對(duì)其他組件的依賴(lài),使代碼更加清爽。在實(shí)際開(kāi)發(fā)中,可以選擇使用OpenFeign或gRPC等技術(shù)來(lái)實(shí)現(xiàn)微服務(wù)之間的通信。

OpenFeign是一個(gè)基于注解的聲明式Web Service客戶(hù)端,它可以簡(jiǎn)化HTTP請(qǐng)求的編寫(xiě)和調(diào)用。使用OpenFeign,你可以定義一個(gè)接口,并使用注解來(lái)描述接口的請(qǐng)求路徑、請(qǐng)求方法和參數(shù)等信息。OpenFeign會(huì)根據(jù)這些注解自動(dòng)生成HTTP請(qǐng)求的代碼,使開(kāi)發(fā)者可以更加方便地調(diào)用其他微服務(wù)。

gRPC是一個(gè)高性能、開(kāi)源的遠(yuǎn)程過(guò)程調(diào)用(RPC)框架,它使用Protocol Buffers作為接口定義語(yǔ)言(IDL)來(lái)定義服務(wù)接口和消息格式。通過(guò)gRPC,你可以定義一個(gè)接口,并使用Protocol Buffers來(lái)描述接口的請(qǐng)求和響應(yīng)消息。gRPC會(huì)自動(dòng)生成客戶(hù)端和服務(wù)端的代碼,使開(kāi)發(fā)者可以直接調(diào)用遠(yuǎn)程服務(wù)而無(wú)需關(guān)心底層的網(wǎng)絡(luò)通信細(xì)節(jié)。

無(wú)論是選擇OpenFeign還是gRPC,都可以根據(jù)具體的需求和技術(shù)棧來(lái)決定。它們都提供了方便的工具和框架來(lái)簡(jiǎn)化微服務(wù)之間的通信,使開(kāi)發(fā)者可以更加專(zhuān)注于業(yè)務(wù)邏輯的實(shí)現(xiàn)。

總結(jié)

總的來(lái)說(shuō),Istio為開(kāi)發(fā)人員帶來(lái)了許多變革。首先,它提供了批注入的方式來(lái)自動(dòng)注入sidecar,簡(jiǎn)化了應(yīng)用部署的過(guò)程。其次,通過(guò)Istio,開(kāi)發(fā)人員可以輕松地進(jìn)行灰度發(fā)布、A/B測(cè)試和故障注入等操作,而無(wú)需手動(dòng)配置路由規(guī)則。此外,Istio還提供了服務(wù)發(fā)現(xiàn)、負(fù)載均衡和流量控制等功能,減少了對(duì)其他組件的依賴(lài),使代碼更加清爽。在代碼開(kāi)發(fā)方面,可以選擇使用OpenFeign或gRPC等技術(shù)來(lái)簡(jiǎn)化微服務(wù)之間的通信??傊?,Istio的引入為微服務(wù)架構(gòu)的開(kāi)發(fā)人員提供了更便捷和高效的開(kāi)發(fā)方式。

責(zé)任編輯:武曉燕 來(lái)源: 靈墨AI探索室
相關(guān)推薦

2018-09-04 05:05:29

2021-05-27 11:26:46

nodesassCSS

2014-08-28 09:55:19

中文郵箱郵箱賬號(hào)

2020-01-20 14:30:39

HTTP概念標(biāo)頭

2018-11-07 10:00:00

微服務(wù)Service MesIstio

2015-07-09 11:32:26

AWSIaaS云計(jì)算

2018-09-24 09:15:12

數(shù)據(jù)倉(cāng)庫(kù)大數(shù)據(jù)

2015-12-29 13:53:14

BeeCloud云計(jì)算支付

2022-02-24 07:03:13

JavaScrip語(yǔ)言

2020-07-24 20:57:33

MySQL數(shù)據(jù)量數(shù)據(jù)庫(kù)

2024-06-12 08:05:06

2022-01-13 09:54:58

微服務(wù) Istio 通信

2015-03-04 10:49:30

2024-06-04 07:58:31

架構(gòu)本質(zhì)微服務(wù)

2014-01-09 14:52:47

創(chuàng)意開(kāi)源

2022-02-12 21:08:56

微服務(wù)SpringIstio

2021-10-18 08:52:42

技術(shù)

2020-12-22 11:06:05

JavaScript開(kāi)發(fā)前端

2017-07-17 15:50:17

微服務(wù)Docker架構(gòu)

2015-09-16 09:21:12

移動(dòng)云技術(shù)數(shù)據(jù)管理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)