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

这篇具有很好参考价值的文章主要介绍了Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

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

Kubernetes简单介绍

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

bookinfo 架构介绍

bookinfo是Istio提供的学习样例,通过使用bookinfo,您可以更深入地理解Istio提供的路由、遥测等功能。下图展示了bookinfo在未集成Istio之前的物理架构:

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

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

Product page:这是一个聚合服务,它通过聚合Reviews和Details的内容来展示产品页面。

Details:这是图书详情服务,提供了书籍的详细信息。

Reviews:这是图书评价服务,它有多个版本供选择。Reviews还是一个聚合服务,它将Ratings的评分信息与评价内容进行聚合。

Ratings:这是图书预订排名服务,提供了图书的评分信息。

下图展示了bookinfo在嵌入了Istio后的物理架构:

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

部署 bookinfo 应用

为了简化bookinfo应用的部署过程,可以使用批注入的方式来自动注入sidecar。这样可以避免每次手动注入sidecar的繁琐步骤。

配置 istio 自动注入

批注入是一种将sidecar自动注入到Kubernetes部署中的方法。通过批注入,可以在应用部署的同时自动添加sidecar容器,而无需手动进行注入操作。

在部署bookinfo应用之前,需要确保已经安装和配置了Istio。然后,可以按照以下步骤进行批注入部署bookinfo应用:

kubectl create ns test
kubectl label ns test istio-injection=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

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

Review-v2

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

Review-v3

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

bookinfo 服务调用示意图

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

代码开发

这里我们将不再配置关于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的引入为微服务架构的开发人员提供了更便捷和高效的开发方式。文章来源地址https://www.toymoban.com/news/detail-746599.html

到了这里,关于Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 还在为仓库杂乱发愁?教你ABC仓库管理分类法!

    众所周知,生产制造型企业中的库存存货种类往往很多,动辄几百种,甚至成千上万种。如果管理者找不到操作重点,必定会累得直不起腰,且容易出现管理混乱而造成一定损失。如果我们将工作分清主次,抓住主要的管理对象,例如,如果我们将ABC分类法则运用在库存管理

    2024年02月05日
    浏览(7)
  • 还在为选择客服系统发愁?这5款任你选!

    在当今的数字世界里,提供优质的客户服务变得比以往任何时候都更加重要。随着在线购物和远程工作的兴起,企业必须拥有强大的在线客户服务系统来处理客户查询和问题。高质量的客户服务能够为企业带来长期的收益,并获得良好的品牌效益。不仅如此,为客户带去优质

    2024年02月07日
    浏览(5)
  • 公网连接内网工具推荐(还在为局域网联机发愁?)

    公网连接内网工具推荐(还在为局域网联机发愁?)

     下载地址 Windows 64位 Mac OS X 64位 Linux 64位 Linux/ARM 32位 64位 一、FastNat可为您解决的问题 1.没有公网服务器,需要发布本地的站点或网络程序到公网上,供他人访问; 此项功能大大方面开发人员进行远程调试,微信小程序等开发工作进行。 2.需要远程到在其他网络中的设备,

    2024年02月11日
    浏览(9)
  • 还在为没机器练手搭集群而苦恼?快进来免费领机器了!

    还在为没机器练手搭集群而苦恼?快进来免费领机器了!

    前几天,在我们的技术交流群里看到有小伙伴问:有没有练手搭建Redis集群的方式推荐: 这里不禁让我想到,对于各种集群和分布式基础设施的搭建,其实是每个开发者进阶时候都要经历的一个成长过程。但是,这里对于不少开发者来说,却又面临着一个现实问题: 我没有足

    2024年02月08日
    浏览(11)
  • 还在为找不到AI生产力工具犯愁?这里整理了最全AI工具导航网站

    还在为找不到AI生产力工具犯愁?这里整理了最全AI工具导航网站

    许多新兴的AI工具和服务正在为人们的生活和工作带来巨大的改变,为了更加方便的寻找AI工具和工具分类索引的需求,也紧跟着出现了一批AI工具导航汇聚各类精选实用的AI工具,为用户提供便捷的分类索引,帮助快速找到适合自己的AI工具。 以下是我经常用到的一些AI工具集

    2024年03月15日
    浏览(13)
  • HVV就绪!你还在围观考虑吗?

    “护网去了坐着就行,一天给1000” “护网有免费美味的盒饭!” “不仅一天有1000,还包住!” “连路费都可以报销” 你有没有在从事网络安全行业的人口中听到这些内容?怎么样?是不是很诱人?是不是觉得还有这种天上掉馅饼的好事?自己也蠢蠢欲动了? 冷静!在冲动

    2024年02月15日
    浏览(9)
  • 还在为表情包而发愁吗?今天教你用 Python 画一个奸笑(滑稽)表情(内附源码)

    还在为表情包而发愁吗?今天教你用 Python 画一个奸笑(滑稽)表情(内附源码)

    微信自带的表情大家应该都用过,其中奸笑(其他的平台也有叫滑稽的)的表情使用率算是比较高的,对于这个表情,有的人喜欢,也有的人不喜欢,这个都是正常的,我们不讨论这个。 大家应该都知道 Python 的 turtle 库可以画画,本文我们就使用这个库画一个奸笑表情。 注

    2024年02月04日
    浏览(11)
  • 【概念】还在为fabric而烦恼?这是在我理解下的fabric 关键概念,拥有这一篇就够了

    【概念】还在为fabric而烦恼?这是在我理解下的fabric 关键概念,拥有这一篇就够了

    如果,非要在每一条链中评选出几个比较好用且概念简单的链的话,公有链就是Bitcoin(比特币网络) 和 Ethereum(以太坊),私有链也是以太坊,而联盟链可以说是很少很少国产的FISCO-BCOS算一个 咦?我们这不是hyperledger fabric(以下简称fabric)的专场吗?怎么没有他呢? 是这

    2024年02月12日
    浏览(7)
  • 都2023了,你还在这样发朋友圈吗?

    都2023了,你还在这样发朋友圈吗?

    都2023年了,你还在照着时间表发朋友圈? 又不是每天打卡上班,还要规定你什么时候发什么内容。 如果我们都这样发,那客户看到的都是一模一样的内容,就像流水线上的工人..... 可以试试定时发圈,提前编辑好朋友圈内容,选择好日期和时间点,到点就会自动发出。 更绝

    2024年02月08日
    浏览(6)
  • 记录--你还在使用websocket实现实时消息推送吗?

    记录--你还在使用websocket实现实时消息推送吗?

    在日常的开发中,我们经常能碰见服务端需要主动推送给客户端数据的业务场景,比如数据大屏的实时数据,比如消息中心的未读消息,比如聊天功能等等。 本文主要介绍SSE的使用场景和如何使用SSE。 我们常规实现这些需求的方案有以下三种 轮询 websocket SSE 在很久很久以前

    2024年02月19日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包