ITPub博客

首页 > 数据库 > 数据库开发技术 > 云原生ServiceMesh服务网格lstio初认识

云原生ServiceMesh服务网格lstio初认识

原创 数据库开发技术 作者:步步运维步步坑 时间:2024-05-24 10:02:33 0 删除 编辑

什么是istio


通俗的说,istio是一个安全加固,连接,控制和观察服务的开源平台

再说明istio之前,我们首先得知道什么是ServceMesh,为什么要用它?

在 Service Mesh 出现之前,微服务软件架构所带来的问题都是采用框架模式解决,将服务连接、安全、控制和可观测性等以 SDK 的形式提供给应用开发人员。随着技术发展和业务规模的增长,这种模式的瓶颈逐渐显现:其一,单一编程语言无法有效实现所有业务需求,多编程语言场景的出现导致相同功能的 SDK 需要用不同的语言重复开发,且不同语言的 SDK 需要同时维护和迭代,共享复用困难。其二,SDK 与应用在同一个进程中紧密耦合,这种强绑定关系使它们无法独立快速演进,从而陷入基础技术和业务发展相互制约的困境。Service Mesh 的出现使得解决问题的思路从之前的框架模式转变为平台模式,之前的 SDK 中非常固定的内容依旧保留在 SDK 中,其他内容到完全独立的 Proxy(即 Sidecar)中,Proxy 的热升级技术将平台功能的变更对应用完全无感,从而最大程度解决了过去应用与 SDK 因深度耦合而无法独立演进的问题

再云原生时代,serviceMesh 的主要作用主要有以下几点



服务发现与负载均衡

Service Mesh 技术可以自动发现服务实例,并根据负载情况动态路由流量,以实现负载均衡。

故障恢复与容错

通过在代理中实现重试、超时和断路器等机制,Service Mesh 可以帮助应用程序在服务不可用或响应缓慢时实现快速故障恢复和容错。


安全性

Service Mesh 提供了一系列安全功能,比如服务身份验证、流量加密和访问控制,以保护服务之间的通信安全可靠。


监控与跟踪

Service Mesh 提供了丰富的监控和跟踪功能,可以实时监控服务之间的通信、收集性能指标和日志,并支持故障排除和性能优化。

原来的代理都是基于网络流量的,一般都是工作在 IP 或者 TCP 层,很少关心具体的应用逻辑。但是 service mesh 中,代理会知道整个集群的所有应用信息,并且额外添加了热更新、注入服务发现、降级熔断、认证授权、超时重试、日志监控等功能,让这些通用的功能不必每个应用都自己实现,放在代理中即可。换句话说,service mesh 中的代理对微服务中的应用做了定制化的改进

所以你也可以理解 service mesh 中的代理会抢了 Nginx 的生意,这也是为什么Nginx 也要开始做 NginMesh 的原因


架构图

数据平面由一组以Sidecar方式部署的智能代理(Envoy)组成,所有进入和流出服务的流量都会被Envoy拦截,并与控制面进行交互,根据配置执行相应的通信功能。Envoy之所以称之为智能,是因为Envoy相对于其他代理来说有着更丰富的治理能力和灵活的配置方式,并且支持各种插件可用于扩展流量治理能力,并生成遥测数据。

在控制平面上,Istio由三个组件( Pilot、Citadel、Galley )整合成了一个单进程、多模块的istiod,极大的降低了部署的复杂度。其中Pilot组件负责提供服务发现、智能路由(如金丝雀发布)和弹性功能(如超时、重试);Citadel负责安全,管理密钥和证书;Galley负责对配置的验证和处理等功能。需要注意的是,整个运行流程需要这些组件协同工作,这里只是做一个简单的介绍,后续我们也会对Istio架构以及架构中的各个组件做一个更详细的介绍。总的来说,Istiod作为一种全新的设计,构建了一套标准的控制面规范,主要提供服务发现、规则配置和证书管理等功能,并向数据平面传递这些信息。


