草庐IT

从“预见”到“遇见”SAE 引领应用步入 Serverless 全托管新时代

Serverless社区 2023-03-28 原文

——黛忻 阿里云SAE产品经理


近年来,企业的数字化随着互联网的普及发展越来越快,技术架构也是几经更迭,尤其是在线业务部分。从最初的单体应用到分布式应用再到云原生应用,出现了进阶式的变化。

带来便利的同时,也给企业带来了一定的复杂度:新技术上手门槛高,容器和微服务就是两个典型的拦路虎。即便微服务化和容器化后,企业依然需要关注服务器配置和运维、容量评估,还要面临高性能和稳定性的挑战,无法享受云带来的最大价值。


Serverless 的出现,带来了跨越式的变革。为企业数字化转型带来了更多机遇。在此模式下,服务器和操作系统的管理部署、运维、资源分配和扩缩容等全部由云厂商提供,计算能力真正像水电煤一样被提供。它能够将原先在传统应用环境中的通用能力转化成云服务,客户可以低成本、高效率地触达。

Serverless 最重要的价值可以归纳为三点:

  1. 通过基础设施解耦、极致弹性和故障自动处理等,提供永远在线的服务,无须担心宕机。

  2. 通过高效的研发框架以及 DevOps 新形态,做到秒级市场响应。

  3. 抹平了头部互联网公司与传统企业之间技术竞争力的代差,让传统企业面临大量技术升级和重构时,能够从容不迫,不会出现人才缺口,甚至能够弯道超车。


阿里云 Serverless 应用引擎(简称 SAE)初衷是让客户不改任何代码,不改变应用部署方式,就可以享受到微服务 + K8s + Serverless 的完整体验,开箱即用免运维。

作为业界首款面向应用的 Serverlss PaaS,自 2018 年推出以来,受到了广大用户的一致好评,各行各业企业客户的生产环境都在 SAE 上稳定运行。

SAE 产品定位:全托管、免运维、高弹性的通用 PaaS 平台。支持开源微服务 / 开源定时任务框架 / Web 应用的全托管,提供开源增强 & 企业级特性。可以说 SAE 覆盖了应用上云的完整场景,是应用上云的最佳选择。

Serverless 微服务作为当今业界非常火热的名词,较为广泛的定义为:CI/CD 流水线,加上内置的高效能研发框架,再加上屏蔽基础 IaaS 层或 K8s 底座,并且提供了端到端的可观测能力,以及一些自动弹性和流量治理服务。

而阿里云的 SAE + MSE 可以称作 Serverless 服务的最佳实践。基于 SAE ,以应用为中心,在 SAE 的应用启动过程中内置 MSE 的 agent ,即提供了一整套微服务的能力。加之其底层天然屏蔽了 K8s 底座,提供了一套无服务器的架构,因此可以将 SAE + MSE 看作 Serverless 的最佳实践。

同时能够做到 100%拥抱开源并回馈开源,因为 MSE 团队做了大量开源布道以及在开源基础上做了非常多增强。基于这套 Serverless 微服务的最佳实践,能够使开发效率提升 70%,成本降低 60%。

SAE 的弹性能力相对于 ECS 或 K8s 来说,弹性指标更丰富,弹性策略更灵活,主要提供了三种弹性策略。

  1. 监控指标弹性:在开源 K8s 基础上增加了面向业务侧的弹性指标,如 QPS、RT、TCP 的连接数等,基于这些业务指标来精准地实现弹性,整体弹性容量的预估会更加精确。一般适用于有突发流量或典型脉冲的场景。

  2. 定时弹性:定时设置扩/缩容时间,扩/缩容到多少个实例。同时,SAE 提供了白屏化的操作,相比于开源的 K8S 需自实现 HPA Controller 更简单。

  3. 混合弹性(业界首款):基于定时弹性和指标弹性混用的弹性策略。很多客户的业务都有潮汐特性,且会伴随流量突发,比如视频直播等场景。因此,基于监控指标弹性做兜底,再针对固定时间段的流量峰值叠加定时弹性作为增强的方案,仅一条策略就实现不同时间段内定时弹性或监控指标弹性的精细化弹性需求。


电商类、新零售、互娱行业等往往会出现一些不可预期的突发流量。以往一般通过提前预估峰值,按照峰值保有固定的 ECS 资源来应对,但时常会出现容量预估不准,导致资源浪费或不足的情况,更重要的是会影响系统的 SLA 。

而采用压测工具加 SAE 的方案之后,可以根据压测结果精准地设置弹性阈值,与 ARMS 的实时监控指标做对比,系统会自动进行扩缩容操作,无须再做容量规划,极大节省了硬件成本,实现了秒级的弹性效率,可以轻松应对峰值大考。在紧急情况下,还能够通过限流降级的杀手锏来避免应用雪崩。

SAE 提供了高效闭环的 DevOps 体系,它完整地覆盖了从开发态到部署态到运维态整个闭环过程。

它提供了三种企业级 CI/CD 持续集成解决方案:

  1. 无缝对接开源 CI/CD 工具 Jenkins:通过内置的 Maven 插件,可以完成从 source code 到构建到整个部署的完整过程。它能够支持 war 包、jar 包和镜像部署等几种模式。

  2. 云上功能最全的 CI/CD 方案:它与 Jenkins 的区别在于,可以将代码直接托管到云上,由云效来完成代码托管。还能够做到代码侧的安全管理,可以定制流水线,提供完整一致的构建运行的环境。它的功能比较齐全,一般适用于中型规模的企业。

  3. 最轻量、最易用的 CI/CD 方案:通过容器镜像服务来完成 SAE 的部署。它的轻量在于通过 webhook 将代码仓库打通,在容器镜像服务上定制一些构建镜像和触发器的规则,在代码提交时能自动构建和部署。如果使用企业级的容器镜像服务,还能实现镜像的安全扫描、防漏洞、全球多域分发等能力。

