成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Istio:微服務開發的終極利器,你還在為繁瑣的通信和部署流程煩惱嗎?

開發 架構
總的來說,Istio為開發人員帶來了許多變革。首先,它提供了批注入的方式來自動注入sidecar,簡化了應用部署的過程。其次,通過Istio,開發人員可以輕松地進行灰度發布、A/B測試和故障注入等操作,而無需手動配置路由規則。

引言

在前面的講解中,我們已經提及了微服務的一些弊端,并介紹了Istio這樣的解決方案。那么,對于我們開發人員來說,Istio究竟會帶來哪些變革呢?今天我們就來簡要探討一下!

Kubernetes簡單介紹

Kubernetes,俗稱K8s,僅僅是因為L與s之間有8個字母所以叫的K8s,是一種用于管理和編排Docker集群的工具。它被廣泛使用且備受推崇,因此在講解Istio技術時,我們選擇與Kubernetes進行集成開發。接下來,我們將重點關注如何在集成了Istio的項目中進行代碼編寫和重構。盡管Kubernetes技術對于開發者來說關系不是特別密切,但我們會在以后的時間里專門設立一個Kubernetes系列專欄,來詳細介紹該技術。

bookinfo 架構介紹

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

圖片圖片

bookinfo是一個在線書店應用,由四個微服務組成,分別是Product page、Reviews、Details和Ratings。為了展示Istio的無侵入性,這四個微服務分別使用Python、Java、Ruby和Node進行開發。下面對每個服務進行詳細說明:

Product page:這是一個聚合服務,它通過聚合Reviews和Details的內容來展示產品頁面。

Details:這是圖書詳情服務,提供了書籍的詳細信息。

Reviews:這是圖書評價服務,它有多個版本供選擇。Reviews還是一個聚合服務,它將Ratings的評分信息與評價內容進行聚合。

Ratings:這是圖書預訂排名服務,提供了圖書的評分信息。

下圖展示了bookinfo在嵌入了Istio后的物理架構:

圖片圖片

部署 bookinfo 應用

為了簡化bookinfo應用的部署過程,可以使用批注入的方式來自動注入sidecar。這樣可以避免每次手動注入sidecar的繁瑣步驟。

配置 istio 自動注入

批注入是一種將sidecar自動注入到Kubernetes部署中的方法。通過批注入,可以在應用部署的同時自動添加sidecar容器,而無需手動進行注入操作。

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

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

部署 bookinfo 應用

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

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

當你部署完bookinfo 之后,打開瀏覽器并訪問網址,多次刷新頁面,你會發現 bookinfo 應用使用了多個不同版本的 reviews,如下所示:

Review-v1

圖片圖片

Review-v2

圖片圖片

Review-v3

圖片圖片

bookinfo 服務調用示意圖

圖片圖片

代碼開發

這里我們將不再配置關于Istio的虛擬服務和路由規則。這些都可以通過編寫一個YAML格式的文件,并在Kubernetes中執行一條命令來完成。你可以參考官方提供的示例來進行配置。配置完成后,Istio將能夠捕獲所有當前服務發送的請求,并進行解析路由,從而實現灰度發布、A/B測試、故障注入等邏輯。但是這不是我們文章的重點,我們只需要關注代碼的編寫即可。剩下的運維工作將由相關人員負責

在開發之前,讓我們先來看一下官方GitHub上的bookinfo項目是如何進行調用的。官方倉庫的地址是:https://github.com/istio/istio/blob/master/samples/bookinfo/src/reviews/reviews-application/src/main/java/application/rest/LibertyRestEndpoint.java

我已經將地址定位到了我們關注的Java文件。如果你是Python開發或者使用Node.js,你可以自行切換到相應的目錄。無論使用哪種語言,基本的邏輯都是相同的。

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");
//·······此處省略沒必要的代碼

//調用邏輯
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);
  //·······此處省略沒必要的代碼

通過以上的代碼,我們可以發現,使用Istio可以大大簡化微服務架構中的代碼邏輯。通過使用服務名進行HTTP調用,Istio會自動處理請求的路由、負載均衡和流量控制等功能,從而減少了對其他組件的依賴,使代碼更加清爽。在實際開發中,可以選擇使用OpenFeign或gRPC等技術來實現微服務之間的通信。

