CSE:阿里在线应用如何演进成Serverless架构

Cloud Service Engine,简称CSE,是中间件部门研发的面向通用Serverless计算的中间件产品,目标是具备AWS Lambda的各种优势,同时可以解决AWS Lambda的关键技术缺陷。

AWS Lambda如果用于核心业务,可能会有以下缺陷:(仅代表个人观点)

  • 要求用户以Function为单位开发,全新的开发框架,云厂商强绑定。社区主流技术栈迁移成本高。
  • Function启动速度要足够快,毫秒级或者秒级,这个限制对适用场景有很强的约束。
  • Function之间的调用通过API Gateway,响应时间更长。

CSE目前在集团内测中,本文非完整产品介绍,Serverless话题涉及范围极广,几乎包含了代码管理测试发布运维扩容等与应用生命周期关联的所有环节。本文主要回答个人在探索这个方向时的思考以及中间件部门正在做的解决方案,目标是尽可能让开发者少改代码,甚至不改代码,就能具备AWS Lambda的技术优势。

我认为的Serverless是什么?

AWS对Serverless的定义

以上观点来自AWS官网 链接

AWS 定义的Serverless包含了哪些功能项

个人的补充观点

个人对Serverless的观点仅在AWS上补充,AWS的整个方案非常完善,但是没有解决存量应用如何迁移到Serverless架构,仅仅针对新开发的应用,建议用户用FaaS方式开发,才有机会变成Serverless架构。

要将Serverless架构大规模推广,必须要能有针对存量业务的解决方案。

Serverless在云计算中的位置是什么?

云计算归根结底是一种IT服务提供模式,不论是公共云还是专有云(以IT设备的归属不同分类),其本质都是IT的最终使用者可以随时随地并且简便快速地获取IT服务,并以获取服务的层次分为IaaS、PaaS、SaaS。目前看IaaS、PaaS都已经做到了按需付费。PaaS甚至做到了按请求付费,如DB,CACHE,MQ等,但是IaaS的付费粒度仍然是时间维度,最快按照小时付费,按照分钟来交付。

基于以上现状,应用的开发维护方式相比传统IDC模式的开发维护差别还不是很大,而AWS Lambda提供了一种全新的方式,只需要用户写业务代码,提交到云上,所有和机器容量,可用性,机器为单位的运维工作全部交给了云平台,这种模式极大的放大了云的弹性价值,真正做到了按需付费。

本文试图提供一种更规模化的解决方案,像AWS Lambda一样,能继续放大云的弹性价值,并且是可以兼容存量应用。

现存在线业务演变成Serverless架构的关键挑战是什么?

当前的在线应用程序具有以下特点

  • 资源分配速度 = 分钟级
  • 应用程序启动速度 = 10分钟+

基于以上客观条件,通常做法是提前预定好机器数量来应对任意时刻的流量峰值,假设上述技术参数变为毫秒级,就有机会将应用程序架构演变成下图所示方式。

上图中Service A在调用Service B时,如果B的容量充足,调用成功,如果B容量不足,这时候可能是线程池满,可能直接触发限流阀值,A会收到一个错误码,A会直接调用资源总控系统,资源总控系统负责新分配一个Service B实例,这个分配的速度非常快,耗时几十毫秒,同时把B的服务地址直接返回给A,A将之前未完成的请求发送到新创建的Service B。

以上过程对于开发者完全透明,具备了以下价值:

  • 价值一:无需管理服务器,意味着无需容量评估,容量评估这件事情对于应用负责人一直是一个极难解的问题,因为我们很难预测未来的峰值是什么。
  • 价值二:持续扩展,之前的做法是每个应用程序独占一定数量的资源,如果变成Serverless模式,意味着所有应用程序共享资源池,也意味着每个应用程序几乎可以无限扩展。
  • 价值三:按照请求计费,因为每个实例的启动时间甚至比FaaS的函数启动时间还快,就可以像FaaS一样来核算成本,成本只与以下因素有关

    • 请求数量(QPS)
    • 每次请求CPU执行时间,例如100ms
    • 每个实例的内存规格

综上所述:为了做到以上描述的分布式架构,关键技术点在于应用启动速度,这里的应用启动速度是指应用可以正常处理流量为止。

如何将应用启动速度加速到毫秒级?