SAE 和 ECS 混部方案主要适用于两种场景:

场景1:从 ECS 陆续迁移到 SAE 的中间过渡方案,能够提升迁移过程的稳定性。

场景2:将 SAE 完全作为弹性资源池作备用。

此方案需要保证同个应用的 ECS 实例和 SAE 实例都能挂载到同一 SLB 的后端,设置好权重比例。如果是微服务应用,还需注册到同一个注册中心。另外,客户侧也需要做一些适配:复用客户自建的发布系统,需要保证每次发版时 SAE 的实例和 ECS 的实例版本一致;复用客户自建的监控系统,需要将 SAE 的监控数据和 ECS 的监控数据整合在一起。流量高峰到达时,弹性模块会将弹性实例弹到 SAE 上,极大提升了弹性扩容效率,也降低了成本。

四个新特性,延展 Serverless 新边界

01.支持 Terraform


作为国内外大客户首选的云上工具,Terraform 的价值在于基础设施即代码,能够自动配置基础设施,帮助企业更高速、更低风险、更低成本实现云应用程序的开发、部署与扩展。极大提高自动化运维效率。

SAE 接入 Terraform 之后,开发人员无需理解每个 API,提供声明式 IaC,操作 SAE 的资源更加安全,对接 CICD / GitOps 也更加简单。更重要的是提供了资源编排能力,能够一键式的部署 SAE 以及依赖的云资源,从 0 到 1 建站效率大幅提升。目前多个互联网客户已经在生产环境中使用。

02.提供了 PHP 的一站式应用托管

提到 PHP 运维,大家熟知的是各种商业版的服务器运维面板。但这些面板只支持单机运维、缺少监控和秒级自动弹性能力,不支持静态文件增量更新,对体量稍大一点的 PHP 应用并不友好。

针对以上痛点,SAE 提供了一个免运维、高弹性、无缝集成 APM 监控的 PHP 应用全托管服务。

在框架上,支持 laravel,ThinkPHP,Swoole、wordpress 等流行框架。

在运行环境方面,支持在线应用架构 LNMP,默认提供 PHP-FPM + Nginx。支持 Docker 镜像和 PHP zip 包部署,大大降低了用户使用门槛。

PHP 应用托管的功能矩阵相当丰富,有开发调试类的上传下载、内置 Xdebug 等,也有运行时类的弹性伸缩,还能通过 NAS 和 OSS 独立管理静态文件和目录。

基于这些能力,非常好地支撑了 PHP 的几个典型使用场景:如静态站点部署,远程调试,多站点部署,存量 ECS/服务器运维面板的应用迁移等。

03.SAE Job 正式邀测


SAE 新增支持了任务类型的负载,开源 XXL job 等任务框架能 0 改造迁移。根据业务数据处理需求,能够在短时间内快速创建大量计算任务,任务完成后快速释放计算资源。具备单机、广播、并行计算、分片运行的特性、定时、失败自动重试、监控报警特性,提供了全托管免运维的用户体验。

区别于传统任务框架,SAE job 使用起来更方便(对代码无侵入)、更节省(任务运行完立即释放资源)、更稳定(和在线业务独立、且任务失败能自动重试)、更透明(可视化监控报警)、更省心(无需关注底层资源)。更重要的是 SAE job 能深度融合微服务生态,兼容开源 K8s。

SAE job 可以广泛使用在定时任务、批量数据处理、离线计算、异步任务解耦、微服务生态集成等场景,欢迎大家第一时间体验试用。

04.SAE 支持事件中心


SAE 提供了非常多的企业级增强能力:比如一键启停开发测试环境、权限隔离/管控,方便客户直接使用。近期还新增了事件中心能力:可通过钉钉、短信和邮件定向给订阅规则的用户发送应用运行时和变更的异常事件,为客户及时响应和自动化运维奠定坚实基础,也是我们区别于开源自建 K8s 的一些使用体验上的差异,真正做到了想客户之所想,急客户之所急。

SAE-云原生先进技术地完美融合

SAE 是云原生先进技术的完美融合:容器化 + 微服务 + Serverless 最佳实践。它的出现帮助 Serverless从专用到通用,打破了 Serverless 的落地实施边界,使得 Serverless 不再是前端全栈、小程序的专宠,后台微服务、批处理任务、SaaS 服务、物联网应用等一样也可以构建在 Serverless 之上,天然适合企业核心业务的大规模落地。真正做到了** “来了就用,功能齐全、用完即停” **的极致体验,帮助企业轻松进入云原生实践的快车道。

更多内容关注 Serverless 微信公众号(ID:serverlessdevs),汇集 Serverless 技术最全内容,定期举办 Serverless 活动、直播,用户最佳实践。

有关从“预见”到“遇见”SAE 引领应用步入 Serverless 全托管新时代的更多相关文章

  1. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  2. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  3. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  4. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  5. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  6. ruby-on-rails - 如何在 Gem 中获取 Rails 应用程序的根目录 - 2

    是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在

  7. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  8. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  9. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  10. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

随机推荐