OpenFeign是一個基于注解的聲明式Web Service客戶端,它可以簡化HTTP請求的編寫和調用。使用OpenFeign,你可以定義一個接口,并使用注解來描述接口的請求路徑、請求方法和參數等信息。OpenFeign會根據這些注解自動生成HTTP請求的代碼,使開發者可以更加方便地調用其他微服務。

gRPC是一個高性能、開源的遠程過程調用(RPC)框架,它使用Protocol Buffers作為接口定義語言(IDL)來定義服務接口和消息格式。通過gRPC,你可以定義一個接口,并使用Protocol Buffers來描述接口的請求和響應消息。gRPC會自動生成客戶端和服務端的代碼,使開發者可以直接調用遠程服務而無需關心底層的網絡通信細節。

無論是選擇OpenFeign還是gRPC,都可以根據具體的需求和技術棧來決定。它們都提供了方便的工具和框架來簡化微服務之間的通信,使開發者可以更加專注于業務邏輯的實現。

總結

總的來說,Istio為開發人員帶來了許多變革。首先,它提供了批注入的方式來自動注入sidecar,簡化了應用部署的過程。其次,通過Istio,開發人員可以輕松地進行灰度發布、A/B測試和故障注入等操作,而無需手動配置路由規則。此外,Istio還提供了服務發現、負載均衡和流量控制等功能,減少了對其他組件的依賴,使代碼更加清爽。在代碼開發方面,可以選擇使用OpenFeign或gRPC等技術來簡化微服務之間的通信。總之,Istio的引入為微服務架構的開發人員提供了更便捷和高效的開發方式。

責任編輯:武曉燕 來源: 靈墨AI探索室
相關推薦

2018-09-04 05:05:29

2021-05-27 11:26:46

nodesassCSS

2014-08-28 09:55:19

中文郵箱郵箱賬號

2020-01-20 14:30:39

HTTP概念標頭

2015-07-09 11:32:26

AWSIaaS云計算

2018-09-24 09:15:12

數據倉庫大數據

2018-11-07 10:00:00

微服務Service MesIstio

2015-12-29 13:53:14

BeeCloud云計算支付

2022-02-24 07:03:13

JavaScrip語言

2020-07-24 20:57:33

MySQL數據量數據庫

2024-06-12 08:05:06

2022-01-13 09:54:58

微服務 Istio 通信

2015-03-04 10:49:30

2014-01-09 14:52:47

創意開源

2020-12-22 11:06:05

JavaScript開發前端

2024-06-04 07:58:31

架構本質微服務

2021-10-18 08:52:42

技術

2015-09-16 09:21:12

移動云技術數據管理

2022-02-12 21:08:56

微服務SpringIstio

2017-07-17 15:50:17

微服務Docker架構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲成人一区 | 亚洲一区在线播放 | 性高湖久久久久久久久3小时 | 亚洲一区二区不卡在线观看 | 国产精品一区二区三区在线播放 | 91嫩草精品 | 在线视频日韩 | 久久成人免费观看 | 亚洲精品日韩在线 | 操视频网站 | 久久无毛| 亚洲视频免费观看 | 久久精品在线免费视频 | 国产在线拍偷自揄拍视频 | 91麻豆产精品久久久久久夏晴子 | 中文字幕在线一区二区三区 | 亚洲一区在线观看视频 | 精品国产乱码久久久久久图片 | 欧美成人精品一区二区男人看 | 黄色大全免费看 | 国产免费一区二区三区最新6 | 国产精品久久久久久52avav | 欧美日日 | 一二三区av | 国产成人99久久亚洲综合精品 | 国产精品一区一区三区 | 91精品国产91久久久久久密臀 | 亚洲一区电影 | 久久精品天堂 | 欧美一级网站 | 夜夜艹 | www.天堂av.com| 日本精品一区二区三区在线观看视频 | 中文字幕1区2区 | 免费人成在线观看网站 | 亚洲精品成人在线 | 九九九精品视频 | 亚洲国产精品一区 | 日韩三极 | 精产国产伦理一二三区 | 久久精品免费一区二区三 |