范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

携程ServiceMesh性能优化实践

  一、背景
  为了支撑业务的高速发展,从17年开始,携程内部逐步推进应用容器化改造与业务上云工作,同期携程技术架构经历了从集中式单体应用到分布式微服务化的演进过程。
  随着Kubernetes的不断发展和推广,服务网格(Service Mesh)在近几年也变得很流行。而 Servive Mesh 之所以越来越受欢迎,在提供更丰富的服务治理、安全性、可观测性等核心能力外,其从架构设计层面解决了以上几个痛点,服务治理能力以 Sidecar 的模式下沉到数据面,解决了 SDK 升级及多语言的问题,对于像负载均衡、熔断、限流等策略配置,由控制面统一管理和配置,并下发到数据面生效。在整体架构上云技术方案选型上,权衡各类方案的功能完备性、架构扩展性、改造维护成本及社区发展等,最终选择基于Istio构建Service Mesh平台治理方案。  1.1 携程Service Mesh发展
  从2020年中,我们依托K8S底座能力,进行Service Mesh技术预研,深度定制Istio,并与携程框架部门合作进行了小规模的落地试点。2021年底,接入非核心应用600+,为Service Mesh在携程的最终落地奠定基础。到目前为止,生产环境已有2000个应用(业务POD数近1W)接入,预期下半年推进核心应用的接入。
  1.2 携程Service Mesh数据表现
  在前期应用接入过程中,针对Istio稳定性(主要在性能)方面,梳理了以下几个问题:  控制面并发性能:pilot对象处理的并发性能是否满足平台需求?  控制面配置下发时效性:配置下发的延迟及准确性是否能够满足业务需求?
  本文主要分享在当前的体量下,回答上述问题,使控制面平稳支撑大规模 Sidecar 的落地,通过下述优化之后,测试域(Istio CR量级在1W+)如下图所示:
  从实际生产来看,ServiceEntry的处理效率提升了15倍左右  从测试域来看,整体initContext时延从原先P99 30s左右到目前P99 5-10秒左右  从测试域来看,整体优化水平从原先P99 30s+到目前的P99 15s左右(该处为全量推送水平,其中15s的结果是平衡资源使用与推送效率调参的目标值,这里PILOT_DEBOUNCE_AFTER 设置为10s)  开启增量推送后,实例推送在测试域的推送效果从10-30s缩减至2.5s左右
  携程目前Istio落地版本为1.10二、Service Mesh优化的思路与挑战2.1 现状
  针对Service Mesh在携程落地的服务目标,可以用一句话进行总结:能够通过横向扩展,支撑万级业务服务。为了完成上述目标,团队面临以下挑战:  当前 Istio的对象处理性能等方面无法满足平台需求  配置下发的延迟及准确性无法满足业务需求
  经过前中期,针对 Istio架构进行深入研究以及上线前期测试的性能预研,核心问题聚焦在以下几点:  istio对象处理性能较低:在处理ServiceEntry时的并发性缺失及WorkloadEntry Selector模式的计算高耗时等  istio配置推送性能较低:配置推送时对象的全量处理拉长下发时延,并会随着Istio对象增长而近线性增长  2.2 优化实践
  接下来主要分享携程所经历过的性能问题,和对应的优化的方向:
  对象处理性能
  当前istio使用内部queue处理各类Object事件,其为线性处理流程,效率比较低下,为此社区提供namespace filter方式进行处理,以减缓性能问题,但针对Istio相关对象,未实现基于namespace的隔离,因此效率提升不太符合预期。
  推送性能
  xDS 是 istio 控制面和数据面 envoy 之间的通信协议,其中x 表示多种协议的集合,可以简单的把 xDS 理解为,网格内的服务发现数据和治理规则的集合。xDS 数据量的大小和网格规模是正相关的。
  当前 istio 下发 xDS 使用的是全量下发策略,也就是网格里的所有 sidecar,内存里都会有整个网格内所有的服务发现数据。在大量服务实例的情况下,全量下发会影响 Pilot 和 Sidecar 的性能和稳定性,虽然Istio 在不断的演进过程中引入了一些 scoping 的机制,就是 Sidecar 这个 CRD,这个配置可以显式的定义服务之间的依赖关系,但该scoping方案还是无法达到业务侧的推送延迟预期。
  首先,简要介绍一下Istio推送的过程:
  注:这里使用海东同学的推送源码分析图
  根据上图结合源码可知:  StreamAggregatedResources    会和当前的 Proxy 创建一个连接,并创建一个接受请求的 reqChannel   。同时开启一个新的协程 receiveThread   处理客户端主动发起的请求,期间调用s.globalPushContext().InitContext(s.Env, nil, nil)  进行数据初始化,其中InitContext需要处理Istio 所有CR的全量数据(如VirtualServices、DestinationRules、EnvoyFilters和SidecarScopes等),该操作耗时较长,因测试环境上述对象量级在2w左右,导致执行耗时P99 在28s左右。 从  con.pushConnection   中获取到  pushEv    事件后,调用  s.pushConnection()    进行处理,判断是否为全量推送: if pushRequest.Full {         // Update Proxy with current information.         s.updateProxy(con.proxy, pushRequest.Push) }
  其中 updateProxy  更新proxy当前信息,主要逻辑如下所示: func (s *DiscoveryServer) updateProxy(proxy *model.Proxy, push *model.PushContext) {     s.setProxyState(proxy, push)     if util.IsLocalityEmpty(proxy.Locality) {         ...         if len(proxy.ServiceInstances) > 0 {             proxy.Locality = util.ConvertLocality(proxy.ServiceInstances[0].Endpoint.Locality.Label)         }     } }  func (s *DiscoveryServer) setProxyState(proxy *model.Proxy, push *model.PushContext) {     proxy.SetWorkloadLabels(s.Env)     proxy.SetServiceInstances(push.ServiceDiscovery)     ...     proxy.SetSidecarScope(push)     proxy.SetGatewaysForProxy(push) }
  在 setProxyState  方法中的环节获取SidecarScope等相关信息。针对上述介绍可以明确下面几个优化方向: 虽然Istio针对K8S对象实现了基于namespace级别的隔离,但未对Istio CR对象实现namespace级别隔离  在 InitContext  方法中,Push()    这么慢,主要是在 req.Full    做全量推送的时候,需要初始化  PushContext   ,初始化  PushContext    的过程中需要调用 initServiceRegistry  、initEnvoyFilters  和i nitSidecarScopes  等 ,耗时巨大 2.2.1 Pilot性能优化
  资源基于Namespace隔离
  虽然Istio针对K8S对象实现了基于namespace级别的隔离,但未对Istio CR对象实现namespace级别隔离,基于此,内部团队针对Istio 1.10.3版本针对Istio CR对象实现namespace隔离,使其影响范围控制在指定namespace 下,其他用户操作Istio CR而彼此互不干扰,且能够极大缩减Istio Event事件的处理,加速Pilot启动速度,提升事件处理效率,促进配置下发效率,在CR Client结构体中,新增 namespaceFilter  等相关字段,定义如下: // Client is a client for Istio CRDs, implementing config store cache // This is used for CRUD operators on Istio configuration, as well as handling of events on config changes type Client struct {     ...      namespaceInformer v1.NamespaceInformer     namespaceFilter   filter.DiscoveryNamespacesFilter     ... }
  截至目前为止,携程Mesh平台主要分为SLB、SOA两大namespace,基于namespace隔离之后,效率提升预估在50%左右。
  ServiceEntryStore 改造
  ServiceEntryStore 的数据处理性能问题,主要有以下几点:  它里面有一个步骤,会全量更新实例的索引,这意味着 service 有一个发生变化了,它会更新全部 service 的索引,这是一个量级写放大  WorkloadEntry与ServiceEntry的关联查询的耗时,随着彼此的数量逐步放大  configController的Queue队列为线性处理,效率低下
  因此,携程通过针对ServiceEntryStore进行Controller-Runtime改造,将ServiceEntry对象由线性处理改为并发处理,同时将WorkloadEntry结构体废弃,选择直接使用ServiceEntry,业务方Operator管理ServiceEntry对应Endpoint方式,优化处理性能,从实际生产效率来看,ServiceEntry的处理效率提升了4倍左右。
  EnvoyFilter增量化改造
  通过上述简介可知, Push()    这么慢,主要是在 req.Full    做全量推送的时候,需要初始化 PushContext   ,初始化 PushContext   的过程,都是全量且嵌套循环处理,因此当多个对象量级巨大,则计算耗时成倍增长,针对EnvoyFilter的全量处理,不涉及其他对象,可以通过定义EnvoyFilterController结构体以Controller方式运行,从而实现全量改增量,结构体定义如下: type Controller struct {     xdsUpdater model.XDSUpdater     client     kube.Client     queue      controllers.Queue      // processed ingresses     envoyFilter map[types.NamespacedName]*wrapEnvoyFilterWrapper      envoyFilterInformer cache.SharedInformer     envoyFilterLister   v1alpha3.EnvoyFilterLister      mutex sync.Mutex      envoyFiltersByNamespace map[string][]*wrapEnvoyFilterWrapper }
  Sidecar延迟及按需计算
  在 InitContext  方法中,除了EnvoyFilter耗时较多外,initSidecarScopes同样耗时巨大,通过代码可知,Sidecar   有两种,一种是带 WorkloadSelector   的,一种是不带的。不带 Selector  的话就是对这个命名空间所有服务生效。如果没有手动创建默认的 Sidecar ,Pilot 会通过  DefaultSidecarScopeForNamespace    为当前命名空间创建一个默认的 Sidecar  ,会将网格中所有的服务都遍历一遍,写入 SidecarScope   中。initSidecarScopes  循环计算如下: sidecar数量x(egressConfigs数量x(selectVirtualServices耗时+selectServices耗时)+out.EgressListeners数量x(listener.services数量+listener.virtualServices数量...))
  因SidecarScope涉及其他CR对象结果,因此无法简单的由全量改增量,但可以通过延迟计算和按需计算方式,进行效率提升,延迟计算主要通过将 initSidecarScopes 计算逻辑后移至push阶段,按需计算即没必要计算所有Sidecar,只需要根据链接的proxy进行计算即可,通过上述的优化,可以做以下针对性调整: 如果集群内服务较多,为每一个应用创建一个sidecar,防止所有服务信息推送给envoy,导致envoy OOM。  在上述优化之后,InitContext的处理耗时可以从P99 30s下降到P99 5s左右,此时,配置推送效率得到5倍左右的提升,那么 setProxyState  处的耗时,将会被放大,CPU的使用率将会成倍增长,可以通过下述配置进行优化。 2.2.2 Pilot配置优化
  启用 XDS 增量推送
  通过给 istiod 配置 PILOT_ENABLE_EDS_DEBOUNCE环境变量,我们启用 istiod 的增量推送而无需等待full push。
  减少推送量
  将 istiod 的 PILOT_FILTER_GATEWAY_CLUSTER_CONFIG 环境变量配置为 "true",这样 Istio 将仅推送 Gateway 所需的服务信息,这个配置将极大的减少每次推送的量。开启这个特性之后,集群内的 istiod 每次向 Gateway 推送的服务信息降低90%。
  关闭Headless
  将 istiod 的 PILOT_ENABLE_HEADLESS_SERVICE_POD_LISTENERS环境变量配置为 "false",因为headless svc对应的endpoints发生了变化,会触发full push的行为。
  提高吞吐
  默认情况下,单个 istiod 的推送并发数只有 100,在较大的集群内,可能会导致配置生效的延迟。istiod 环境变量 PILOT_PUSH_THROTTLE 可以配置这个并发数。建议根据集群规模进行配置。
  避免频发推送
  PILOT_DEBOUNCE_AFTER 与 PILOT_DEBOUNCE_MAX 是配置 istiod 去抖动的两个参数。
  默认配置是 100ms 与 10s ,这也就意味着,当集群中有任何事件发生时,Istio 会等待 100ms,如果开启EDS,则增量推送不会等待。
  若 100ms 内无任何事件进入,Istio 会立即触发推送。否则 Istio 将会等待另一个 100ms,重复这一操作,直到总共等待的时间达到 10s 时,会强制触发推送。实践中可以适当调整这两个值以匹配集群规模和实际应用。携程内部调高 PILOT_DEBOUNCE_AFTER 到 10s,以避免频繁推送对性能产生影响,也能够避免极端情况下推送不及时导致的 503 问题。  三、Service Mesh未来展望
  控制面的重心在于解决规模化问题,后续控制面将会在下述领域深入探索:  控制 去除对k8s的资源的依赖,推送耗时下降到秒级别,满 更 规模的接   使 NDS实现DNS解析功能,避免search域多次查询,提升Mesh的可 性
  团队将与社区深度合作,针对控制面,密切关注增量推送等特性,后续将优先实现控制面稳定性增强,如下述功能:  连接限流:通过限流功能,降低大量Sidecar同时连接同一个 Pilot 实例的风险,减少服务风暴发生的机率。  熔断:基于生产场景的压测数据,测算出单实例 Pilot 可服务的 Sidecar 上限,超过上限值后,新连接会被Pilot 拒绝。
  Service Mesh作为云原生领域下一代微服务技术,经过 2 年多摸索与演进,携程完成了多语言、多场景的业务落地, 实际论证了Service Mesh在流量管控、系统扩展性的优势,具有下沉服务治理能力到基础设施层,高度解耦中间件与业务系统的可行性。
  后续,携程将在总结前期非核心应用Service Mesh化改造的基础上,逐步推进核心应用的落地,同步打磨完善平台能力,全面提升稳定性,为行业落地Service Mesh提供最佳实践和相关借鉴。  参考资料百度大规模Service Mesh落地实践  不是所有的应用都需要Service Mesh  控制面核心组件  istio 在知乎大规模集群的落地实践  Istio Pilot 源码分析(三)
  【作者简介】
  本文作者佐思、烧鱼、Shirley博,来自于携程Cloud Container团队,主要从事Service Mesh在携程的落地,负责控制面的可用性及优化建设,以及推进各类基础设施服务的云原生化。该团队负责K8s容器平台的研发和优化工作,专注于推动基础设施云原生架构升级,以及创新产品的研发和落地。

20条人生哲理句子,句句精辟!还不快进来看看1为人一生三碗粥,自己吃一碗给朋友留一碗送给过路人一碗,如果都自己吃会把你撑死。2如果人生是一次赌局的话,洗牌的是上帝,但是打牌的却是我们自己,打的好坏全在于我们。3你笑,全世界都大美新疆追着花儿游新疆丨这份新疆赏花完全地图,值得您收藏(下)石榴云新疆日报记者姚刚任江从春风拂面起新疆就处处花开时时向阳从春到夏,从夏到秋新疆到处花团锦簇姹紫嫣红越过高山跨越大漠花海遍地的新疆每一处都值得细细品味小心珍藏朵朵杏花,宛若云霞。我的旅拍好搭档松下S5K微单相机我是一个非常热爱旅行的人,平时也喜欢用相机记录下来每一个美丽的瞬间,但是用手机拍出来的照片实在是比不上相机,于是下定决心入手了松下S5K微单相机,有了它之后,每次旅行都要带着它给家中国辽代古建筑奉国寺奉国寺位于中国辽宁省锦州市义县,始建于辽开泰九年(1020年),奉国寺占地面积约6万平方米。辽金元时期是奉国寺的鼎盛时期,到明清时期仅存大雄宝殿,清代续建六角钟亭,四角碑亭,无量殿甲状腺不喜欢2种早餐,鸡蛋和牛奶没有上榜,不妨了解一下提起甲状腺,大家应该都不陌生。近年来随着体检的普及,甲状腺疾病已成为困扰大家的慢性病之一,其中最常见的就是甲状腺结节。最近,晓晨发现家里的早餐没有鸡蛋和牛奶了,因为平时基本上都要鸡血脂悄悄来临,身体若出现3个症状,占其一,早检查高血脂在现代生活中是一种常见病。一旦患病,会对健康造成很大影响。现代社会,随着人们的生活水平逐渐提高,许多心血管疾病越来越受到关注。平时要多留意自身的健康状况,注意日常的饮食习惯,在1000个人里面,有多少人能活过80岁?看看你就知道了问题怎么才能每天都收到这种文章呢?答案只需要点击右上角关注即可。活过八十岁的老年人不在少数,尽管如此,活过八十岁也是表面现象,背后的本质才更值得深究。一身体向来是革命的本钱,并且身中年女人哪些帽子该戴,哪些不该戴?戴错容易显土被说装嫩眼看着2022年春天就过去了,突然的升温让我们难以适应,在换季的时候,大家也纷纷开始改变了穿衣风格,这不,很多人在春夏就会选择用帽子凹造型,但同时中年女性也会担心帽子的穿搭会给气质大家注意去山姆超市看见这几款沐浴露别犹豫洗完皮肤超香大家注意去山姆超市看见这几款沐浴露别犹豫洗完皮肤超香以前买沐浴露都是看见什么样就买什么样也不管有没有效果,适不适合自己肤质现在换了几款国货沐浴露之后现在觉得国货产品做得越来越好了好变美神器A型肉毒毒素现已就位,仙女们赶快安排上!如果你对悄悄爬上脸庞的皱纹感到忧伤如果你羡慕别人的小V脸如果你想拥有明星同款一字肩又或者是夏天来临之前担心自己的小腿粗大而不敢穿裙子那么你一定要继续看下去解决以上问题全靠A型肉毒毒发痒的痘痘到底该如何正确应对?不知道容易长痘痘的宝宝有没有这样的困扰啊,就是长痘痘之处皮肤可能会有发痒的现象,但是不能去挠,那今天就一起来了解一下到底是什么原因?又该如何正确应对呢?痘痘处皮肤发痒的原因1处于发
两款长续航电动车来袭,运动风设计,动力足,适合代步及爬坡骑行对于一些经常爬坡的电动车用户来说,在选择电动车时,除了会考虑车辆续航外,还会去参考车辆动力是否充足。通常来说,动力越足且续航越远的车型就更受用户的欢迎。那么,具体都有哪些车型呢?下京东摩托车自营服务北京率先上线0元上牌送车上门等权益打造行业服务新标杆中国网科技8月17日讯昨日,京东汽车宣布在北京地区上线摩托车自营服务,通过现车不用等0元上牌送车上门三个核心权益,为摩友打造摩托车购车的全新消费体验。中国摩托车商会国际合作部主任虞消息称恒大汽车或将被并购,天津工厂半年仅生产200辆汽车Tech星球8月17日消息,据界面新闻,有知情人士透露,由政府牵头,恒大汽车可能将被另一家汽车公司并购。据透露,此次的牵头方或为地方政府。目前恒大汽车仅有天津工厂具备生产资质,正在恒大汽车恐遭并购,消息称其天津工厂半年仅生产200辆汽车IT之家8月17日消息,界面报道称,有知情人士透露,恒大汽车可能将被另一家汽车公司并购。知情人士表示,此次的并购属于政府行为,目前各方还在僵持。据透露,此次的牵头方或为地方政府。目蔚小理接连撞车,真不怪他们?车东西(公众号chedongxi)作者昊晗编辑JuiceL2频繁出事故,问题到底在哪里?上周,在宁波市区的某高速路段上,一辆小鹏P7在开启LCC功能(单车道L2)行驶时,由于车辆系芯片行业的阵痛期短缺与去库存并行近日,芯片价格雪崩引发关注,有芯片价格从每个200元下降至每个20元。今年上半年,消费电子终端产品需求不强,一个多月前台积电(TSM。US)三大客户苹果AMD英伟达下调订单量,行业腾讯投资美团已获利5倍,后续减持目标是谁?腾讯近期减持了京东SEA华谊兄弟,自身也被大股东减持文财经记者张云王颖编辑王立峰陆玲8月16日,媒体引述数位消息人士称,腾讯控股(0700。HK,下称腾讯)计划出售其所持外卖公司美消息称小米汽车将采用宁德时代麒麟和比亚迪刀片电池IT之家8月17日消息,36氪报道称,小米汽车已确定将采用宁德时代麒麟和比亚迪刀片电池方案。知情人士处透露,小米汽车已经敲定了两家主力电池供应商,分别为宁德时代和比亚迪旗下的弗迪电寺库否认跑路几百位员工仍在正常办公,奢侈品已搬至专业仓库记者于浩近日,奢侈品电商寺库北京总部疑似跑路的相关话题引发关注。据北京商报报道称,寺库北京大厦1至4层均已搬空,仅剩5层还有部分工作人员。报道还提及寺库已搬离亦庄物流仓库中心。界面HM时隔17个月重返天猫旗舰店,被网友骂翻,有人为发差评买衣服按HM天猫旗舰店恢复,互联网真的没有记忆吗?近日,有网友发现,在新疆棉事件时隔一年后,瑞典时尚品牌HM的天猫官方旗舰店悄悄上线了。2021年3月,HM集团曾发表声明称,旗下品牌和产魅族入局?折叠屏手机真的那么香吗在被吉利收购后,魅族的动向一直备受关注。8月17日,魅族在魅族19主理人计划板块提出了折叠屏相关的问题,并正式开启投票,让人怀疑其将进军折叠屏手机市场。2022年上半年手机市场提前全球及中国幽门螺杆菌检测试剂盒行业研究及十四五规划分析报告辰宇信息咨询市场调研公司最近发布20222028全球与中国幽门螺杆菌检测试剂盒市场调研报告内容摘要本文同时着重分析幽门螺杆菌检测试剂盒行业竞争格局,包括全球市场主要厂商竞争格局和中生活中该如何养胃,避免胃癌的发生?从慢性胃病到胃癌并不是一蹴而就的,发现胃癌要积极配合医生进行治疗,做好生活调理才能有效阻断胃癌的发生。1细嚼慢咽如果吃饭的时候速度太快的话,会无形中咽下太多的气体,易导致嗳气和消化大肠杆菌的超级马达,你能相信这东西真的是自然进化出来的吗?你能相信这东西真的是自然进化出来的吗?在你体内的大肠杆菌上,隐藏着一个每分钟高达两万转的超级马达。其速度甚至远远超过人造机械发动机,而其内部结构更是经历到离谱。包括转子定子驱动轴转CBA广东队新消息2大外援敲定,2大顶薪合同球员确定,赵睿可惜CBA广东队最新的三大消息,现在广东队肯定非常着急,因为新赛季的比赛呢,将会在十月份开打,目前杜锋还带领着国家队在准备比赛,所以俱乐部,想调整出最强的阵容去准备接下来的比赛,肯定也稻盛和夫想的越多越内耗,你只管努力就好得到幸运和成功绝不是结果,因为应对的态度不同,人生的结果将迥然不同。稻盛和夫本文精选了稻盛和夫著作人为什么活着利他的经营哲学企业成长战略(机械工业出版社出版)京瓷哲学人生与经营的起气候预测进入冰核世纪!深度学习或大幅提高预报准确性气候模型的这一最新进展可能大幅提高气候预测和天气预报的准确性。(图片来源GettyImages)研究人员利用深度学习,以前所未有的精度建模模拟大气中的冰晶是如何形成的。该论文本周发重磅,陶汉林搭档遭王晗雪藏,天骄之子被深度挖掘,终极名单确定对于一支职业球队来说,主帅就是天子,球员就是臣,要想得到天子的青睐,就必须依靠自己的实力。就在近日的CBA热身赛,山东男篮获得大胜,但陶汉林的搭档贾诚,却遭到了王晗的雪藏,只能证明深度2800亿美元芯片法案,究竟安的什么心?每经记者朱成祥王晶曾经的自由贸易倡导者,如今却把产业当作地缘政治工具,大搞经济胁迫。北京时间8月9日晚间,美国总统拜登正式签署2022芯片与科学法案(以下简称芯片法案)。该法案整体为什么很多人都聪明绝顶,却生活在社会底层呢,是他们不努力吗?因为他们从出生就被愚弄了。赚钱是一项家庭研究。他们的父母在社会竞争中是失败者。他们能给孩子什么有用的东西?无非就是教孩子不惹事,听话乖巧,吃亏是福,等等。教出来的孩子都是合格的消耗深度挖掘关键词的实操亚马逊站内的流量大部分来源于对关键词搜索,一个产品可能会有多个关键词,准确的关键词会大大提升产品的转化率,那么如何获取精准的关键词呢,今天小编就来讲解一下,希望可以帮助到大家。一。以数字技术赋能经济高质量发展数字经济事关国家发展大局。当前,我国面临世界百年的技术与产业创新之变大国竞争格局之变国际经济治理之变,抢抓数字经济新机遇培育创新发展新动能,是立足新发展阶段贯彻新发展理念构建新发展