榜单精选|沪江向Serverless的演进之路
Posted 壹佰案例
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了榜单精选|沪江向Serverless的演进之路相关的知识,希望对你有一定的参考价值。
本文内容节选自第六届全球软件案例研究峰会沪江高级架构师黄凯分享的《沪江向Serverless的演进之路》实录,重点分享:容器落地以及Serverless应用场景(音频+PPT+文稿)。
编辑:Cynthia
编者按:11月9-12日,第六届全球软件案例研究峰会在北京国家会议中心盛大开幕,现场解读2017年「壹佰案例榜单」。沪江高级架构师黄凯带来《沪江向Serverless的演进之路》的案例分享。
【内容简介】容器化技术在互联网世界已不足为奇,沪江借助Mesos技术成功把核心业务容器化已一年有余,但这远远不是终点。随着微服务和深度学习的兴起,依赖于在容器化的成功经验,沪江已把目光转向了更方便的Serverless架构。本分享着重介绍了沪江已成熟的容器化解决方案,和向Serverless进军的第一步实践。
沪江高级架构师 黄凯
《沪江向Serverless的演进之路》
我是来自沪江的高级架构师黄凯。加入沪江已经两年多了,在这期间我们实现了云计划的落地,现在我们准备向Serverless进军。
为什么要做Serverless的演进呢?
先讲一下我们在云计算落地时发现的问题。为什么要做Serverless的演进呢?因为世界在进步,而我们不能停滞不前。从最原始的服务部署在物理机上,经过了虚拟化,到容器化的时代,最终变成现在的Serverless。技术在不断的迭代,所以沪江在做了容器化落地以后,便迫不及待的想向Serverless演进。
另外,我们发现线上服务器利用率不高。我们看到有时CPU利用率只有11%。Memory只有3%左右。做了一个统计后,发现35%物理机峰值使用率不超过50%。我们要提高服务器的利用率,降低成本。这也是我们为什么要引入Serverless的另外一个原因。
选型
容器在去年经过一年时间的开发或者研究,终于在沪江落地了。容器现在趋势分为MESOS和Kubernetes。MESOS在线上管理30万台的宿主机,Kubernetes由Google支持,且调度方法也很先进,所以现在非常的火热。本来两家是竞争对手,互不相让,但最近Docker公开支持Kubernetes,于是乎所有的资源都向k8s倾斜。沪江经过研究也准备从MESOS向Kubernetes做迁移。
网络
要让容器落地,它最大的挑战在于网络设置。方法有很多,像最原始的Docker的网桥模式,HOST模式,VxLan模式。
我们以Vxlan模式举例:如果容器1想和容器2通信,会通过容器1的虚拟网卡连接到宿主机网桥,然后通过物理二层网络连接容器2的宿主机。再把tcp包解成容器内部网络认识的包发送给容器2。这是VxLan的拓扑图。它有很多厂商做实现,例如flannel或者docker。在产线上我们使用的是Docker提供的Vxlan模式,性能测试下来比flannel高。所以大家建议尝试一下Docper自带的模式。
VxLan虽然落地了,但其效率由于受到软件层封包拆包的影响并不高。而业界公认效率最高的Calico自然成为我们研究的方向。如图可以看出VxLan模式和Calico的IPIP模式在TCP报文上的不同。由于Calico简化了报文的处理,没有了VxLan冗长的报文头,也就不需要分包拆包的过程,效率已经提升了很多,所以在未来发展中我们也会替换成Calico运用产线。
Loadbalance
另外一个是对Load balance的改进,LB和服务注册发现结合,很容易做到无运维上线,目前我们使用consul套件,任何一个应用在MESOS上部署后,会自动注册到consul上,从而反向通知nginx更新应用IP,整个过程无需人工参与。这种模式已经在我们产线上部署了,但是它有一个缺点:会引用很多的三方组件。
无人值守
沪江也实现了无人值守的发布。开发人员只要往Git上提交代码,其他的事情全是自动化来进行的。左边这幅图是发布过程,先制作Jar包,然后制作Docker镜像,通过马拉松的API部署到各个环境上,每个环境上都会有自动化的测试脚本跟进测试。同时我们在Jenkins上引入了Pipeline,把整个的发布的流程通过Pipeline串联。这些无人值守的一些发布帮助我们为后面的Serverless打下基础。
任务调度平台
说到任务调度平台,MESOS套件里有CronOS和Marathon两种软件。Marathon主要适用于微服务场景下,而Cronos是定时执行批处理脚本。我们自行研制的Juice主要处理On Demand的需求。例如直播转录播时的转码打包任务。Juice也为Serverless做了一个铺垫,所有Serverless的函数运行环境都通过Juice调度。下面看一下Juice的架构。
什么是Serverless?
讲了这么多现有的技术架构后,进入今天的Serverless正题。首先讲一下什么是Serverless?从字面上的解释叫无服务器。大家一听很高兴,不用采购服务器了。其实不是,Serverless并不代表无服务器,而是一种无状态的应用型的服务。Serverless可以减少运维的工作,甚至可以不需要运维人员参与到程序发布开发以及后期的维护当中去,所以Serverless又可意味着无运维。这是我们对Serverless的理解。
Serverless微服务架构
再来看实际的Serverless的例子。比如要在网站上实现购买功能,搜索功能和更新功能,在微服务时代,会把这三个功能做成一个小的微服务,然后放在平台服务器中运行。到了Serverless阶段会怎么做呢?首先这三个功能对应的是Web上的一个点击,每个点击会对应一个API的调用,而每个API又对应着一个函数。所以开发人员要做的只是实现这三个函数,而每个函数可以对应不同的数据库实现不同的功能。相当于把以前的微服务拆成更小的函数实现,它好处在于开发人员只要关注于业务函数就可以了。
Serverless能解决什么问题呢?刚才我们也提到我们服务器的利用率,空闲的CPU是不是可以用来部署一些小的函数?对云计算的厂商来说,它们更希望推Serverless的原因,在于它可以让租户的成本更低。之前有人对比过使用亚马逊的一台虚机和使用Serverless的成本,比例大约在10比1。也就是说我们可以降低90%的运维和开发成本。所以我们只需要为计算付费就可以了。
Serverless对开发会是什么样的挑战呢?我们之前熟悉的SOA是面向服务的架构,现在我们要转型面向于函数的架构。在之前我们要实现一个功能,必须要了解框架,熟悉部署。当我们面向函数的时候,却只要关心业务函数就可以了,开发时间大大降低。
Serverless可以使用传统的TDD模型,也就是基于测试的开发模型。也是我们较熟悉的W型开发流程。
还有一种更合适的行为驱动模型(BDD),它更符合FOA(面向函数架构)的概念,行为驱动模型主要分三个阶段:
第一阶段,需求阶段,和以前的功能性需求,非功能性需求一样。
第二阶段是场景阶段,相当于以前的设计的阶段,它把需求分为:输入,什么时候,干嘛。
第三阶段是步骤阶段,也就是如何用代码实现需求,同样对应着三点。
聪明的你一定会发现,每个Then对应着一个Function,开发人员只需要用函数实现“Then”的过程,而不用关心其他。
开发流程上Serverless也只有少许不同,值得注意的是本地集成测试阶段。测试Function可以使用Docker Lambda,把函数包装起来测试。
Serverless对运维的挑战要大于对开发的挑战。许多人问我Serverless如何做业务运维?如何发布?我想说的是可能这些工作都不需要做了。运维需要关心的是平台而不是个体函数。自动化的发布程序会替代人工发布;容器内的环境监控和自动控制程序会代替业务运维。
当然,目前Serverless并不完美,我们还有很多问题有待解决。例如如何对函数监控,如何处理线上问题等。
说了这么多都是假把式,让我们亲身感受一下什么是Serverless以及它的整个开发、运行过程。
之后我们会扩展整个沪江Lambda平台的能力、完善运行时的监控、限制单个请求的执行时间,让函数即服务得到普及。
我的分享就到此结束,谢谢大家。
以上内容为黄凯老师的分享,加入“buzz”圈子,听案例的完整分享↓↓
扩展阅读:
壹佰案例榜单
全球软件案例研究峰会(简称“壹佰案例”)是科技界一年一度的案例研究榜单,旨在发现有案例教学意义的项目或方法论,如同商业领域的哈佛案例,科技界的壹佰案例榜单每年精选100件案例题材,有别于媒体的追逐热点和新奇概念,壹佰案例榜单更崇尚专业的力量和案例落地实践,通过邀请国内外享誉盛名的专家、各大公司技术委员会与设计委员会负责人担任联席主席,向领先公司和早期实践者征集年度里程碑或杰出成果背后的案例故事,通过组委会提供的案例开发流程、案例评审机制,以及数字化案例评审平台,帮助案例提交者从案例目标、成功要点与背后教训、ROI分析、案例启示、案例对组织的意义等多个维度进行结构化提炼,从而达到让听众有所收益的目的,保证了每年发布的壹佰案例学习榜单是最有学习价值的。
案例来源(部分):
点击“阅读原文”查看榜单详情。
以上是关于榜单精选|沪江向Serverless的演进之路的主要内容,如果未能解决你的问题,请参考以下文章