我有一个引以为豪的成就,那就是一周写了570多页的需求文档,大多数人估计没见过将近300多张A4纸的文档是什么概念,我只能告诉你,你承受不住。
具体的项目细节不能说,因为涉及到保密条例,不过可以公开的是这是海军使用的软件。那一周每天晚上都加班都半夜,因为我是实习生,再加上又从事着感觉很神圣很酷的工作,所以精神很不错,绝对没有消极怠工。
但是,让我极为的头疼的是,一些平时根本不在意的问题在文档变大巨大后就凸显了出来,比如字体不一致,行间距不一致,表格形式千奇百怪,其实将很多份分散的需求文档整理在一起也就花了3,4天,但是后面的调整花了剩下的所有时间。
当时的企业属于国企,开发的模式还是传统的瀑布模式,项目需求是甲方几个子单位共同提的,会开了很多次,初期的文档改了N遍,改到最后我都快不认识了,特别是有些地方因为甲方成分太复杂,结果都是冲突的。就这样反正是把500多页的文档搞定了,打印出来直接按毕业论文的形式胶装了。
听去开会的同事反映说,他们是拖了俩拉杆箱去的,里面放了几十本需求文档,注意是“本”,开会的过程不表,总之很头痛。
这里我想说的就是传统的开发模式,在前期对于文档的需求简直是偏执狂,在改格式的时候问过主管,我们写这么多最后真的按这个做吗?他的回复是不一定,可能项目直接被砍掉也不是没可能。
然后我们就按这个文档开发了4个多月,之后我就结束实习回学校了,没过俩月主管跟我微信说,这个项目一共三个单位一起做,我们单位被砍掉了。
传统的开发模式中,往往需要花很多的时间和精力去写文档,功能要求》、《投标方案》、《需求分析》、《技术分析》、《系统分析》、《数据库文档》、《功能函数文档》等。
准则就是要把大纲和细节都在前期定下来,之后大家就可以全力开发软件了,但是实际上往往是事与愿违的。
就比如下图,最初的需求与最后的验收结果可能大相径庭。
这就是传统开发模式的弊端,缺乏灵活性,如果开始错了,只能是一错到底。
这也是现如今“敏捷开发”模式的最大优势,充满了灵活性,可以使开发周期更短,另外采用迭代的方式更好的适应快速变化 。如下图所示,核心就在迭代,每隔一段时间就需要重新走一遍流程。
但值得注意的是,并不是所有的项目都适合敏捷开发,而传统的瀑布方法就要被扫进故纸堆里了。两者各有优缺点,瀑布模型适合需求稳定的项目,而敏捷开发与需求快速变化的项目十分匹配。
因为移动互联网的飞速发展,基本上所有的行业要想在这个时代保持竞争力并赢得市场,敏捷开发更符合当前这个时代的发展需求, 它可以更好、更快、更简单、更有效的应对随时需要修改的需求。
现在的项目开发太快了,快到今天有了一个想法,晚上可能就把原型做了出来,这一切得归功于云计算,基于云计算的开发就相当于你要装修的时候,云计算平台把一切都给你准备好了。如果自己想DIY,那么材料有,水电有,各种风格的装修风格和说明书一应俱全,你可以随时DIY。当然你要是这也不相干,直接瞬间给你按照选定风格的样板房给你装修,当然有些地方可能就没法改动了。
各种各样的云分别都是什么?
云计算的三大形态分别是公有云、私有云和混合云。三种类型具有不同的特点,如果拿汽车做例子的话,公有云就是从租车公司租车,可以按自己的需求租不同种类的车,时间也可以包天也可以包月,用多长时间就交多少钱,这种特别适合出差到别的城市或者旅游,那么租车就是非常合理的选择。
而私有云就是私家车,完全的专属于自己,不用担心租车公司是否上班或者不用担心还车时间,可以根据自己的需求进行改造,唯一的缺点就是买了之后车就是自己的负资产,如果使用量不高的话也是对于资源的浪费。
混合云就是上述两者的结合,既有公有云(租车),也有私有云(私家车),在平时情况可以用自己的私家车,但是如果临时的需求增加的话,那么就可以去租几辆车,既可以保证自己的安全性和隐私性,又具有很大程度的灵活性。
但在这里我要强调的一种更新的理念“云原生”,为什么说这是一种理念,因为它并没有一个确切的定义。根据一个共识较强的说法,
云原生(CloudNative)是一个组合词,Cloud+Native。Cloud表示应用程序位于云中,而不是传统的数据中心;Native表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性+分布式优势。
总之来说,符合云原生框架的应用程序的设计初衷就应该是基于云上,为了支持这一点,云原生包含了四个要素:微服务+容器+DevOps+持续交付,这四个要素的主要目标就是快速开发,快速上线,快速交付。
说到敏捷开发,字节跳动旗下的火山引擎推出的全栈云原生化架构,就是云原生的一个例子。其中包含了多个子模块,比如基础设施层、服务层和安全保障等。
作为一个云原生架构,四个要素自然不能缺席,那就是微服务、容器、DevOps和持续交付。
微服务既是一种架构,也是构建软件的方法。在微服务中,应用被拆分成最小的组件,彼此独立。不同于将所有组件内置于一个架构中的传统单体式应用构建方法,在微服务架构中,所有部分相互独立,通过合作来完成同一个任务。其中的每一个组件或流程都是一个微服务。这种软件开发方法强调细粒度、轻量化,力求在多个应用中共享相似的流程。
微服务就是力求把一个大型任务拆分成尽可能多的小部件,然后通过组合的形式构成大应用。而火山引擎开发的云原生架构提供的基础设施层就可以让开发人员尽可能少的考虑底层的服务,而是让开发人员更敏捷、专注地开发业务逻辑 。
容器技术能够对应用及其整个运行时环境(包括全部所需文件)一起进行打包或隔离。从而让您可以在不同环境(如开发、测试和生产等环境)之间轻松迁移应用,同时还可保留应用的全部功能。
容器是开发人员的福音,因为发明容器以前,保证开发环境一样就跟你要求所有人用0.5mm的铅笔一样,容器的作用就是不管在任何环境,都能保证环境是一模一样的,包括操作系统。
这个特性对于敏捷开发来说,可以不用担心不同团队之间因为环境不同而造成进度卡壳。
DevOps就是Development(开发)和 Operations (运维)的组合,从字面上也很好理解,就是所有进程齐头并进,这也符合敏捷开发的理论。 DevOps 强调通过一系列手段来实现既快又稳的工作流程,使每个想法(比如一个新的软件功能,一个功能增强请求或者一个 bug 修复)在从开发到生产环境部署的整个流程中,都能不断地为用户带来价值。这种方式需要开发团队和运维团队密切交流、高效协作并且彼此体谅。
此外,DevOps 还要能够方便扩展,灵活部署。有了DevOps,需求最迫切的工作就能通过自助服务和自动化得到解决;通常在标准开发环境编写代码的开发人员也可与 IT 运维人员紧密合作,加速软件的构建、测试和发布,同时保障开发成果的稳定可靠。
这就涉及到了基于云原生的开发工作了,从字节跳动的公开资料来看,他们已经建立了自己的 移动开发平台,代号: MARS,通过它来统一支撑上层各个业务应用的开发工作。如今大家在用的抖音、头条等APP都是基于MARS进行开发和迭代。当然持续交付的基础就来自于云原生的支持,微服务、容易和DevOps的协同工作造就了应用快速上线的结果。
敏捷开发是适应当今快速变化市场的进化结果,只有这样才能保持竞争力并赢得市场,它更符合当前这个时代的发展需求, 它可以更好、更快、更简单、更有效的应对随时需要修改的需求。 但敏捷开发同样离不开配套设施的建设,天生为敏捷开发适配的云原生架构就是一个越来越不可或缺的选择。
熟悉英雄联盟的朋友应该都知道,EDG战队夺得了S11的冠军头衔,真是应了“不破不立”这四个字,作为一个从远古时期就开始观赛的老粉丝来说,甚是欣慰。
很久之前我就在幻想,什么时候能够通过远端云来在本地玩游戏,当然,指的不仅仅是Moba类游戏,也可能是更多的大型游戏或者需要高端配置的游戏,因为我的渣渣笔记本明显玩不起来。
将游戏在云计算服务器上处理,服务器再将游戏处理结果反送到客户端,而用户只需要借助基本的视频解压,就可以在配置低的设备上进行游戏的运行了。
这就是我对云的最初幻想,还仅仅停留在娱乐的层面上,就当下而言,依赖云计算IT资源所完成的事情,远超出了我的想象。
21世纪以来,计算科学正在经历一场革命,这便是「云计算」,指的是在互联网上访问软件应用程序、处理能力和数据存储的地方。
云计算,这是继1980年代大型计算机到客户端-服务器的大转变之后的又一种巨变。用户不再需要了解“云”中基础设施的细节,不必具有相应的专业知识,也无需直接进行控制,通常涉及通过互联网来提供动态易扩展而且经常是虚拟化的资源。
自云计算兴起之后,以Docker为代表的容器浪潮,席卷业界,以DevOps和标准化交付而广受青睐。在此背景下,Google创造性地提出了云原生的概念,并发布了开源编排工具Kubernetes,从统一部署和标准化的角度切入,其后更成立了CNCF基金会,成功地杀出了一片天地。
云是数字时代的基础设施,随着云计算等企业级技术应用的发展普及,这项技术愈发的成熟稳定。
通过火山引擎刚刚举办的云产品发布会,我看到了一个即将发生的变化,即字节正在进入技术to B市场的基础设施层,其或许将成为除阿里云、腾讯云、华为云之外的 “中国第四朵云”。
这种想法是很自然的,因为随着公司变的强大,业务范围越来越广,那么就必然要往底层走,往整个社会的基础设施走,而作为互联网公司,选择云计算这个基础设施是再正常不过的事情了。
字节来的晚吗?
很显然,在不可阻挡的数字化浪潮中,越来越多企业提速“上云”,各行各业对云的需求依然旺盛,因而火山引擎这样的新晋云服务提供商出现,恰好给市场提供了全新的选择,虽然不能说早到了,但也不算晚。
此外,还可以期待一下,字节能否用(抖音)流量来带动火山引擎的发展。
1961年,美国计算机科学家John McCarthy提出了把计算能力作为一种像水和电一样的公用事业提供给用户的理念。2011年,美国国家标准和技术研究院提出了云计算的概念,认为云计算是一种资源管理模式,能以广泛、便利、按需的方式通过网络访问实现基础资源。
而后,相继有公司开展自己的云产品和云资源业务,正如今天的火山引擎一般。
云技术的基本特征,是虚拟化( Virtualization)和分布式,用户透过浏览器、桌面应用程序或是移动应用程序来访问云的服务。其中虚拟化技术将计算机资源,如服务器、网络、内存以及存储等予以抽象、转换后呈现,使用户可以更好地应用这些资源,而且不受现有资源的物理形态和地域等条件的限制。
本次发布会主要提到了云基础、视频及内容分发服务、数据中台、开发中台、人工智能引擎等云产品,可以看的出来,这些都是和字节目前所做的业务紧密相关的,在 to C 业务上,字节曾凭今日头条、抖音、西瓜视频等异军突起,可以说字节本身就是目前公有云业务的一个相当大的用户了,所以云计算本身可以服务于字节内所有的业务线。
字节跳动的技术和产品是具有通用性、普适性的,而开放内部能力给外部客户无疑是互利互赢。无心插柳柳成荫,团队选择在这个方向上继续做下去,这为火山引擎的成立埋下伏笔。
火山引擎对外开放的技术和工具,与字节跳动技术中台完全同源。承载字节跳动敏捷开发的全栈云计算能力开放给企业客,APP 工厂是说字节跳动可以批量生产 app,可以像工业时代的工厂流水线一样作业。
火山引擎的产品前期更聚焦在SaaS和PaaS层面:面向实际应用场景构建了「开箱即用」的增长“单品”们,比如A/B测试工具、基于火山引擎的CV(计算机视觉)技术的特效能力、企业级音视频直播SaaS等等;面向具体行业,比如泛互、零售、汽车、金融、文旅等提供解决方案。
这有助于火山引擎的产品在开局时敏捷快速地切入市场。
接着,火山引擎的客户可以用字节大资源池,抖音等业务的资源使用是有潮汐波动的。闲时资源可以给火山引擎客户使用,就可以把成本做得很低,这种资源拆解和复用所带来的性价比,能够帮助字节在很大程度上降低成本。
值得关注的一点在于,字节跳动在全球范围内广泛地采用了多云的基础架构,同时也自建了规模非常巨大的基础设施。
多云环境,这是一个术语,指除了其他私有云和本地部署基础架构外,还利用多个公有云服务提供商来提供虚拟数据存储或计算能力资源。多云不仅为企业选择使用哪种云服务提供了更大灵活性,还提供了更多混合云解决方案选择,同时还减少了对一家供应商的依赖,比较灵活。
而多云管理,指的是一套工具和程序,可使企业监控和保护多个公有云中的应用和工作负载。理想情况下,多云管理解决方案允许 IT 团队通过单一界面管理多种云环境,并支持多种云平台以及 Kubernetes 等新工具。
从行业层面看,火山引擎做 IaaS 的一个机会是客户普遍会采取的 “多云策略”。大多数公司成长到一定阶段后,会选择更多的云厂商,降低对单一云厂商的依赖,避免丧失议价权,同时规避可能出现的宕机风险。
这种多云策略的选择,为字节带来的更多的用户与流量,
容器+多云的整体解决方案:
首先在最底层,是一套完整的云原生基础设施。通过统一的底层去提供新一代的高性能计算存储和网络的解决方案,这其实是保证业务稳定和敏捷的基石。
在云原生基础之上是服务平台层,它要解决的是业务开发中的一些通用平台和服务能力的抽象。这里面包含了高性能的微服务框架、基于服务网格的微服务治理能力,以及Serverless、边缘计算平台的能力。服务平台构建就是为了让开发人员更敏捷、专注地开发业务逻辑,而能更少地考虑资源、平台、服务间通信和治理。
在平台层之上是整个研发体系的构建。这一层是其希望通过各种各样的工具、流程机制和组织,能够去帮字节跳动灵活地支撑全部业务线的快速开发和开发管理工作。
字节跳动选择并开放的这一套云原生和多云基础架构,可以说,不仅仅是为自己,也为更多的用户提供了灵活应对各种突发情况的很好解决方案,带动了更多需要敏捷开发和多云发展的企业用户的加入。
云计算已经开始对人类的生活产生根本性的影响,无论是大公司的低成本运营,还是普通人的视听娱乐,都将一步步被云的发展所推进。
在真正获得什么之前,仅凭入局这个动作,字节至少已让别人失去很多,而自己则受益匪浅了,如此而已。
目前云游戏技术尚不完全,有厂商的问题,也有用户自身网络的问题,不管怎么说,希望以后能够利用字节的云服务在云端先打打游戏吧,一个简单的梦想(逃