一、跨语言微服务框架 - Istio 简绍和概念

2020-08-21  本文已影响0人  城市里永远的学习者
image

微服务的概念已经在各大公司实践开了,以Java为代表的spring boot成为了微服务的代表,K8S+Docker成为了微服务运行的最佳环境,微服务的概念已经离我们没有那么遥远了。

当然微服务是复杂的,除了组件繁多还需要代码做出很多改造才能享受到它带来的优势,那么有没有一种方式可以不需要太多代码改动就能够在多种不同的开发语言中灵活使用呢?

基于服务网格Istio就诞生了,拨云见日我们今天就来一同学习了解微服务和Istio相关的知识.

附上:

喵了个咪的博客:w-blog.cn

Istio官方地址:https://preliminary.istio.io/zh

Istio中文文档:https://preliminary.istio.io/zh/docs/

PS : 此处基于当前最新istio版本1.0.3版本进行搭建和演示,不同的版本各种细节会有些许不同!

一. 微服务

在开始讲解Istio之前我们需要先了解微服务的概念,以及在微服务管理中常常需要使用到的一些列的组件:

image

微服务架构的优点:

微服务架构的缺点:

总的来说(问题和挑战):API Gateway、服务间调用、服务发现、服务容错、服务部署、数据调用以及测试。

二, 服务网格

第二点我们需要了解的是服务网格,Istio 提供了一个完整的解决方案,通过为整个服务网格提供行为洞察和操作控制来满足微服务应用程序的多样化需求,Service Mesh这个术语通常用于描述构成这些应用程序的微服务网络以及应用之间的交互。

随着规模和复杂性的增长,服务网格越来越难以理解和管理。它的需求包括服务发现、负载均衡、故障恢复、指标收集和监控以及通常更加复杂的运维需求,例如 A/B 测试、金丝雀发布、限流、访问控制和端到端认证等。

2017 年底,非侵入式的 Service Mesh 技术从萌芽到走向了成熟。如果用一句话来解释什么是 Service Mesh,可以将它比作是应用程序或者说微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控。对于编写应用程序来说一般无须关心 TCP/IP 这一层(比如通过 HTTP 协议的 RESTful 应用),同样使用 Service Mesh 也就无须关系服务之间的那些原来是通过应用程序或者其他框架实现的事情,比如 Spring Cloud、OSS,现在只要交给 Service Mesh 就可以了。

Service Mesh 的来龙去脉:

Service Mesh 有如下几个特点:

Service Mesh 架构图:

image

关于微服务和服务网格的区别,我的一些理解:微服务更像是一个服务之间的生态,专注于服务治理等方面,而服务网格更专注于服务之间的通信,以及和 DevOps 更好的结合。

三. Istio

最终万众期待的Istio诞生了,Istio于 2017 年 5 月 24 日首发布,由 Google、IBM 和 Lyft 联合开发,就在前不久2018年8月份1.0正式版本已经发布,简单一句概况就是Istio 允许您连接、保护、控制和观测服务。

连接

保护

控制

观测

PS: 以下内容来自官网文档

Istio 服务网格逻辑上分为数据平面和控制平面。

数据平面由一组以 sidecar 方式部署的智能代理(Envoy)组成。这些代理可以调节和控制微服务及 Mixer 之间所有的网络通信。
控制平面负责管理和配置代理来路由流量。此外控制平面配置 Mixer 以实施策略和收集遥测数据。

下图显示了构成每个面板的不同组件:

image

Envoy

Istio 使用 Envoy 代理的扩展版本,Envoy 是以 C++ 开发的高性能代理,用于调解服务网格中所有服务的所有入站和出站流量。Envoy 的许多内置功能被 istio 发扬光大,例如:

Envoy 被部署为 sidecar,和对应服务在同一个 Kubernetes pod 中。这允许 Istio 将大量关于流量行为的信号作为属性提取出来,而这些属性又可以在 Mixer 中用于执行策略决策,并发送给监控系统,以提供整个网格行为的信息。

Sidecar 代理模型还可以将 Istio 的功能添加到现有部署中,而无需重新构建或重写代码。可以阅读更多来了解为什么我们在设计目标中选择这种方式。

Mixer

Mixer 是一个独立于平台的组件,负责在服务网格上执行访问控制和使用策略,并从 Envoy 代理和其他服务收集遥测数据。代理提取请求级属性,发送到 Mixer 进行评估。有关属性提取和策略评估的更多信息,请参见 Mixer 配置。

Mixer 中包括一个灵活的插件模型,使其能够接入到各种主机环境和基础设施后端,从这些细节中抽象出 Envoy 代理和 Istio 管理的服务。

Pilot

Pilot 为 Envoy sidecar 提供服务发现功能,为智能路由(例如 A/B 测试、金丝雀部署等)和弹性(超时、重试、熔断器等)提供流量管理功能。它将控制流量行为的高级路由规则转换为特定于 Envoy 的配置,并在运行时将它们传播到 sidecar。

Pilot 将平台特定的服务发现机制抽象化并将其合成为符合 Envoy 数据平面 API 的任何 sidecar 都可以使用的标准格式。这种松散耦合使得 Istio 能够在多种环境下运行(例如,Kubernetes、Consul、Nomad),同时保持用于流量管理的相同操作界面。

Citadel

Citadel 通过内置身份和凭证管理可以提供强大的服务间和最终用户身份验证。可用于升级服务网格中未加密的流量,并为运维人员提供基于服务标识而不是网络控制的强制执行策略的能力。从 0.5 版本开始,Istio 支持基于角色的访问控制,以控制谁可以访问您的服务。

四. 服务监控链路监控

Istio结合了链路监控和服务监控,对于K8S状态监控也自然而然也在其中

zipkin + jaeger 来对zipkin的数据进行更加友好的展示

image

.


image

PS : 需要实现链路监控需要代码中做出基础的适配

prometheus + grafana 来对prometheus获取的数据进行展示监控报警配置

image image
上一篇下一篇

猜你喜欢

热点阅读