浅谈云计算已对云计算有了描述,这里来讲讲我理解的云原生。 云原生的目的,就是提供更多的通用服务,让用户更专注业务。
云原生定义
云原生(CloudNative)是一个组合词,Cloud Native。 Cloud表示应用程序位于云中,而不是传统的数据中心;Native表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行。
前言
不变
虽然我们都在说云原生,但很多东西并没有变。见云计算-变化中的不变,软件开发的基础是不变的。
- 通信协议,TCP/IP
- 基础操作系统,Linux/Windows,POXIS协议。
- 开发语言,它们并不会因为云计算而改变。
变化
云原生改变的是应用开发的设计方式。比如单机故障的问题,中间件部署的问题,都可以交由云上的生态来解决。
那网卡做个比方,现在的网卡可以Offload一些需要操作系统内核处理的TCP动作,提升性能。云计算的能力就是在Offoad一些业务应用需解决的问题。
云原生就是要更好的利用这些能力。
云计算的能力
- 容灾能力,IAAS层具备一定容灾能力。
- 灵活的IAAS资源,即买即用,按需付费。
- 云上生态丰富,服务提供,开箱即用。
如此一来,应用会越来越依赖云,自然就成为了云原生。简单说就是,解耦再解耦。可复用的能力由云上生态提供。
软件服务方式的变化
商业模式
传统数据中心时代,大家使用某种软件,都是购买版权(License),像Oracle这样。
在云计算时代,我们发现VPC虚拟出的私网可以开通通信通道,让用户通过通道访问服务。这能很好地隔离用户APP和服务APP。
这就解决了很多版权售卖的问题,售卖方式也更为灵活,比如按照时间,计算量来计费。
所以,云原生的关键是,重新定义软件服务。从贩卖版权 售后的模式,转变成开箱即用的服务。就好像微软的Offlice套件变成Office365一样。重点是服务,而不再是软件。
此外,云原生也利好开源软件公司,比如MongoDB,PingCAP等公司,云原生为其提供了很好的商业模式。
技术结构
服务的使用来自网络通信,所以我们还需要一个通信标准,也就是Service Mesh。简单说就是代理的终极形态。
为什么是代理(Proxy)而不是SDK
像阿里的TDDL(淘宝分布式中间层),HSF(高速服务框架),Notify(消息中间件)等,是支撑双十一的核心模之一,这么牛逼的东西,为什么云上很少有产品呢?是它们做的不好么。
我想,更大的问题是因为这些中间件都是重SDK的设计,用户不好用。云上售卖的通常是改造版的,比如在前面加一层Proxy。
SDK的特点
其实总的来说,就是链路短,直连没有性能损耗。
- 性能好。
- 结构简单,问题容易排查。
- 语言依赖问题。
代理(Proxy)的特点
- 易用,用户无需关心SDK(可以做的很简单)的复杂性。
- 内部切换流量调度,理论上可以让用户无感。
- 流量聚合,大量小请求可以合并成大请求,降低请求数,反而降低性能损耗。
- 会有一定延时增加,Proxy可能会成为瓶颈。
随着服务器性能越来越好,部分性能损耗已经下降到了可以接受的范围。加上业务越来越复杂,大家也不希望花过多时间在基础问题上。专业的人做专业的事。
除了易用性外,还有几点:
- 版权问题,如果提供SDK,意味着代码售卖,那版权问题将不可避免。比如用了有XX协议的开源库,需要强制开源或者叫板权费之类的。但Sidecar后,代码依然属于内部使用,不收费即可。
- 内部系统依赖问题,内部SDK通常也是全家桶的方式,会存在各种复杂依赖。这提高了用户门槛。所以为什么TDDL也叫头都大了ヽ( ̄▽ ̄)ノ。使用Sidecar后,依赖问题自己解决,把简单留给客户。
- 代码保密问题,一些技术创新或优化,自然需要保密。另外,很多产品开发之初,为了追求性能,快速迭代,实现很可能不是非常优雅,自然不希望公开。
Service Mesh 和 Sidecar
Sidecar模式成为未来分布式系统的通信标准,整体设计相当于在每个节点中,提供一个agent用作消息代理,接收和发送均由agent代劳。有点像给台电脑,大家在家办公的感觉,agent就是那台电脑。
mesh简介
Sidecar的优势
- 将与应用业务逻辑无关的功能抽象到共同基础设施降低了微服务代码的复杂度。
- 因为不再需要编写相同的第三方组件配置文件和代码,所以能够降低微服务架构中的代码重复度。
- 降低应用程序代码和底层平台的耦合度。
可以看到,它的设计目标是降低代码的耦合。可以将应用通信的管理由Sidecar来负责,应用只需考虑业务需求。
比如现在的云上服务,未来可能会过渡到Sidecar。
问题
VPC打通了通道会不会不安全
- 访问通道通常是单向的。VPC内部私密性依然可以保证。
- VPC控制权依然在用户手中,可以做安全控制。
应用托管到云上会不会不安全
- 这个问题可以类比钱放到银行。
- 把东西放到自家保险箱(某个机房)固然是放心的。一种方案是把一粒沙子放到沙滩里,云计算就是这堆沙子。
专有云没有这么多能力怎么办
实际上,解耦后,不通平台的问题更容易得到解决。相同的标准可以用不同的实现。
- 提供依赖服务的替代能力。
- 将SLA降级,比如没有分布式存储,则降级提供的可用性保障。
总结
云原生的目的,就是提供更多的通用服务,让用户更专注业务。