首页 文章 精选 留言 我的

精选列表

搜索[大型语言模型],共10009篇文章
优秀的个人博客,低调大师

2021年 Istio 大型“入坑”指南

【百度云原生导读】2021年伊始,如果你打算在生产环境中落地 Service Mesh,那么 Istio 必定在你的考虑范围之内。作为目前最流行的 Service Mesh 技术之一,Istio 拥有活跃的社区和众多的落地案例。但如果你想在生产环境大规模落地 Isito,这看似壮观美好的冰山下,却是暗流涌动,潜藏着无数凶险。 本文是笔者深度参与百度百亿量级流量生产环境研发和落地 Istio 两年来的经验总结和一些思考,旨在让正在考虑在自己生产环境引入 Isito 的读者能有所参考和启发,做好更充足的储备,更轻松的“入坑” Istio。 1、使用 Istio 无法做到完全对应用透明 服务通信和治理相关的功能迁移到 Sidecar 进程中之后, 应用中的 SDK 通常需要作出一些对应的改变。 SDK 需要关闭一些功能,例如重试。一个典型的场景是,SDK 重试 m 次,Sidecar 重试 n 次,这会导致 m * n 的重试风暴,从而引发风险。 此外,诸如 trace header 的透传,也需要 SDK 进行升级改造。如果你的 SDK 中还有其它特殊逻辑和功能,这些可能都需要小心处理才能和 Isito Sidecar 完美配合。 2、Istio 对非 K8S 环境的支持有限 在业务迁移至 Istio 的同时,可能并没有同步迁移至 K8S,而是仍然运行在原有 PaaS 系统之上。 这会带来一系列挑战: 原有 PaaS 可能没有容器网络,Istio 的服务发现和流量劫持都可能要根据旧有基础设施进行适配才能正常工作 如果旧有的 PaaS 单个实例不能很好的管理多个容器(类比 K8S 的 Pod 和 Container 概念),大量 Istio Sidecar 的部署和运维将是一个很大的挑战 缺少 K8S webhook 机制,Sidecar 的注入也可能变得不那么透明,而需要耦合在业务的部署逻辑中 3、只有 HTTP 协议是一等公民 Istio 原生对 HTTP 协议提供了完善的全功能支持,但在真实的业务场景中,私有化协议却非常普遍,而 Istio 却并未提供原生支持。 这导致使用私有协议的一些服务可能只能被迫使用 TCP 协议来进行基本的请求路由,这会导致很多功能的缺失,这其中包括 Istio 非常强大的基于内容的消息路由,如基于 header、 path 等进行权重路由。 4、扩展 Istio 的成本并不低 虽然 Istio 的总体架构是基于高度可扩展而设计,但由于整个 Istio 系统较为复杂,所以如果你实际对 Istio 进行过扩展,就会发现成本并不低。 以扩展 Istio 支持某一种私有协议为例,首先你需要在 Istio 的 api 代码库中进行协议扩展,其次你需要修改 Istio 代码库来实现新的协议处理和下发,接着你还需要修改 xds 代码库的协议,最后你还要在 Envoy 中实现相应的 Filter 来完成协议的解析和路由等功能。 在这个过程中,你还可能面临上述数个复杂代码库的编译等工程挑战(如果你的研发环境不能很好的使用 Docker 或者无法访问部分国外网络的情况下)。 即使做完了所有的这些工作,也可能面临这些工作无法合并回社区的情况,社区对私有协议的扩展支持度不高,这会导致你的代码和社区割裂,为后续的升级更新带来隐患。 5、Istio在集群规模较大时的性能问题 Istio 默认的工作模式下,每个 Sidecar 都会收到全集群所有服务的信息。如果你部署过 Istio 官方的 Bookinfo 示例应用,并使用 Envoy 的 config dump 接口进行观察,你会发现,仅仅几个服务,Envoy 所收到的配置信息就有将近 20w 行。 可以想象,在稍大一些的集群规模,Envoy 的内存开销、Istio 的 CPU 开销、XDS 的下发时效性等问题,一定会变得尤为突出。 Istio 这么做一是考虑这样可以开箱即用,用户不用进行过多的配置,另外在一些场景,可能也无法梳理出准确的服务之间的调用关系,因此直接给每个 Sidecar 下发了全量的服务配置,即使这个 Sidecar 只会访问其中很小一部分服务。 当然这个问题也有解法,如果你的生产环境中,能梳理出这些调用关系,你可以通过 Sidecar CRD 来显示定义服务调用关系,使 Envoy 只得到他需要的服务信息,从而大幅降低 Envoy 的资源开销。 6、XDS分发没有分级发布机制 当你对一个服务的策略配置进行变更的时候,XDS 不具备分级发布的能力,所有访问这个服务的 Envoy 都会立即收到变更后的最新配置。这在一些对变更敏感的严苛生产环境,可能是有很高风险甚至不被允许的。 如果你的生产环境严格要求任何变更都必须有分级发布流程,那你可能需要考虑自己实现一套这样的机制。 7、Istio 组件故障时是否有退路? 以 Istio 为代表的 Sidecar 架构的特殊性在于,Sidecar 直接承接了业务流量,而不像一些其他的基础设施那样,只是整个系统的旁路组件(比如 K8S)。 因此在 Isito 落地初期,你必须考虑,如果 Sidecar 进程挂掉,服务怎么办?是否有退路?是否能 fallback 到直连模式? 在 Istio 落地过程中,是否能无损 fallback,通常决定了核心业务能否接入 Service Mesh。 8、Istio 技术架构的成熟度还没有达到预期 虽然 Istio 1.0 版本已经发布很久了,但是如果你关注社区每个版本的迭代,就会发现,Istio 目前架构依然处于不太稳定的状态,尤其是 1.5 版本前后的几个大版本,先后经历了去除 Mixer 组件、合并为单体架构、仅支持高版本 K8S 等等重大变动,这对于已经在生产环境中使用了 Istio 的用户非常不友好,因为升级会面临各种不兼容性问题。 好在社区也已经意识到这一问题,2021 年社区也成立了专门的小组,重点改善 Istio 的兼容性和用户体验。 9、Istio缺乏成熟的产品生态 Istio 作为一套技术方案,却并不是一套产品方案。 如果你在生产环境中使用,你可能还需要解决可视化界面、权限和账号系统对接、结合公司已有技术组件和产品生态等问题,仅仅通过命令行来使用,可能并不能满足你的组织对权限、审计、易用性的要求。 而 Isito 自带的 Kiali 功能还十分简陋,远远没有达到能在生产环境使用的程度,因此你可能需要研发基于 Isito 的上层产品。 10、Istio目前解决的问题域还很有限 Istio 目前主要解决的是分布式系统之间服务调用的问题,但还有一些分布式系统的复杂语义和功能并未纳入到 Istio 的 Sidecar 运行时之中,比如消息发布和订阅、状态管理、资源绑定等等。 云原生应用将会朝着多 Sidecar 运行时或将更多分布式能力纳入单 Sidecar 运行时的方向继续发展,以使服务本身变得更为轻量,让应用和基础架构彻底解耦。 如果你的生产环境中,业务系统对接了非常多和复杂的分布式系系统中间件,Istio 目前可能并不能完全解决你的应用的云原生化诉求。 写在最后 看到这里,你是否感到有些沮丧,而对 Istio 失去信心? 上面列举的这些问题,实际上并不影响 Istio 依然是目前最为流行和成功的 Service Mesh 技术选型之一。Istio 频繁的变动,一定程度上也说明它拥有一个活跃的社区,我们应当对一个新的事物抱以信心,Istio 的社区也在不断听取来自终端用户的声音,朝着更合理的方向演进。 同时,如果你的生产环境中的服务规模并不是很大,服务已经托管于 K8S 之上,也只使用那些 Istio 原生提供的能力,那么 Istio 依然是一个值得尝试的开箱即用方案。 但如果你的生产环境比较复杂,技术债务较重,专有功能和策略需求较多,亦或者服务规模庞大,那么在开始使用 Istio 之前,你需要仔细权衡上述这些要素,以评估在你的系统之中引入 Istio 可能带来的复杂度和潜在成本。 百度云原生团队在2021年将持续为大家带来 Service Mesh 系列文章,内容涵盖 Istio 入门体验、Istio 和 Envoy 源码深度解析、服务网格大规模落地经验、服务网格性能优化等,敬请持续关注。 关于百度智能云云原生平台 百度智能云云原生平台,为客户建设容器化和无服务器化的基础设施,提供企业级的微服务治理能力,同时集成源自百度自身多年实践的 DevOps 工具链。能够保障开发者享受到高效、灵活、弹性的开发与运维体验,助力企业更高效率低风险地构建云原生应用,广泛应用于金融、互联网、制造等各行各业的云原生转型阶段。 其中天合 Stack是私有化云原生技术中台,包含基于 Kubernetes 的容器云平台、基于 Istio 和 SpringCloud 架构的微服务平台和自研函数计算服务三部分,每部分均可独立提供服务。 点击https://cloud.baidu.com/product/cnap.html,查看百度云原生平台详情。 相关阅读: 云原生时代,你应该了解的Service Mesh 最新!最全面!Istio 服务网格部署实践 重磅!云原生计算交流群成立 扫码添加小助手即可申请加入,一定要备注:名字-公司/学校-地区,根据格式备注,才能通过且邀请进群。。 了解更多微服务、云原生技术的相关信息,请关注我们的微信公众号【云原生计算】!