应用在启动过程中通常会初始化多个组件,如各种中间件,各种数据结构,以及网络调用外部服务,在阿里内部广泛推广SOA,微服务情况下,会大量加载共享业务SDK,会存在启动过程达到10分钟量级的情况,个别应用可能会更长。

因此,这个启动过程必须提前完成,才有机会临阵磨枪的方式去创建新实例。

方案一:应用冷启动资源压缩方案

L1弹性能力是指在一台物理机或者大规格的ECS上部署同一个应用的多个实例,通过操作系统和JVM的优化,一个占用4G堆内存的应用,即使部署10份,仅需占用2.2G RAM。以线上菜鸟生产应用为例。

L1总结来看是一种高密度部署方式,由于应用已经提前启动,并且对容器进行冻结,意味着这个应用实例CPU占用率为0,RAM占用相当于之前的1/20,但是具备了毫秒级弹性的能力。L1的特点是启动速度极快,但是需要消耗资源,且只能垂直弹性。

L2是通过将应用程序启动后在RAM中的指令和数据结构 dump到磁盘文件,只需要在机器之间拷贝文件即可以达到横向弹性的能力,这个时间消耗主要是数据的网络传输时间+内存拷贝时间,大约在5秒左右可以完成。L2的成本开销只有网络磁盘容量,开销极低,可忽略不计。

L2的每个SNAOSHOT对应一个可运行的实例,例如预计一个应用需要最大启动100个实例,那么需要提前生成100个SNAOSHOT,每个SNAOSHOT对应一个运行实例,需要启动时,从远程磁盘加载这个SNAPSHOT。

此方案通过L1和L2的组合来达到加速应用启动的目的,在支持一定流量脉冲能力下,可以最大50ms内启动任意应用,平均在10ms内完成。

 

 

 

 

方案二:应用热复制启动加速方案

L1采用通过fork种子进程达到快速启动的效果,操作系统团队专门为此开发了fork2技术,与linux native fork的关键区别是可以指定PID来fork一个进程

    pid_t fork2(pid_t pid);

L2的单个SNAPSHOT可以创建多个进程,一对多关系。

自研两种方案对比

  • 方案二:会存在UUID问题,如开发者希望应用每个实例启动都赋值一个UUID给一个静态变量,而通过fork会导致每个实例的这个静态变量都相同,与开发者预期不符。
    优势是整个方案更易实现,语言无关,成本效果更优。

适合FaaS、盒马NBF这类场景或者开发者自己定义开发框架,能避免UUID这种情况的 场景使用。

  • 方案一:不存在UUID问题,但是每种语言的VM要单独定制,成本效果相比方案二略差。

整体来看,方案一的适用场景更广,但是实现成本更高,方案二较适合FaaS,NBF这类场景。

与AWS Lambda方案对比

Lambda为了做到快速扩缩容,要求用户的应用以Function为单位开发,Lambda Runtime动态加载Function来快速增加实例。

CSE通过将一个应用的多个实例启动后,共享相同的指令数据,抽取出不同的指令数据,每次启动实例只需要加载多实例的差异部分。因此可以透明兼容社区主流技术栈,如Spring Boot,PHP/Java/Python/NodeJS等。

CSE的成本优势

理论模型

Serverless方式应用占用的实例数随时在变化,因此可以多个应用错峰使用同一台机器。

量化分析

Serverless的成本优势是可以和CPU Share&离在线混部等调度技术的成本优势做叠加,能给最终用户一个更优的总体成本。

CSE的代码样例

HSF demo

package com.test.pandora.hsf;import com.alibaba.boot.hsf.annotation.HSFProvider;@HSFProvider(serviceInterface = HelloWorldService.class)
public class HelloWorldServiceImpl implements HelloWorldService {@Overridepublic String sayHello(String name) {return "hello : " + name;}
}

Spring Boot demo

package com.example.java.gettingstarted;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
@RestController
public class HelloworldApplication {@RequestMapping("/")public String home() {return "Hello World!";}@RequestMapping("/health")public String healthy() {// Message body required though ignoredreturn "Still surviving.";}public static void main(String[] args) {SpringApplication.run(HelloworldApplication.class, args);}
}

CSE的成功案例

  • 盒马p0级服务,文描在双十二场景验证中,机器数量从11台到2台(2~10台之间波动)。

3.8女王节的最新数据,盒马导购域的P0级服务流量峰值从4000+瞬间飙到12万,CSE瞬间弹性扩容,从2台-->5台-->10台,流量峰值回落后又缩容到2台。