组件

  • Pilot:为 envoy 提供了服务发现,流量管理和智能路由(AB测试、金丝雀发布等),以及错误处理(超时、重试、熔断)功能。用户通过 pilot 的 API 管理网络相关的资源对象,pilot 会根据用户的配置和服务的信息把网络流量管理变成 envoy 能识别的格式分发到各个 sidecar 代理中。

  • Mixer:为整个集群执行访问控制(哪些用户可以访问哪些服务)和 policy 管理(rate limit,quota 等),并且收集代理观察到的服务之间的流量统计数据

  • Citadel:为服务之间提供认证和证书管理,可以让服务自动升级成 TLS 协议

代理会和控制中心通信,一方面可以获取需要的服务之间的信息,另一方面也可以汇报服务调用的 metrics 数据。

为什么使用istio

在微服务架构中,原先一体化的应用被拆解成了多个独立的微服务,它们协同工作以完成复杂的任务。这种分布式的架构带来了更高的灵活性和可伸缩性,但同时也引入了一系列新的挑战。特别是当服务间的调用出现问题时,无论是错误还是响应延迟,排查的难度都显著增加,因为组件的数量和交互的复杂性都大大提升了。

面对用户请求出现错误或响应缓慢的情况,我们需要迅速定位问题的根源。在微服务架构中,这变得尤为困难,因为请求可能跨越多个服务,每个服务又可能与其他多个服务进行交互。我们需要明确知道哪些服务调用成功,哪些失败,以及整个调用链路上各个环节的耗时情况。此外,还需要了解哪些调用是并发执行的,哪些是串行的,以便优化整个系统的性能。

为了解决这些问题,我们需要一种能够清晰地展示整个集群调用和流量情况的方法。这正是 Istio 这样的服务网格技术所能够提供的。通过 Istio,我们可以获得全面的调用链路追踪、服务间依赖关系的可视化以及性能监控等功能,从而帮助我们快速定位并解决问题,提升系统的稳定性和性能。


请问在哪里失败?应用调用是否正常

用户请求页面hang住?

为什么系统会慢?到底是哪些组件很慢?

微服务架构的广泛应用带来了显著优势,但同时也伴随着一系列挑战。随着应用被拆分成多个独立的微服务组件,每个组件虽然独立运行,但整体系统的稳定性却变得更为复杂。单个组件的故障概率或许未变,但组件间交互的增多却意味着整个系统出错的可能性增加。

在微服务调用过程中,缺乏完善的错误处理机制会导致一系列问题。例如,若未设置合适的超时参数或参数配置不当,请求调用链可能会因超时叠加而阻塞,给用户带来不佳的体验。同样,缺乏重试机制意味着偶发性故障可能直接引发错误返回,影响用户体验。此外,节点异常(如网络中断或高负载)也可能导致应用响应时间延长,此时集群服务应具备自动避开异常节点的能力。最后,应用本身也可能存在bug,这些bug可能导致部分应用服务中断。

面对这些问题,每个微服务应用都应具备及时发现问题并采取相应处理措施的能力,以确保整体系统的稳定运行。

另一方面,随着微服务数量的增长,日常应用发布和管理也变得更为复杂。传统的一次性升级方式风险过高,一旦出错可能导致整个线上应用不可用。因此,我们需要更智能的发布策略,如灰度发布和AB测试,以逐步验证新版本的效果。此外,当版本升级涉及API改动且组件间存在依赖关系时,我们还需要实现自动流量控制,确保不同版本在发布期间能够访问正确的地址。

综上所述,微服务架构虽然带来了诸多好处,但也要求我们关注并解决其在错误处理和发布管理等方面所面临的挑战。通过引入智能的错误处理机制和流量控制策略,我们可以提升微服务系统的稳定性和可用性,为用户提供更优质的体验。

新版本升级出错回滚造成的影响太大,无法进行A/B测试,根据用户属性访问不通的版本

为了保证整个系统的安全性,每个应用都需要实现一套相似的认证、授权、HTTPS、限流等功能。一方面大多数的程序员对安全相关的功能并不擅长或者感兴趣,另外这些完全相似的内容每次都要实现一遍是非常冗余的。这个问题需要一个能自动管理安全相关内容的系统。

服务都是HTTP而没有使用TLS;