优秀的个人博客,低调大师

浅谈大型网站之负载均衡架构

概念 负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 分类 一般有以下3种类型的负载均衡架构 1、链路负载均衡 链路负载均衡就是一般讲的DNS轮循负载均衡,负载均衡是由DNS动态解析成不同的IP完成的,在DNS中为多个地址配置同一个名字,因而查询这个名字的客户机将得到其中一个地址,从而使得不同的客户访问不同的服务器,达到负载均衡的目的。 DNS负载均衡虽然是一种简单而有效的方法,但是它不能区分服务器的差异,也不能反映服务器的当前运行状态,如果某一台服务器挂掉了,即这个域名不能被访问,整个网站也就瘫痪了,后果是可想而知的。 2、集群负载均衡 集群负载均衡是目前比较广泛使用的负载均衡方式,主要分为硬件层和软件层的负载均衡。 硬件负载均衡就是像F5这样的负载均衡设备,通过负载均衡硬件设备来分发用户的请求。硬件负载均衡性能特别好,但同时价格也非常昂贵,一般小公司用不起的,还有硬件负载均衡也不能动态扩容,当然这不够成问题。 软件负载均衡就是现在使用最多较为普遍的一种负载均衡方式,主要就是软件成本相对硬件来说成本比较低,直接购买普通的服务器就能搭建软件负载均衡,但如果软件负载均衡需要经过的代理服务器比较多也会带来网络延迟等问题。常见的软件负载均衡包括工作在TCP第四层的LVS,即在网络层进行IP地址分发,然后还有工作在TCP第7层的HaProxy、Nginx等根据用户访问信息(如:域名、Cookie等信息)分发到不同的服务器。 3、操作系统负载均衡 操作系统负载均衡就是通过利用操作系统级别的软中断和硬中断来达到负载均衡,比如可以设置多队列的网卡来实现等,这种负载均衡一般不会用到。 这几种负载均衡方式在CDN、分布式WEB服务、分布式数据集群中都能用到。

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册