微服务的两面性
最近两三年来微服务方兴未艾, 可以看到越来越多的公司和开发人员陆陆续续投身到微服务架构, 让一个一个的微服务项目落地。
但是,在这一片叫好的喧闹中, 我们还是发觉一些普遍存在的问题:虽然微服务对开发进行了简化,通过将复杂系统切分为若干个微服务来分解和降低复杂度,使得这些微服务易于被小型的开发团队所理解和维护。但是,复杂度并非从此消失。微服务拆分之后,单个微服务的复杂度大幅降低,但是由于系统被从一个单体拆分为几十甚至更多的微服务, 就带来了另外一个复杂度:微服务的连接、管理和监控。
试想, 对于一个大型系统, 需要对多达上百个甚至上千个微服务的管理、部署、版本控制、安全、故障转移、策略执行、遥测和监控等,谈何容易。更不要说更复杂的运维需求,例如A/B测试,金丝雀发布,限流,访问控制和端到端认证。
开发人员和运维人员在单体应用程序向分布式微服务架构的转型中, 不得不面临上述挑战。
针对上述问题,Service Mesh,服务网格,应运而生。
什么是Service Mesh(服务网格)?
Service Mesh是专用的基础设施层
轻量级高性能网络代理
提供安全的、快速的、可靠地服务间通讯
与实际应用部署一起,但对应用透明
今天主要介绍其中一种:Linkerd
Linkerd
Resilient service mesh for cloud native apps
What is Linkerd?
Linkerd is an open source network proxy designed to be deployed as a service mesh: a dedicated layer for managing, controlling, and monitoring service-to- service communication within an application
服务之间的通信,中间经过Linkerd。在之前的SpringCloud中,类似负载均衡、服务容错保护、健康机制等等都是直接内嵌在每个服务中,现在把SpringCloud这一套抽离出来,交由Linkerd服务来代理。业务服务不需要关系这些,只需要基于Linkerd启动,就拥有这些服务治理特性。
基于服务注册中心和配置中心,业务服务也不需要关注,交由Linkerd去处理。
服务在启动时,只需要告诉Likerd 服务ip、端口等信息即可。
What does Linkerd do?
Linkerd adds visibility, control, and reliability to your application with a wide array of powerful techniques: circuit-breaking, latency-aware load balancing, eventually consistent (“advisory”) service discovery, deadline propagation, and tracing and instrumentation.
Linkerd在端口9990提供一个控制管理面板,用于监控服务行为,包括服务请求量、成功率、连接信息、所配路由的延迟指标等。所有信息实时更新,你可以很清楚的知道服务的健康情况。
Linkerd主要特性
负载均衡:linkerd提供了多种负载均衡算法,它们使用实时性能指标来分配负载并减少整个应用程序的尾部延迟。
熔断:linkerd包含自动熔断,将停止将流量发送到被认为不健康的实例,从而使他们有机会恢复并避免连锁反应故障。
服务发现:linkerd 与各种服务发现后端集成,通过删除特定的(ad-hoc)服务发现实现来帮助您降低代码的复杂性。
动态请求路由:linkerd 启用动态请求路由和重新路由,允许您使用最少量的配置来设置分段服务(staging service),金丝雀(canaries),蓝绿部署(blue-green deploy),跨DC故障切换和黑暗流量(dark traffic)。
重试机制:linkerd可以在某些故障时自动重试请求,并且可以在指定的时间段之后让请求超时。
TLS:linkerd 可以配置为使用 TLS 发送和接收请求,您可以使用它来加密跨主机边界的通信,而不用修改现有的应用程序代码。
HTTP 代理:linkerd 可以作为 HTTP 代理,几乎所有现代 HTTP 客户端都广泛支持,使其易于集成到现有应用程序中。
透明代理:您可以在主机上使用 iptables 规则,设置通过 linkerd 的透明代理。
gRPC:linkerd 支持 HTTP/2 和 TLS,允许它路由 gRPC 请求,支持高级 RPC 机制,如双向流,流程控制和结构化数据负载。
分布式追踪:linkerd 支持分布式跟踪和度量仪器,可以提供跨越所有服务的统一的可观察性。
仪表化:linkerd 提供了通信延迟和有效载荷大小的详细直方图以及成功率和负载均衡统计信息,以人类可读和机器可解析的格式
作者:angeChen
链接:https://www.jianshu.com/p/ded638fed3fc