么有流量限制策略,或者使用iptables规则太冗杂;



怎么接入

尽管 Istio 提供了强大的功能来解决微服务架构中的一系列问题,但它的引入也带来了不容忽视的复杂性。掌握和成功部署 Istio 需要详细的规划和深入的理解。因此,实施 Istio 需要一个渐进的、分阶段的策略。

首先,我们需要在测试环境中搭建 Istio 集群,以深入了解其核心概念和组件。这包括掌握 Istio 提供的接口和资源,并思考如何将其应用于实际场景中。同时,熟悉 Istio 的源代码和社区动态也是必不可少的,以便及时规避潜在的问题或修复已知的 bug。

接下来,我们可以开始接入 Istio 的观察性功能,如日志记录、追踪和度量指标收集。为此,我们可以选择一些流量较小、影响范围有限的应用,开启 Istio 的自动注入功能,并安装相应的监控组件。通过收集和分析这些监控数据,我们可以了解 Istio 对应用性能的影响,并建立性能测试基准。

在掌握了 Istio 的基本功能后,我们可以进一步配置应用的超时参数、自动重试、熔断和降级等容错性功能。这需要开发者和集群管理员的紧密合作,以确保配置的正确性和有效性。同时,我们也应该通知开发者删除应用代码中相应的处理逻辑,以避免重复或冲突的配置。

随后,我们可以将 Istio 与其他关键组件和流程进行对接,如入口网关、Helm 以及应用上架等。通过 Istio 接管应用的升级发布流程,我们可以实现灰度发布、蓝绿发布和 AB 测试等高级功能,提高应用的发布效率和稳定性。

最后,为了提升整个集群的安全性,我们需要接入 Istio 的安全功能。这包括配置应用的 TLS 互信、添加 RBAC 授权以及设置流量限制等。虽然安全配置可能相对繁琐且优先级较低,但它对于保护集群免受潜在威胁至关重要。

不过以上步骤只是一个参考框架,具体实施时需要根据公司的实际情况、人力资源和时间安排进行调整和优化。每个公司都应该根据自己的需求和节奏来找到适合自己的 Istio 部署方案。


最后的话

Istio的架构在数据中心和集群管理中已变得相当普遍。其核心思想是将任务执行分散到各个节点上的agent,同时依靠控制中心实现对整个集群的汇聚管理和API提供。这种分布式的执行与集中控制相结合的架构,不仅体现在Istio中,也在Kubernetes和SDN(软件定义网络)等技术中可见其影子。

随着数据中心管理的节点数量激增,这种架构的优势愈发明显。通过agent在节点层面执行具体任务并反馈信息,控制中心能够全面掌控集群状态并提供管理接口。这种设计既保证了任务的分布式执行效率,又确保了集群层面的统一管理和控制,避免了完全去中心化架构在管理上的局限性。

Istio的出现为微服务架构带来了显著的便利。它让开发者无需再关注服务调用的细节实现,如超时、重试和速率限制等,同时自动保障了服务间的安全性和授权机制。对于集群管理员而言,Istio也简化了应用发布流程,支持AB测试和灰度发布,并提供了清晰的集群运行状态视图。

然而,Istio并非万能解决方案。它实际上是将原本分散在应用内部的复杂性进行了统一抽象和集中管理,但并未从根本上消除这些复杂性。因此,维护Istio集群本身也是一项复杂的任务,尤其是当它与同样复杂的Kubernetes系统结合使用时。这两个系统的稳定性和性能对整个集群的运行至关重要。

因此,在引入Istio之前,需要进行充分的规划和评估。我们需要权衡Istio带来的好处与额外维护成本之间的关系,并确保拥有足够的专业人才来支持整个网络、Kubernetes和Istio的运维工作。只有在做好这些准备工作的基础上,我们才能充分发挥Istio在微服务架构中的优势。

END


添加博主

微信号|yfq940-


点个关注!!!


原文作者:步步运维步步坑;如有侵权,请联系管理员删除。

上一篇: Istio 初体验
请登录后发表评论 登录
全部评论

注册时间:2022-10-08

  • 博文量
    100
  • 访问量
    51707