作者:陈涛(毕衫)
内容简要:
一、微服务架构的优点和痛点
二、全面Serverless时代下的解决方案
三、SAE的技术原理和极致弹性建设
四、总结和展望
一、微服务架构的优点和痛点
(一)、微服务架构诞生背景
互联网早期的时代,也就是Web1.0时代,当时主要还是一些门户网站,这时候主流的应用还是单体应用,研发团队也相对较小,这个时候的挑战在于技术的复杂度,包括技术人员的相对匮乏。
后续到达了新世纪互联网时代,此时已经出现了较大规模的一些应用,包括社交、电商等,这时候已经出现了流量的激增,包括业务复杂度也大增,已经出现了几百甚至上千人的一个研发团队,研发团队之间的协作也已经很成问题。
在那个时代相信大家都听说过SOA这个解决方案,它的核心其实也在于分布式、拆分等等,但是它可能因为还是有ESB这样的一些单点的组件,所以没有得到很好的推广,而阿里巴巴在当时推出的HSF包括开源的Dubbo等技术,其实也是类似分布式的一个解决方案,这时已经有了微服务架构的理念。
微服务架构正式名称的诞生,还要到下一个阶段,也就是移动互联网时代,在这个时代生活已经全面互联网化,各种各样的生活APP都已经出现,这时候的网民以及流量复杂度相对于上一个时代有了更大的增强。
另外,较大规模的研发团队也已经成为主流,这时候大家普遍都对效率有了更高的追求,而不是原来只有几个巨头需要有这方面的技术。而这时候微服务架构以及微服务技术的一些推出,包括Spring Cloud、Dubbo等框架的普及,极大地将微服务的技术推广开来。
近些年已经进入全面的数字化时代,社会进行全面的互联网化,各种各样的单位,包括政企,包括一些相对传统的单位都需要比较强的研发能力,这时候也许流量的挑战不是最大的,但是这些相对一些传统业务的复杂度挑战还是足够大的,而且研发团队也仍然足够大。
所以在这里面,大家还是有效率的要求,这相当于使微服务架构得到了进一步的推广和普及。
(二)、微服务架构的优点
我们看到,微服务架构经过这么多年的发展,是一个经久不衰在持续发展的技术,那么它为什么能够有这样一个持续的发展呢?我们可以回顾一下它和单体架构的区别以及它的核心优势。
我们可以看到,单体架构核心的问题主要在于冲突域太大,包括共享代码库,大家在研发的过程中特别容易冲突,边界不清,模块的规模也不清,包括团队效率也会大幅降低。在微服务架构下,它的核心就在于拆分,包括解耦了研发态,解耦了部署态,极大释放团队的研发效率,大道至简,这也是微服务的架构为什么能够持续发展的一个原因。
(三)、微服务时代痛点
根据复杂性守恒定律,我们解决了一个问题,问题会以另一种形式出现,我们又需要去解决。
可以看到,微服务时代下会引入非常多的一些痛点,核心的就是稳定性。因为从原来的一些本地调用改成远程调用以后,可能会发生稳定性的点就激增,包括调度放大,也就是说可能因为底层的一些远程调用的问题,造成上层的一些不稳定,以及我们需要做的限流降级,调用链等等。
而且在微服务时代可能定位一个问题的复杂度,也呈指数式增长,这里面大家可能还需要服务治理。另外如果没有较好的设计和预先的一些设想,可能微服务应用的爆炸,包括研发人员和测试人员之间的协作也都会很成问题。
微服务技术经过这些年的发展,业界其实已经有了一些解决方案。
如上图所示,如果要比较好地玩转微服务技术,大家除了开发自己的业务系统以外,可能还要配套搭建这么多系统,包括CICD、发布系统,研发流程、微服务组件相关的一些工具,及可观测性相关的实时监控、告警系统、服务治理、调用链等,以及还需要运维基础的IaaS资源。在现在这个时代,大家为了更好的运维IaaS资源,可能还需要自己维护一个K8s集群。
所以说在这样的背景下,很多企业会选择搭建一个运维团队或者中间件团队,或者说由一些后端研发同学兼职,但试想有多少企业对自己内部搭建的这套系统是满意的,它的迭代效率是多少,它有没有踩到过一些开源的坑,包括这些坑现在有没有解决,还是大家在持续忍受,我想这应该是在企业的CTO架构师当中一个持续的痛点。
二、全面Serverless时代下的解决方案
(一)、Serverless时代
接下来我们看一下基于上述痛点下的Serverless时代下的解决方案。
先简单介绍一下Serverless时代的发展历程,从2012年第一次提出Serverless概念,到2014年推出了Lambda产品,它短暂达到了一个影响力的顶峰。
但是这样的一个新生事物突然到真实复杂的生产环境,它其实有许多的不适应,包括需要改善的地方,所以后续几年它又进入一个低谷,但是Serverless理念是将简单交给用户,复杂留给平台,这是非常正确的一个方向。
所以说在开源界包括业界,其实都在持续性进行Serverless方面的一些探索和发展。阿里云在2017年推出了Function,在2018年推出了SAE,在2019年后持续在Serverless领域进行投入,支持了镜像部署,预留实例,包括微服务的场景等。
(二)、Serverless市场概况
我们再来简单的了解一下Serverless市场的概况。
在2021年最新的Forest评测中,阿里云Serverless产品能力中国第一,全球领先,阿里云Serverless用户占比也是中国第一,这侧面说明了阿里云Serverless已经越来越多的进入到企业真实的生产环境中,越来越多的企业认可了Serverless以及阿里云Serverless的能力和价值。
回到我们之前的那一张图,可以看到在传统的微服务架构下面,企业要用好微服务相关的技术,需要自己研发非常多的解决方案,那么在Serverless时代下的SAE这个产品里面,它是怎么解决的?
(三)、SAE整体解决方案
我们可以看到SAE将Serverless这个理念发扬到了极致,不仅仅托管了IaaS资源,包括上层的K8s,另外还集成了白屏化的PaaS以及企业级微服务相关的套件,包括可观测相关的套件。
在SAE整体解决方案里面,针对这些都进行了很好的集成,给用户提供了一个开箱即用的微服务解决方案,让企业和开发者能够很简单地使用起微服务,具体SAE各个模块是怎么解决微服务相关的一些门槛,我们下面一一展开阐述。
(四)、SAE整体解决方案-0门槛PaaS
首先是0门槛PaaS这个模块,可以看到SAE在最上层给用户提供了一个白屏化的操作系统,它的设计理念非常符合企业一般的PaaS系统,包括发布系统或者一些开源的PaaS系统,这样极大降低了企业上手SAE的门槛,甚至可以说0门槛,包括它也集成了阿里巴巴最佳的一些发布实践,发布三板斧,可灰度、可监控、可回滚等。
另外,它也提供了一些企业级能力的增强,包括命名空间环境隔离,细粒度的权限控制等。在上图右边可以看到在一个企业里面,如果有两个相互比较独立的模块,完全可以通过命名空间进程进行隔离。
(五)、SAE整体解决方案-微服务治理增强
在微服务治理增强方面,特别是在Java语言,SAE采用了一个Agent,对用户来说相当于是无侵入、无感知、零升级,而且这个Agent全面兼容开源,使用户几乎在无修改的情况下,就可以使用无损下线,API管理、限流降级、链路追踪等能力。
(六)、SAE整体解决方案-前后端全链路灰度
这里展开两个能力,第一个能力是前后端全链路灰度,SAE借助前面提到的Agent的技术,从Web请求到网关,到Consumer,到Provider进行了全链路的打通,使用户可以很简单地白屏化配置,就可以实现一个灰度发布的场景,而这样的技术如果企业需要自建,相信这里面的复杂度大家应该是非常清楚的。
(七)、SAE整体解决方案 - CloudToolkit端云联调
第二点就是CloudToolkit的端云联调,大家都知道微服务的场景下面应用数量是呈现爆炸的趋势,如果我本地需要开发,都需要启动那么多的一些应用,我如何能够安全并且联调云上的一个服务。
现在借助于CloudToolkit,在Idea包括Eclipse这样的IDE里面提供了插件,用户可以很简单地在本地打通云上的环境,进行端云联调,极大降低开发测试的门槛。
(八)、SAE整体解决方案-强大的应用监控&诊断
前面介绍了在微服务的场景下,因为微服务的急剧发散,调用链路的极度增长,那在有问题的场景下面,定位问题是非常复杂的。
SAE集成了阿里云各种各样可观测的产品,包括普罗米修斯、基础监控等等,在Tracing、Logging、Metrics等方面都提供了丰富的解决方案,包括请求链路的查询,常用诊断场景的指标分析,基础监控,实时日志,事件通知等等,极大降低企业在微服务台运行场景下的一些市场定位问题。
三、SAE的技术原理和极致弹性建设
(一)、SAE整体解决方案
接下来介绍SAE的技术原理和极致弹性建设。
还是回到这张图,前面我们已经针对三部分,也就是0门槛PaaS、企业级微服务套件、可观测进行了一个讲解。现在要介绍Serverless的一个核心模块,也就是IaaS层的免运维以及弹性能力的建设。
(二)、SAE业务架构
我们看一下上方SAE的业务架构图,就可以相对比较清晰地看出,在SAE里面IaaS资源包括存储、网络等等是不需要用户关心的。
另外SAE也托管了K8s PaaS层的一个组件,相当于用户也不需要自己去运维一个K8s,在K8s之上SAE提供了微服务治理,应用生命周期管理等增强的能力。
另外在弹性方面,SAE的弹性能力达到了15秒,我相信在很多企业级场景下已经足够开发者较好的应对一些突发流量情况。另外通过一些多套环境以及一些最佳实践,可以达到一个降本增效的效果。
(三)、SAE技术架构
那么SAE是怎么建设免运维,对用户来说相当于不需要托管的Iaas资源以及K8s资源。
在这里我们可以看到,SAE底层采用了一种安全容器的技术,相比于runC场景下的Docker,安全容器相当于提供了虚拟级别的安全解决方案。在runC场景下,由于共享内核,其实在公有云产品上,A用户有可能穿透到B用户的一个容器内,造成一些安全风险。
采用安全容器的技术,也就是虚拟机相关的安全技术,达到了生产级别的安全隔离,包括安全容器也兼容了K8s以及容器的生态,这样安全容器加容器生态的结合,就实现了较好的安全加效率的平衡。
另外,在存储和网络的隔离方面,SAE不仅仅需要考虑传统K8s上的网络隔离,也需要考虑在公有云产品下,大部分用户已经在公有云上有非常多的一些存储资源、网络资源,也需要进行一个打通。
SAE是采用了云产品的ENI网卡技术,将ENI网卡直通到了安全沙箱内,这样相当于用户不仅仅实现了计算层的隔离,也实现了网络层的打通。
(四)、SAE技术架构
刚才提到的安全容器技术,可以看到现在主流的安全容器技术有Kata、Firecracker、gVisor等等,在SAE里面采用了最早也是最成熟的Kata技术来实现计算层安全的隔离。另外,安全容器不仅实现了安全隔离,也实现了性能隔离和故障隔离。
举一个比较好理解的例子,在runC大家共享内核的场景下,一个用户的Container造成了一些内核的故障,是直接可能影响到物理机的,在SAE使用安全容器基础上就没有这方面的风险,最多只会影响到那一个安全容器。
(五)、极致弹性 极致成本
前面分享了SAE Serverless场景下的安全隔离,包括网络隔离和联通的核心技术,接下来分享一下在弹性能力、弹性效率方面建设以及一些技术原理。
可以看到如果弹性效率达到了极致,用户的成本也可以达到极致。通过左右两边图的对比,大家可以非常理解,弹性对用户成本可以达到的效果。
(六)、SAE极致弹性建设:部署&重启
那SAE在弹性方面做了哪些事情呢?
可以看到传统的K8s的一个Pod的创建过程需要经过调度,init container创建,拉取用户镜像,创建用户容器,启动用户容器,应用运行等等阶段。它虽然符合K8s的设计理念和规范,但是在生产环境下,对一些追求效率的场景,其实就不太满足企业级的要求。
SAE借助于阿里巴巴开源的OpenKruise里面的CloneSet组件的原地升级策略,相当于不需要重建整个POD,而只需要重建里面的Container,省去了调度以及Init container创建的一个过程,部署效率达到了42%的提升。
(七)、SAE极致弹性建设:弹性扩容
另外在镜像预热场景,我们也实现了一个并行的调度,可以看到在标准的场景下,调度道路拉取倾向是一个创新的过程。
我们做了一个优化,就是在识别到Pod即将调入到哪个物理机的时候,我们就会并行地开始拉取用户的镜像,这样也可以达到弹性效率30%的提升。
(八)、SAE极致弹性建设:Java启动加速
在应用启动这个阶段,我们也做了一些弹性效率能力提升的事情,典型的比如说Java的应用,在Serverless场景下其实一直有启动慢的痛点,核心在于Java需要一个Class的加载。
在一些企业级的应用里面,针对成千上万的Class的加载,这是一个相对较缓慢的过程。那SAE结合阿里巴巴开源的Drangonwell 11,实现了AppCDS的技术,它会在应用第一次启动的时候,将Class加载打到一个压缩包中,后续的应用加载,只需要加载压缩包即可,免去了大量Class的初始化的加载,实现了部署效率45%的提升。
(九)、SAE极致弹性建设
在应用运行态,我们也做了一些弹性方面的增强。
我们都知道微服务的应用通常会需要配置非常多的线程,这些线程通常和Linux的底层线程是一一对应的。在高并发场景下,这里面就会有较大的线程切换的开销。
SAE结合阿里巴巴开源的Drangonwell Wisp携程的技术,将上层的几百个线程对应到了底层的十几个线程,极大降低了线程切换的开销。
上图是我们一个压测的数据,红线就是使用了Drangonwell Wisp的技术,可以看到运行效率有20%左右的提升。
以上就是SAE在Serverless、IaaS托管以及K8s托管方面,以及在弹性效率方面建设的一些技术原理和效果。
四、总结和展望
最后再进行简单的总结和展望。
我们可以看到SAE相当于从原来微服务用户需要自建非常多的组件,包括PaaS微服务一些技术框架,运维IaaS、K8s、可观测组件等等,SAE针对这些方面都做了整体的解决方案。
用户只需要关注自己的业务系统,极大地降低了用户使用微服务技术的门槛,后续SAE针对每个模块也会持续的做能力的建设。
首先,在0门槛PaaS方面,微服务会持续的做一些云产品的集成,包括CICD工具链,另外也会做企业级的能力增强,比如审批流。另外在Serverless免运维极致弹性方面,我们也会提供越来越多的弹性能力,弹性指标,包括弹性效率,我们也会持续的建设。另外也会提供类似AI预测这样弹性的解决方案,降低用户设置弹性指标的时候的心智负担。
另外在微服务生态方面,我们也会和微服务的企业套件做更多的集成,进一步降低大家使用微服务技术的门槛,比如说混沌工程,远程调试能力增强等等。
最后在可观测方面,SAE相当于运维了用户的应用,那么可观测对于SAE本身或者说对平台本身也是一个非常重要的能力,在这方面我们会持续做相应的一些监控告警,包括预案和灰度建设等等。
另外对用户来说,用户也需要相当于在SAE上托管它的应用,我们也需要降低用户在使用这方面的门槛,我们后续会建设应用大盘、事件中心等。