微服务的概念已经在各大公司实践开了,以Java为表明的spring boot成为了微服务的表明,K8S+Docker成为了微服务运行的最佳环境,微服务的概念已经离咱们没有那么遥远了。spring
固然微服务是复杂的,除了组件繁多还须要代码作出不少改造才能享受到它带来的优点,那么有没有一种方式能够不须要太多代码改动就可以在多种不一样的开发语言中灵活使用呢?数据库
基于服务网格Istio就诞生了,拨云见日咱们今天就来一同窗习了解微服务和Istio相关的知识.后端
附上:网络
喵了个咪的博客:w-blog.cn架构
Istio官方地址:https://preliminary.istio.io/zh并发
Istio中文文档:https://preliminary.istio.io/zh/docs/负载均衡
PS : 此处基于当前最新istio版本1.0.3版本进行搭建和演示,不一样的版本各类细节会有些许不一样!框架
在开始讲解Istio以前咱们须要先了解微服务的概念,以及在微服务管理中经常须要使用到的一些列的组件:运维
总的来讲(问题和挑战):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 就能够了。
关于微服务和服务网格的区别,个人一些理解:微服务更像是一个服务之间的生态,专一于服务治理等方面,而服务网格更专一于服务之间的通讯,以及和 DevOps 更好的结合。
最终万众期待的Istio诞生了,Istio于 2017 年 5 月 24 日首发布,由 Google、IBM 和 Lyft 联合开发,就在前不久2018年8月份1.0正式版本已经发布,简单一句概况就是Istio 容许您链接、保护、控制和观测服务。
链接
保护
控制
观测
PS: 如下内容来自官网文档
Istio 服务网格逻辑上分为数据平面和控制平面。
数据平面由一组以 sidecar 方式部署的智能代理(Envoy)组成。这些代理能够调节和控制微服务及 Mixer 之间全部的网络通讯。 控制平面负责管理和配置代理来路由流量。此外控制平面配置 Mixer 以实施策略和收集遥测数据。
下图显示了构成每一个面板的不一样组件:
Istio 使用 Envoy 代理的扩展版本,Envoy 是以 C++ 开发的高性能代理,用于调解服务网格中全部服务的全部入站和出站流量。Envoy 的许多内置功能被 istio 发扬光大,例如:
Envoy 被部署为 sidecar,和对应服务在同一个 Kubernetes pod 中。这容许 Istio 将大量关于流量行为的信号做为属性提取出来,而这些属性又能够在 Mixer 中用于执行策略决策,并发送给监控系统,以提供整个网格行为的信息。
Sidecar 代理模型还能够将 Istio 的功能添加到现有部署中,而无需从新构建或重写代码。能够阅读更多来了解为何咱们在设计目标中选择这种方式。
Mixer 是一个独立于平台的组件,负责在服务网格上执行访问控制和使用策略,并从 Envoy 代理和其余服务收集遥测数据。代理提取请求级属性,发送到 Mixer 进行评估。有关属性提取和策略评估的更多信息,请参见 Mixer 配置。
Mixer 中包括一个灵活的插件模型,使其可以接入到各类主机环境和基础设施后端,从这些细节中抽象出 Envoy 代理和 Istio 管理的服务。
Pilot 为 Envoy sidecar 提供服务发现功能,为智能路由(例如 A/B 测试、金丝雀部署等)和弹性(超时、重试、熔断器等)提供流量管理功能。它将控制流量行为的高级路由规则转换为特定于 Envoy 的配置,并在运行时将它们传播到 sidecar。
Pilot 将平台特定的服务发现机制抽象化并将其合成为符合 Envoy 数据平面 API 的任何 sidecar 均可以使用的标准格式。这种松散耦合使得 Istio 可以在多种环境下运行(例如,Kubernetes、Consul、Nomad),同时保持用于流量管理的相同操做界面。
Citadel 经过内置身份和凭证管理能够提供强大的服务间和最终用户身份验证。可用于升级服务网格中未加密的流量,并为运维人员提供基于服务标识而不是网络控制的强制执行策略的能力。从 0.5 版本开始,Istio 支持基于角色的访问控制,以控制谁能够访问您的服务。
Istio结合了链路监控和服务监控,对于K8S状态监控也天然而然也在其中
zipkin + jaeger 来对zipkin的数据进行更加友好的展现
.
PS : 须要实现链路监控须要代码中作出基础的适配
prometheus + grafana 来对prometheus获取的数据进行展现监控报警配置