陈冰心,腾讯云产品经理,负责超级节点迭代与客户拓展,专注于 TKE Serverless 产品演进。
Serverless 炙手可热,被称为云原生未来发展的方向。信通院报告显示:在核心业务中使用 Serverless 的用户占到18.11%,已经开始和计划使用 Serverless 技术的用户超过了70%。Serverless 广受追捧,得益于它在“快速的开发交付”、“极高的运维效率”、“极低的资源成本”这三个方面上的优势。
Serverless 可以让业务更快上云,让用户用最小的运维投入享受云带来的便利性。底层资源规划及运维交给更专业的云平台处理,使用户可以更专注业务和产品本身,从而更好地提升产品和业务的核心竞争力。
Serverless 的优势如此明显,但在实际落地使用中,无论是云厂商还是用户,均处在摸着石头过河的阶段,仍在不断学习不断试错,主要原因是 Serverless 在带来便利性的同时,也打破了传统 Serverful 模式下的种种用户使用习惯,对企业各个组织均造成了冲击;其先进的产品形态在老的架构上又引入了较高的适配复杂度。具体表现在:
我们仍然认可 Serverless 模式下不可替代的优势并且坚信这些优势最终能够帮助企业提升效率,在 Serverless 渐进式演化的过程中,我们思考的是,在当下如何找到 Serverless 和 Serverful 的中间态,让用户在资源可控度和运维简化间找到一个平衡,用更小的代价获得 Serverless 的收益,由此我们提出了 HouseKeeper 的理念,构造了全新的节点产品形态,以求平衡 Serverless 与 Serverful,靠近传统 Serverful 的形态下,我们孵化出云原生增强型的 Serverful节点 - 原生节点 ,那么在靠近 Serverless 的一边,又能做些什么呢,我们给出的完美答案是有节点的 Serverless 服务 - 超级节点。
超级节点是基于 Serverless (此处亦可称 Nodeless)容器技术,模拟 Serverful 有节点管理体验的新的集群节点形态。有 pod 强隔离高稳定、Node 免运维、精确配置资源、兼顾资源可控性与使用便捷性等特点。适用于希望降低运维负担、提高资源装箱率且不想改变运维模式的企业渐进式 Serverless 化。我们期望通过迁移式的使用体验,让用户在不改变自身架构、不影响财务核算的前提下,切实体验到 Serverless 的便利。
如下总结了超级节点的特点:

超级节点向用户提供可用区级别的、支持自定义规格的节点能力,使用超级节点类似于使用一台超大规格的 CVM,每一个调度至超级节点的 pod 都是一台独立的子机,pod 间因此完全隔离,使业务具有极高的稳定性和安全性。在节点维度支持了按量计费和包年包月两种计费模式,包年包月的资源可以在保障资源供给的基础上以较低的价格交付用户,如果需要进行固定资源的扩缩容,仅需要对这台“超大规格的 CVM”进行升降配,资源管理变得更为简单。
在产品能力上,超级节点针对兼容 TKE 标准集群形态做了大量工作,保障用户的业务可以平滑在普通节点和超级节点间无损切换。在底层架构上,超级节点基于腾讯云自研的 Serverless 容器技术,通过安全沙箱、轻量的高性能运行、增强调度器以及高性能网络等保障业务安全稳定地运行。
超级节点承载了内外部共计千万核业务稳定、安全运行,腾讯QQ、会议、文档等业务,公有云小红书、超参数、搜狐、百果园等客户,沿用原运维体系,将大量稳态核心模块部署在超级节点上,包年包月的超级节点模式稳定上线数月,替换了 90% 预留券的使用,新增了数十万核在线常驻业务切换至超级节点。
传统的节点运维管理模式的特点在于:有节点概念,计费维度在单个节点上。其优势在于对无论是对运维来讲还是财务人员来讲,管理完全可控。但缺点也非常明显:
Serverless 模式的特点在于:无节点,以 pod 为资源交付对象和计费对象。其优势在于,完全弹性使用,没有资源浪费,应用部署灵活,无需进行节点运维。这种模式的问题在于:
pod 数比 Node 数高一个量级,资源粒度越细,带来的精确规划成本越高。特别是当企业需要长时间使用 Serverless 资源的时候,当前主流的云厂商给出的解决方案为预留券模式,该模式需要为不同规格的 pod 对应购买相应数量的预留券以抵扣其消耗,需要用户精确地统计每一种规格 pod 的运行数量,pod 规格及运行数量为业务侧动态变化的数据,购买资源却是平台侧的行为,这中间的 Gap 导致平台侧对于资源的购买和维护成本变得极其高昂,这种不优雅的包月实现方式不仅让不应该关心精确资源使用量的人员陷入了困境,也限制了真正的资源使用者,与 Serverless 倡导的轻运维按需使用的初衷背道而驰。
在 Serverless 模式下,计费单元在 pod 上,资源(pod)的生命周期由业务控制,业务的变更将直接带来成本的变化。成本不可控会为企业的财务管理带来极大挑战。除了成本不可控外,成本的核算和业务间的分摊也将变得棘手,传统的节点管理模式下,以节点维度来统计每个业务的使用量,将节点资源的成本消耗与业务挂钩,财务管理清晰简单,而在 Serverless 场景中,预留券的模式下, pod 生命周期各不相同,预留券每小时的抵扣对象也均不相同,从而导致了分账困难,按量计费模式下的资源消耗也需要额外统计。在 Serverless 模式下,资源和成本在传统运维模式下均不易管理,企业的各个组织均需要做出较大改变才能适应 Serverless 在企业内落地。
超级节点模式的特点在于:有节点概念,但无节点运维工作,以 Node 为计费对象,兼容基于节点的运维、财务体系。从而达到了 Serverless 模式的运维简单、资源不浪费和业务部署灵活的特点,也兼顾了 Serverful 模式的成本可控、资源可控。
用户可以像管理一台超大号云主机一样管理 K8s 超级节点。可以通过包年包月的模式申明需要使用的固定资源总规格,后台将预留对应的资源,告别了 Serverless 模式下资源不可见,按量使用资源无法保障的担忧,让用户用得放心。针对固定资源的扩缩容变成了单节点维度的升降配;针对弹性资源的扩缩容,仅需加入按量计费的超级节点,即可按照节点上调度 pod 的实际规格进行计费,再无 buffer 资源浪费。
无需再关注资源利用率,无需考虑调度,超级节点模式下保障资源百分百装箱。在包年包月超级节点、按量计费超级节点与普通节点共用的场景下,调度器会智能优先调度到最合适的资源上,帮助最大化实现资源的有效利用。
Serverless 模式下首创节点维度的包月计费形式,解决了精细化使用资源场景下的资源规划问题、预留券购买问题、财务管理问题。企业只需要计算固定和弹性资源的总使用量,购买合适的包年包月固定资源并配合弹性资源进行使用。预付费的包年包月计费也更适合企业财务部门的资源预算模式。
超级节点底层基于自研 Serverless 容器技术 Heeler,经由内外部千万级规模验证,可以保障业务稳定运行。
超级节点上的一个 Pod 底层对应一个子机,底层为虚拟机级别的隔离,通过自研的安全沙箱技术和虚拟化技术,保证 Pod 间无干扰,业务间强隔离。不会出现节点上Pod间资源抢占的问题,也不会出现单 Pod 故障导致整个节点故障的情况。
完全托管的模式,学习成本低,不依赖专职的 K8s 运维即可轻松部署业务。在日常的运维中,免去了海量的节点维护工作,不需要处理容器隔离性的问题,也极大简化了专业、复杂的资源规划和调度工作。
我们独创了超级节点的包年包月模式,解决了企业运维和财务头疼的问题。包年包月模式下,由用户自定义节点规格,用户可包年包月购买自定义总规格的节点算力来实现预付费,契合固定算力的在线常驻业务,包年包月的超级节点相较于普通节点单核价格更低,用户可将符合规则的 pod 全部迁移至超级节点,来降低固定资源的单核成本,从而达到降本增效的目的。按量计费模式下,可弹性使用节点资源,使用后按节点内实际使用的 CPU 内存按量计费。按量计费模式适用于弹性算力场景,可通过添加按量计费的超级节点,在业务高峰时使用弹性资源,进一步降低集群的资源成本。
超级节点提供标准的 Kubernetes 服务和使用方式,满足绝大部分容器场景下的交付标准,提供了标准的 K8s 编排、运维、扩缩容等的使用方式,保留了 K8s 的扩展性,在基础能力、可观测性、云原生解决方案上均完全兼容 K8s 生态。此外,适配 Nodeless 的 K8s 特性包含:
超级节点适用于全业务场景,尤其适合高稳态业务的运行。支持在公有云或 IDC 的标准 Kubernetes 集群、Serverless 集群中使用,可通过简单的开启方式,将固定和弹性算力调度到超级节点上,其调度模式完全兼容原集群的调度范式,可让原集群平滑进行 Serverless 化或混合云化升级。
优势:高稳定、低成本、易管理 相较于包年包月的普通节点,超级节点单核价格更便宜。对于在线常驻的服务,用户所需算力固定,若当前 pod 规格大部分在 8C 以下,可使用超级节点的包年包月模式,基于 pod 总规格按需购买包年包月的超级节点,将 pod 全部调度至超级节点,降低集群资源的单核价格,实现降本诉求。
优势:高稳定、低成本、高弹性 弹性业务场景下,用户使用按量计费的超级节点,可实现快速秒级扩容,轻松应对突发流量,通过减少预留的资源 buffer 降低成本。高弹性:快速秒级扩容,轻松应对突发流量,业务流量下降后自动销毁 pod,无损缩容。低成本:减少集群预留 buffer,将集群的节点维护在资源利用率更高、使用和预留更合理的水平,节省成本。
在 TKE 集群和 TKE Serverless 集群中均可创建超级节点。进入集群详情页 > 选择左侧菜单栏中的节点管理 > 节点池 > 单击新建节点池,选择超级节点池并填写对应参数即可:

云计算的概念层出不穷,其本质上是对生产关系和生产力的配置与优化,最终达到为使用者增效的目的,在容器化的漫长进程中,企业的观念和行为都在不断变化,但接受和拥抱新技术对于每一个处于进程中的亲历者来说都一定有一个阵痛期,如何帮助用户用最少的代价换取最大的收益,如何能够平衡好优势与矛盾,是每个云厂商应该思考的课题。从完全的 Serverless 到有节点的 Serverless,我认为并不是产品技术的退步,只要能够解决使用者的痛点,为使用者带来切实的价值,我们不应该拘泥于产品的形态,我们走出的这一步,其实是进步的,我们正在走向伟大的创新。
活动倒计时,错过拍大腿!
超级节点大额满减券等你领取!
扫描下方图片二维码进入会场抢优惠!

【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我认为我的问题最好用一个例子来描述。假设我有一个名为“Thing”的简单模型,它有一些简单数据类型的属性。像...Thing-foo:string-goo:string-bar:int这并不难。数据库表将包含具有这三个属性的三列,我可以使用@thing.foo或@thing.bar之类的东西访问它们。但我要解决的问题是当“foo”或“goo”不再包含在简单数据类型中时会发生什么?假设foo和goo代表相同类型的对象。也就是说,它们都是“Whazit”的实例,只是数据不同。所以现在事情可能看起来像这样......Thing-bar:int但是现在有一个新的模型叫做“Whazit”,看起来
我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion
我似乎经常遇到一些设计问题,但我不知道是什么是真的很合适。一方面我经常听到我应该限制耦合和坚持单一职责,但当我这样做时,我常常发现它很困难到在需要时将信息获取到程序的一部分。为了例如,classSingerdefinitialize(name)@name=nameendattr:nameend那么Song应该是:classSongdefnew(singer)@singer=singerendend或classSongdefnew(singer_name)@singer_name=singer_nameendend后者耦合性小,按道理应该用。但如果我以后发现宋有什么需要了解更多歌手,我的
我需要使用ActiveMerchant库在我们的一个Rails应用程序中设置支付解决方案。尽管这个问题非常主观,但人们对主要网关(BrainTree、Authorize.net等)的体验如何?它必须:处理定期付款。有能力记入个人帐户。能够取消付款。有办法存储用户的付款详细信息(例如Authotize.netsCIM)。干杯 最佳答案 ActiveMerchant很棒,但在过去一年左右的时间里,我在使用它时发现了一些问题。首先,虽然某些网关可能会得到“支持”——但并非所有功能都包含在内。查看功能矩阵以确保完全支持您选择的网关-http
我有一个像这样的ruby散列{"stuff_attributes"=>{"1"=>{"foo"=>"bar","baz"=>"quux"},"2"=>{"foo"=>"bar","baz"=>"quux"}}}我想把它变成一个看起来像这样的散列{"stuff_attributes"=>[{"foo"=>"bar","baz"=>"quux"},{"foo"=>"bar","baz"=>"quux"}]}我还需要保留键的数字顺序,并且键的数量是可变的。上面是super简化的,但我在底部包含了一个真实的例子。执行此操作的最佳方法是什么?附言还需要递归就递归而言,这是我们可以假设的:1)
参见下面的示例,我想最好使用第二种方法,但第一种也可以。哪种方法最好,使用另一种的后果是什么?classTestdefstartp"started"endtest=Test.newtest.startendclassTest2defstartp"started"endendtest2=Test2.newtest2.start 最佳答案 我肯定会说第二种变体更有意义。第一个不会导致错误,但对象实例化完全过时且毫无意义。外部变量在类的范围内不可见:var="string"classAvar=A.newendputsvar#=>strin
如果我构建了一个应用程序来访问来自Gmail、Twitter和Facebook的一些数据,并且我希望用户只需输入一次他们的身份验证信息,并且在几天或几周后重置,那会怎样是在Ruby中动态执行此操作的最佳方法吗?我看到很多人只是拥有他们客户/用户凭证的配置文件,如下所示:gmail_account:username:myClientpassword:myClientsPassword这看起来a)非常不安全,b)如果我想为成千上万的用户存储此类信息,它就无法工作。推荐的方法是什么?我希望能够在这些服务之上构建一个界面,因此每次用户进行交易时都必须输入凭据是不可行的。
在Rails中向整数类添加方法的最佳位置在哪里?我想添加一个to_meters和to_miles方法。 最佳答案 如果您决心使用数字(或整数等)类来进行单位转换,那么至少要在逻辑上做到这一点,并具有一些实际值(value)。首先,创建一个Unit类,用于存储单位类型(米、英尺、肘等)和创建时的值。然后向Numeric添加一堆方法,这些方法对应于单元可以具有的有效值:这些方法将返回一个单元对象,其类型记录为方法名称。Unit类将支持一组to_*方法,这些方法将转换为具有相应单位值的另一种单位类型。这样,您可以执行以下命令:>>x=47