当前位置:首页 > 科技  > 软件

Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?

来源: 责编: 时间:2023-11-02 09:08:41 185观看
导读引言在前面的讲解中,我们已经提及了微服务的一些弊端,并介绍了Istio这样的解决方案。那么,对于我们开发人员来说,Istio究竟会带来哪些变革呢?今天我们就来简要探讨一下!Kubernetes简单介绍Kubernetes,俗称K8s,仅仅是因为L与s

引言

在前面的讲解中,我们已经提及了微服务的一些弊端,并介绍了Istio这样的解决方案。那么,对于我们开发人员来说,Istio究竟会带来哪些变革呢?今天我们就来简要探讨一下!p8528资讯网——每日最新资讯28at.com

Kubernetes简单介绍

Kubernetes,俗称K8s,仅仅是因为L与s之间有8个字母所以叫的K8s,是一种用于管理和编排Docker集群的工具。它被广泛使用且备受推崇,因此在讲解Istio技术时,我们选择与Kubernetes进行集成开发。接下来,我们将重点关注如何在集成了Istio的项目中进行代码编写和重构。尽管Kubernetes技术对于开发者来说关系不是特别密切,但我们会在以后的时间里专门设立一个Kubernetes系列专栏,来详细介绍该技术。p8528资讯网——每日最新资讯28at.com

bookinfo 架构介绍

bookinfo是Istio提供的学习样例,通过使用bookinfo,您可以更深入地理解Istio提供的路由、遥测等功能。下图展示了bookinfo在未集成Istio之前的物理架构:p8528资讯网——每日最新资讯28at.com

图片图片p8528资讯网——每日最新资讯28at.com

bookinfo是一个在线书店应用,由四个微服务组成,分别是Product page、Reviews、Details和Ratings。为了展示Istio的无侵入性,这四个微服务分别使用Python、Java、Ruby和Node进行开发。下面对每个服务进行详细说明:p8528资讯网——每日最新资讯28at.com

Product page:这是一个聚合服务,它通过聚合Reviews和Details的内容来展示产品页面。p8528资讯网——每日最新资讯28at.com

Details:这是图书详情服务,提供了书籍的详细信息。p8528资讯网——每日最新资讯28at.com

Reviews:这是图书评价服务,它有多个版本供选择。Reviews还是一个聚合服务,它将Ratings的评分信息与评价内容进行聚合。p8528资讯网——每日最新资讯28at.com

Ratings:这是图书预订排名服务,提供了图书的评分信息。p8528资讯网——每日最新资讯28at.com

下图展示了bookinfo在嵌入了Istio后的物理架构:p8528资讯网——每日最新资讯28at.com

图片图片p8528资讯网——每日最新资讯28at.com

部署 bookinfo 应用

为了简化bookinfo应用的部署过程,可以使用批注入的方式来自动注入sidecar。这样可以避免每次手动注入sidecar的繁琐步骤。p8528资讯网——每日最新资讯28at.com

配置 istio 自动注入

批注入是一种将sidecar自动注入到Kubernetes部署中的方法。通过批注入,可以在应用部署的同时自动添加sidecar容器,而无需手动进行注入操作。p8528资讯网——每日最新资讯28at.com

在部署bookinfo应用之前,需要确保已经安装和配置了Istio。然后,可以按照以下步骤进行批注入部署bookinfo应用:p8528资讯网——每日最新资讯28at.com

kubectl create ns testkubectl label ns test istio-injectinotallow=enabledkubectl 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/p8528资讯网——每日最新资讯28at.com

当你部署完bookinfo 之后,打开浏览器并访问网址,多次刷新页面,你会发现 bookinfo 应用使用了多个不同版本的 reviews,如下所示:p8528资讯网——每日最新资讯28at.com

Review-v1

图片图片p8528资讯网——每日最新资讯28at.com

Review-v2

图片图片p8528资讯网——每日最新资讯28at.com

Review-v3

图片图片p8528资讯网——每日最新资讯28at.com

bookinfo 服务调用示意图

图片图片p8528资讯网——每日最新资讯28at.com

代码开发

这里我们将不再配置关于Istio的虚拟服务和路由规则。这些都可以通过编写一个YAML格式的文件,并在Kubernetes中执行一条命令来完成。你可以参考官方提供的示例来进行配置。配置完成后,Istio将能够捕获所有当前服务发送的请求,并进行解析路由,从而实现灰度发布、A/B测试、故障注入等逻辑。但是这不是我们文章的重点,我们只需要关注代码的编写即可。剩下的运维工作将由相关人员负责p8528资讯网——每日最新资讯28at.com

在开发之前,让我们先来看一下官方GitHub上的bookinfo项目是如何进行调用的。官方仓库的地址是:https://github.com/istio/istio/blob/master/samples/bookinfo/src/reviews/reviews-application/src/main/java/application/rest/LibertyRestEndpoint.javap8528资讯网——每日最新资讯28at.com

我已经将地址定位到了我们关注的Java文件。如果你是Python开发或者使用Node.js,你可以自行切换到相应的目录。无论使用哪种语言,基本的逻辑都是相同的。p8528资讯网——每日最新资讯28at.com

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等技术来实现微服务之间的通信。p8528资讯网——每日最新资讯28at.com

OpenFeign是一个基于注解的声明式Web Service客户端,它可以简化HTTP请求的编写和调用。使用OpenFeign,你可以定义一个接口,并使用注解来描述接口的请求路径、请求方法和参数等信息。OpenFeign会根据这些注解自动生成HTTP请求的代码,使开发者可以更加方便地调用其他微服务。p8528资讯网——每日最新资讯28at.com

gRPC是一个高性能、开源的远程过程调用(RPC)框架,它使用Protocol Buffers作为接口定义语言(IDL)来定义服务接口和消息格式。通过gRPC,你可以定义一个接口,并使用Protocol Buffers来描述接口的请求和响应消息。gRPC会自动生成客户端和服务端的代码,使开发者可以直接调用远程服务而无需关心底层的网络通信细节。p8528资讯网——每日最新资讯28at.com

无论是选择OpenFeign还是gRPC,都可以根据具体的需求和技术栈来决定。它们都提供了方便的工具和框架来简化微服务之间的通信,使开发者可以更加专注于业务逻辑的实现。p8528资讯网——每日最新资讯28at.com

总结

总的来说,Istio为开发人员带来了许多变革。首先,它提供了批注入的方式来自动注入sidecar,简化了应用部署的过程。其次,通过Istio,开发人员可以轻松地进行灰度发布、A/B测试和故障注入等操作,而无需手动配置路由规则。此外,Istio还提供了服务发现、负载均衡和流量控制等功能,减少了对其他组件的依赖,使代码更加清爽。在代码开发方面,可以选择使用OpenFeign或gRPC等技术来简化微服务之间的通信。总之,Istio的引入为微服务架构的开发人员提供了更便捷和高效的开发方式。p8528资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-16505-0.htmlIstio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 闭包解密:从小白到高手,掌握Python中的闭包技巧

下一篇: Go etcd 的依赖问题终于解决了......

标签:
  • 热门焦点
Top