最近在设计云化数据仓库架构,对于云计算有若干思考,整理出来,和大家一起探讨。
云计算发展至今已数十年,也产生若干云计算巨头,通常所说的云计算包括IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务),越往上就越偏服务化,而各层之间的接线也越来越模糊。
云计算带来什么,我认为有三点:
- 资源池化,计算资源的弹性伸缩,包括计算、存储还有服务。
- 产品的服务化,基于计算、存储之上提供的服务,包括数据库服务,K8S服务等等,无需运维及更低的技术门槛。
- Best Practice(最佳实践)或者说是易用性,这一步是在产品服务化的基础上进一步降低开发的门槛,这一点往往被人忽略。
资源池化
个人认为,云计算的本质是计算资源的池化。
从最早的IDC机房开始,便是云计算的雏形,IDC是物理环境的抽象,IDC提供了网络、供电、巡检等物理环境,所以在IDC中增加一台物理机很容易,但是IDC通常是私有,物理机对外出租/售/使用也相对繁琐;
随着虚拟化技术的发展,虚拟机也走上舞台,虚拟机则是对物理机的抽象,虚拟机提供了基础的算力和操作系统,虚拟机很容易生成实例,算力和操作系统也更容易定制化;
为了进一步细粒度使用资源,产生了如Docker的容器化技术,Docker则是对操作系统级别的抽象,提供操作系统及以下的所有环境,用户只用专注于应用层面。
近两年serverless也蓬勃发展,在此不展开,但是从发展趋势可以很容易看到,云计算的发展趋势是对计算资源逐渐细粒度的管控,让用户也如同使用水电燃气一般,按需使用,精细化使用。
产品服务化
云计算在近几年另外一个趋势则是PaaS产品服务化,如S3对象存储、数据库服务,还有K8S。云厂商汇聚了大量的用户,并具备大规模的开发团队,其产品将来也越来越引领/影响开源社区,整个乃至软件开发行业。
产品服务化做的最成功的一定是S3对象存储,目前S3对象存储已然成为对象存储的标准协议,从开源社区到各家云厂商主动兼容S3协议。
另外值得一提的则是数据库服务,最初各家推出自家的数据库,如AWS DynamoDB、Azure CosmosDB。随后为了促使用户迁移上云,或者说降低用户上云的难度,云厂商又推出兼容开源协议数据库(MySQL、PostgreSQL),而aws则更进一步推出Aurora,上层协议可以平滑对接MySQL、PostgreSQL等主流的开源数据,减低用户上云的难度,同时底层为自行设计的架构,从性能上打破开源数据的瓶颈。
对于从业者来说,应该时常关注云计算的发展,在技术选型的时候,也一定看一下云计算厂商给出的解决方案。
最佳实践(Best Practice)
开源产品大家都会用,但是每个团队使用的方法都不尽相同。与此同时,尤其对于小团队而言,经验和人手都相对匮乏,没有办法迅速趟出自己的路。
开源产品就像IQ卡,给了密码也很难在短时间用起来。 开源社区目前都注意到这一点,在文档中常常会有Best Practice这一章节。云计算厂商则是更进一步,用完整的产品的助力用户。
比如说前几年火爆的Devops,开源产品有很多,每种产品也有诸多用法,用户无从下手。与其说DevOps是一套完整的产品,我更认为是一套开发管理的思想流程。对于未接触过DevOps的用户,面对这一套思路,如何组织CICD流程,如何贯穿嵌入开发流程中,其实对于用户来说还是特别复杂、至少说是有困惑的。另外一个例子则是k8s服务,开源版本实际上很完整,但是单纯依靠官方文档去消化理解网络、存储、权限、ingress等等功能还需要大量人力时间。各家云厂商直接提供产品服务,顺带把最佳实践也贡献给用户,大幅度降低使用门槛。
小结
我目前的感受,云计算的底座为资源池化,在此之上我将他分为两个维度:技术性和可用性(这两个维度可能并不正交),一定程度上对应我们上面两个章节。
- 技术性包括功能性(人无我有)、性能(人有我强)等因素
- 可用性包括兼容性(兼容现有组件,通常为开源组件)、易用性(让我用起来,Best Practice)。
以上是我工作时候对与计算的一些想法,见识粗浅,欢迎大家批评指正。之后,想和大家聊一下,先简单列了一个大纲,有空时候再更新。
- 云计算对从业者产生什么影响?
- (进一步)分化程序员
- 云计算的成本?
- 我们将如何拥抱云计算?
- 个人
- 团队
- 企业
- 云计算没有解决的问题
- ……