  • 盒马p0级服务,天气在双十二场景验证中,机器数量从4台到2台(2~10台之间波动)。
  • 1688的buyer-tools应用,之前固定4台机器,serverless化完成后,机器数量变成1台(1~4台之间波动)。预发可实现0 ~ 1台实例之间波动。

CSE的约束和限制

  • 高脉冲型流量业务消耗的成本会更高。
  • 应用尽可能避免后台活动线程的CPU消耗。
  • 应用尽可能无状态。
  • 应用尽可能使用短连接,长链接要能支持断线毫秒级重连能力。

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

郫都区计算机学校,成都郫县好升学的计算机学校有哪些

【郫县好一、成都郫县希望1.成都郫县希望职业学校/招生代码:512632.成都郫县希望职业学校/学校简介:成都郫县希望职业学校学校是由郫都区教育局批准成立的,由希望集团投资创办的一所全日制、专业化的民办中等职业学校, 由郫都区教育局主管。学…

技术大佬:今年还学Python,傻了吧? 网友:就你敢说!

随着AI的兴起,Python彻底火了。据Stack Overflow调研报告:Python的月活用户已超越了Java、成为第一,全民Python已为“大势所趋”。那么,程序员有必要追捧Python吗?Python的真香是真香吗?技术大佬&#xff1…

基于Tablestore的Wifi设备监管系统架构实现

Wifi设备监管 某知名跨国公司,在全球范围内拥有大量园区,园区内会有不同部门的同事在一起办公。每个园区内都要配备大量的Wifi设备从而为园区同事提供方便的上网服务。因此,集团需要一套完善的监管系统维护所有的Wifi设备。 公司通过监管系…

聊聊安卓折叠屏给交互设计和开发带来的变化

很多年前,前端同学都觉得PC端的适配(兼容处理)难,都认为移动端的时代适配会容易得多,也无需考虑那么多的事情。事实并非如此,移动端的时代同样面临着各种适配的处理。特别是刘海机的出现,前端需…

mybatis批量插入数据到Oracle中的两种方式

文章目录1. 第1种2. 第2种1. 第1种 <insert id"addList" parameterType"java.util.List" useGeneratedKeys"false"> INSERT ALL <foreach item"item" index"index" collection"list"> INTO T_APPLAU…

逻辑运算是计算机实现计算器基础,第1章__计算机的发展与运算基础.ppt

第1章__计算机的发展与运算基础例【1-1】 按照32位浮点数标准格式&#xff0c;求数 N20110.1011101在计算机中表示的形式。 解&#xff1a;N20110.1011101    2000000110.10111010000000000000000 其中&#xff0c;因为浮点数为正数&#xff0c;所以S0&#xff0c; M1011101…

你以为这样写代码很6,但我看不懂

来源 | 沉默王二责编| Carol封图| CSDN│下载于视觉中国为了提高 Java 编程的技艺&#xff0c;作者最近在 GitHub 上学习一些高手编写的代码。下面这一行代码&#xff08;出自大牛之手&#xff09;据说可以征服你的朋友&#xff0c;让他们觉得你写的代码很 6&#xff0c;来欣赏…

在闲鱼,我们如何用Dart做高效后端开发?

背景 像阿里其他技术团队以及业界的做法一样&#xff0c;闲鱼的大多数后端应用都是全部使用java来实现的。java易用、丰富的库、结构容易设计的特性决定了它是进行业务开发的最好语言之一。后端应用中数据的存储、访问、转换、输出虽然都属于后端的范畴&#xff0c;但是其中变…

解决 mysql>com.mysql.jdbc.PacketTooBigException: Packet for query is too large (12073681 > 4194304)

com.mysql.jdbc.PacketTooBigException: Packet for query is too large 异常解决办法&#xff1a; 原因&#xff1a; 查询出的数据包过大&#xff0c;默认情况下mysql 的字段容量不够装&#xff0c;所以抛出此异常 解决办法&#xff1a; 第一步&#xff1a;首先通过SQLyog客…

MySQL8.0 - 新特性 - 安全及权限相关改进

MySQL8.0里引入了不少关于权限的改动&#xff0c;从这些改动可以看出来&#xff0c;权限管理更加的规范和遍历了&#xff0c;这和我们之前为rds mysql增加了大量权限管理很类似&#xff0c;想来Oracle也是通过这些改动为其云业务服务的吧。 本文主要简述下部分相关的权限改动&…

08服务器许可证安装向导,08_安装部署GRID许可证服务器.pdf

在GRID 2.0 时期NVIDIA 引入了License 机制&#xff0c;所以我们在测试和生产环境部署的过程中需要搭建License 服务器&#xff0c;以确认VGPU 虚拟机可以正常获取授权和工作。目前GRID License服务器的版本为NVIDIA-ls-2015.12-0001 (支持Windows 和Linux 两个平台)&#xff0…

MySQL数据库无完整备份删库,除了跑路还能怎么办?

来源 | 阿丸笔记责编| Carol封图| CSDN│下载于视觉中国“删库跑路”这个词儿&#xff0c;经常被挂在嘴边当玩笑&#xff0c;是因为大家都知道&#xff0c;一旦真的发生这样的事情&#xff0c;企业损失是无比惨重的。本文作者为 CSDN 博客的一位博主&#xff0c; 从他的描述中得…

全面剖析 Knative Eventing 0.6 版本新特性

前言 Knative Eventing 0.6 版本已经于5月15号正式发布。相比于0.5版本&#xff0c;此次发布包含了一些重要特性及更新。针对这些新特性以及更新&#xff0c;我们如何快速、精准的定位主要技术点。本篇文章针对这些进行技术剖析&#xff0c;希望能让大家更好的理解此次发布的重…

Java实体类去掉属性值空格

在使用Oracle数据库时经常出现数据库char字段被空字符填充的情况&#xff0c;在写业务代码时需要对字段进行处理&#xff0c;BeanHelper.beanAttributeValueTrim(object); public class BeanHelper {public static void beanAttributeValueTrim(Object bean) throws Exception…

用友u8服务器优化,用友U8v10.1运行速度慢的问题及解决方法

一、系统环境&#xff1a;操作系统&#xff1a;Microsoft windows server 2008 R2 64位数据库&#xff1a;SQL 2008 r2 64位ERP:U8V10.1 64位硬件配置&#xff1a;IBMX3850 16核(2颗8核) 内存32G阵列&#xff1a;IBM3512(硬盘转速15000/s)用了虚拟化&#xff1a;虚拟了一台机器…

区块链和大数据一起能否开启数据完整性的新纪元?

作者 | Vijay Singh Khatri译者 | 天道酬勤 责编 | 徐威龙封图| CSDN 下载于视觉中国每当提到区块链一词时&#xff0c;许多人都会将其与比特币等加密货币联系起来。这项技术通过加快交易速度、提供隐私和透明以及其他更多功能&#xff0c;确实改变了虚拟货币的世界。但是&…

开发函数计算的正确姿势——tensorflow serving

前言 首先介绍下在本文出现的几个比较重要的概念&#xff1a; 函数计算&#xff08;Function Compute&#xff09;: 函数计算是一个事件驱动的服务&#xff0c;通过函数计算&#xff0c;用户无需管理服务器等运行情况&#xff0c;只需编写代码并上传。函数计算准备计算资源&am…

Knative Eventing 中如何实现 Registry 事件注册机制

背景 作为事件消费者&#xff0c;之前是无法事先知道哪些事件可以被消费&#xff0c;如果能通过某种方式获得哪些 Broker 提供哪些事件,那么事件消费者就能很方便通过这些 Broker 消费事件。Registry 就是在这样的背景下被提出的&#xff0c;通过 Registry 机制&#xff0c;消…

Java实现首字母大写、驼峰命名与、划线转换,校验null

/*** 首字母转大写、驼峰命名* * param s 待转换的字符串* return 转换结果*/public static String initialToCapital(String s) {StringBuilder sb new StringBuilder();if (s null || s.trim().isEmpty()) {return sb.toString();}if (s.length() < 1) {return sb.appen…

带出7个“师弟”,支付宝BASIC College的辅导员是个伪90后

“我的花名是改之&#xff0c;不是‘有则改之无则加勉’的改之&#xff0c;而是‘杨过&#xff0c;字改之’的那个改之。”一见面&#xff0c;他对自己花名的介绍&#xff0c;就让人耳目一新。至于为什么要用杨过的字给自己起名&#xff0c;他也毫不扭捏地坦诚相告&#xff1a;…