Golang 无疑是云原生领域开发的首选开发语言,继 Docker、Kubernetes 等大作之后 Knative 又是一个基于 Go 语言的云原生范式。Knative 提供了一整套云原生应用的 Serverless 模型,使得我们可以方便的基于 Go 语言开发 Serverless 云原生应用。本文作者冬岛:阿里云技术专家
本文字数:5166字
精读时间:10分钟
也可在5分钟内完成速读
00
前言
大家好!我是阿里云容器服务团队的冬岛,2016 年阿里巴巴开始全面容器化,我负责双十一链路应用的容器化 CAAS 平台。承担双十一应用的扩容、缩容、升级以及灰度发布等所有和容器相关的平台支撑。2017 年开始基于 Kubernetes 在公有云上做相关的产品,直到今天在做 Knative。本次分享分为四部分:
第一,云计算最根本的驱动力是什么;
第二,云原生应用是什么;
第三,Knative 给应用的云原生化开发带来了什么价值;
第四,Demo展示
01
云计算第一性原理
第一性原理顾名思义就是最根本的机制是什么,在讨论云原生之前先来思考一下为什么企业要上云、为什么技术人员要学习面向云的编程思维以及咱们应该怎么看待云这件事儿。
咱们先从一顿火锅谈起,吃火锅要有肉、有菜、有鱼还有有金针菇。一顿火锅虽然愿望不大,但会涉及到非常多的东西。各种蔬菜、各种牛羊肉,甚至还有进口的。细想一下所有这些我们都经常食用,但有哪些是咱们自己亲手养殖或者种植的?其实没有,咱们每天都是坐在办公室里,下班的路上到菜店或者超市就把这些东西买全了,不知道其实也不关心这些东西的具体生产过程。
现在因为有专业的人在做这些事情,所以我们大多数人都无需劳心蔬菜是怎么种植的。而我们工程师所做的和计算机打交道的事情也能通过其他的渠道反过来帮助那些种菜的人。这就是社会分工的威力,是不同地域、不同角色之间通过市场相互协作的成果。
好,说完火锅咱们再回过头来看看一个应用都是由哪些部分构成的。应用要提供服务首先要有计算、存储和网络资源才能把进程跑起来。当然这些也仅仅是把进程跑起来,如果要承接具体的业务还需要依赖数据库等服务。如果要做分布式架构还需要做微服务拆分,这时候就需要缓存、注册中心、消息各种中间件的服务。现在说的这些都是程序已经有了,如何把程序跑起来承接业务的部分。还有一部分就是如何把代码变成可启动的程序,这就是 CICD 部分了。从代码到应用启动再到应用依赖的周边系统支撑都说完了,还有一部分就是日常运维相关的:
• 比如日志收集、分析
• 比如监控和告警
虽然我们本来只是想要写一个应用,支撑业务功能。但是应用周边的这些支撑系统比这个应用自身的消耗还要高。这其实不是咱们期望的结果。咱们期望的是更多的精力关注到业务逻辑本身,而不是周边的这些系统上来。
让业务团队更多的聚焦在业务本身,这才是咱们希望看到的。实际上有一定规模的公司,内部的组织架构基本也都是由一个基础平台团队和多个业务团队构成的,基础平台团队负责提供这些应用需要的公共能力支撑,业务团队更聚焦在业务上,使用基础平台团队的能力即可。
这其实也是社会分工在 IT 组织中的体现,专业的人做专业的事儿,分工提升效率。
02
云原生应用
说完云原生这个理念,咱们来看看云原生应用。看看在云原生的这个大背景下,如何看待传统的应用架构。
无论是云上的应用,还是云下的应用,其实应用依赖的这些核心要素都没有变。只是这些核心要素的提供形式发生了变化。咱们先来看看这 7 个核心要素,这 7 个要素中日常运维这一块其实不是强依赖的,日常运维这