网易杭州研究院·尧飘海

本文作于2015年2月

1983年,SUN公司提出的网络即计算的理念;2006年亚马逊(Amazon)推出弹性计算云(Elastic Compute Cloud;EC2)服务,云计算可以认为包括以下几个层次的服务:基础设施即服务(IaaS),平台即服务(PaaS)和软件即服务(SaaS)。

网易目前也在云计算等各层次里进行了较长的时间的投入和研发并应用在公司内外的各产品中,云计算相关的技术也得到了较好的论证。

本系列三篇文章将主要对PaaS进行相关探讨。

PaaS(Platform-as-a-Service:平台即服务),较早期把服务器平台作为一种服务提供的商业模式,随着云计算时代的发展和成熟逐渐把部署环境、测试环境、甚至开发环境也当着一种服务来进行提供,并最终以SaaS的模式提交给用户。

PaaS也可以看成是SaaS模式的一种应用。SaaS的概念的提出非常早,根据相关文献和参考,理论上出现的时间在1998年或更早些,最早出现在欧美等发达国家。但最初的思想和现在发展的结果有相当大的不同,不再是单纯应用的服务提供了。

PaaS服务类似于IaaS也可以分为公有云PaaS平台和企业级PaaS平台。最早从事公有云的PaaS平台,如Google App Engine和Amazon Beanstalk,但是这二种类型的应用到国内都发展不是很好,特别是在国内GAE被墙,更是使用得其在国内基本上属于昙花一现,从后来Google的IaaS的转变路线也可以大概看到其发展也不是很好,很多只是当做试验的玩具而已,一方面是由于安全问题采用的沙箱机制使得开发人员施展能力受到相当大的限制,另一方面整个生态圈没有成熟,导致其他的云基础服务跟随不上,比如自动化的路由,负载均衡等技术。

在2007年左右,随着大规模互联网应用的快速成长和虚拟化技术的发展,PaaS促进了SaaS的快速发展。众多国内外厂商推出了自己的PaaS服务平台,国外包括 AMAZON, Google, SALEFORCES, CF等十大服务商,国内也最早的也包括SAE,BAE到后面的阿里云等。

PaaS服务开始的时间到今年也有8年左右的时间了,中国的抗日战争打了八年也结束了,尽管在国外有不少看似蛮红火的服务商,但是从国内从实际使用效果和真正推广的应用的情况来看,发展的不是特别理想,没有达到之前概念的预期发展。究竟其原因可能是多方面的,有技术方面的限制,也有产品化或开发人员对新概念接收度等非技术的原因。

近二年来,国内外又出新一批的PaaS服务创业公司,主要人员大部分是从第一批做PaaS服务平台的人员出来的创业的,比如DOTCLOUD,DEIS,国内的NICESCALE等公司,这些公司能不能很好的发展,现在还不好说,至少从目前的发展趋势来看,进入的门槛越来截低了,这些或许是得益于容器和虚拟化技术的发展。

网易目前也在致力这方面的探索和建设,从各服务的创业公司如春笋般新起和发展,大部分还是聚集在小型应用的基础上,对于中大型的应用,包括在一些大公司也只是刚刚开始着手构建,终究原因从技术方面来看大概有以下几种原因:

  • 容器技术确定能带来些好处,但是这种好处对于相对成熟稳定保守的公司来说还不足以能够撼动其短处,使其能快速转头换向全力投入其怀抱。

  • 技术储备,或者说跟风也好,追潮流也行,特别是小公司,由于成本较低,因此先试试水,看看是不是真的有红利或者做点什么,至少也得追上技术的发展趋势。

  • 实际的痛处,就是那些真正接受过凤凰涅盘,想浴火重生的人,比如开发人员,测试人员和运维人员,在经过版本不一致,库依赖不同,环境不一致等带来的低效或依赖的人,希望能把精力放在解决各自专业的问题。

  • 分久必合,合久必分:业务从小规模的起步到后来的大规模发展,应用的开发,测试和部署越来越复杂,依赖的服务越来越发多,最后变成相互抱怨,因此架构的演变也会随着这个趋势来发展。

OS

整个计算的行业的发展也经过不同的发展,从最早有代表性的人月神话的作者所带领的IBM的大型系统的开发到单机系统,再到虚拟机及容器技术成熟,无一不是从之前的一个很大的一块细分成小小的一块。

CGI

WEB技术的应用发展也有相似的经历。在Web应用程序开发的早期,大部分应用程序通常使用Common Gateway Interface(CGI)建立,包括前几年的QQ里面的很多系统还是采用C类语言实现的CGI-BIN来完成,每个请求采用一个进程来处理,当时的Apache服务也是整个最流行的网络服务器之一。

ASP和JSP

CGI技术带来的维护和性能的问题后来变得越来越严重,所有的代码都是混在一起的,甚至HTML的输出也是在业务代码里面嵌入的,业务上的扩展变成十分艰难。因此,WEB程序开发中的下一个阶段中衍生了“server pages”技术,比如ASP和JSP等语言,它们很好的实现应用程序逻辑代码与视图代码被很好的分离,加上设计模式得以快速演变,各层分工的越来越明细,职责也越来越明确。

MVC

因此在较短的时间内发展成了Model-View-Controller(MVC)的开发模式,包括现在大部分的中小型应用还是按采这样模式来开发,Controller层主要负责各业务的路由,调用相关的实现方法,通过MODEL的业务数据作为输入,最后产出View的输出,用来显示相关的视图,在这种模式下,业务数据、应用程序、视图逻辑被很好的分离。

SOA

目前在大部分应用中还会把Controller再进一步的细分成服务层或数据操作层。各服务之间的调用可以通过RPC或REST的风格进行调用,实现类似的SOA的服务架构,各服务层只需要通过相关的接口,相互间是松散和解耦,即实现了数据依赖与交互,又消除了代码库共享的依赖性。

从公司内各产品的发展趋势来看,各种不同的产品在不同的规模和阶段采用不同的架构模式来组组织和运行,但是随着应用的访问量的快速发展,产品正在朝着合久必分的趋势来发展,逐步形成了服务化的架构思想。

下期预告

下期《PaaS服务之路漫谈(二)》将为大家继续分析产品的不同架构模式:整块架构和服务化架构。敬请关注。

推荐阅读

为什么网易在2016年大举进军云计算?

网易云信∣真正稳定的IM云服务

ID:neteaseim  长按识别,关注精彩

PaaS服务之路漫谈(一)相关推荐

  1. PaaS服务之路漫谈(三):MSA分析

    网易杭州研究院·尧飘海 本文作于2015年2月 接前文:PaaS服务之路漫谈(二) Monolithic架构在产品访问量很大的情况下,有可能常会导致整个产品迭代或升级过程不能按预期进行,或者上线风险的 ...

  2. PaaS服务之路漫谈(二):Monolithic架构分析

    网易杭州研究院·尧飘海 本文作于2015年2月 天下大势,分久必合,合久必分,社会历史的发展方向总有着惊人的相似. 把这种规律应用到软件应用架构的发展方向上,当生产力和生产关系到了不可调和的矛盾时,也 ...

  3. .NET Core微服务之路:不断更新中的目录 (v0.42)

    原文:.NET Core微服务之路:不断更新中的目录 (v0.42) 微服务架构,对于从事JAVA架构的童鞋来说,早已不是什么新鲜的事儿,他们有鼎鼎大名的Spring Cloud这样的全家桶框架支撑, ...

  4. 解锁新姿势 |如何利用配置中心规范构建PaaS服务配置

    为什么80%的码农都做不了架构师?>>>    摘要: 在上一篇文章中,我们以MQ和ACM为例,讨论了如何借助配置中心对消息进行限流管理的场景.在本文中,我们继续以该场景为例,讲述如 ...

  5. NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成...

    原文:NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成 本篇内容属于非实用性(拿来即用)介绍,如对框架设计没兴趣的朋友,请略过. 快一个月没有写博 ...

  6. .NET Core微服务之路:基于Consul最少集群实现服务的注册与发现(一)

    原文:.NET Core微服务之路:基于Consul最少集群实现服务的注册与发现(一) Consul介绍 Consul是HashiCorp公司推出的开源工具[开源地址:https://github.c ...

  7. NET Core微服务之路:实战SkyWalking+Exceptionless体验生产下追踪系统

    前言 当一个APM或一个日志中心实际部署在生产环境中时,是有点力不从心的. 比如如下场景分析的问题: 从APM上说,知道某个节点出现异常,或延迟过过高,却不能及时知道日志反馈情况,总不可能去相应的节点 ...

  8. 使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例)

    引子 这一篇文章将用一个完整的实例,给大家介绍如何基于dotnet core(微软.NET的最新版本,支持跨平台,跨设备的应用开发,详情请参考 https://www.microsoft.com/ne ...

  9. 无法访问netflix服务_Choerodon 的微服务之路(三):服务注册与发现

    本文是 Choerodon 的微服务之路系列推文第三篇.在上一篇<Choerodon的微服务之路(二):微服务网关>中,介绍了Choerodon 在搭建微服务网关时考虑的一些问题以及两种常 ...

最新文章

  1. Django框架之第二篇
  2. burpsuit学习--修改来源地址
  3. JS 如何截取部分日期呢
  4. [转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)...
  5. 想成领袖?先瞄准老板身边的位置
  6. 利用winrar自动备份重要资料
  7. PowerDesigner反向数据库时sqlstate=37000或SQLSTATE=42S02错误
  8. 关于软件测试的5个误传
  9. Creator性能优化
  10. catia里画铰链_基于CATIA的汽车车门铰链设计
  11. 全网最火! 阿里 P6 级,廖雪峰的「全栈架构师」开讲了
  12. 1000瓶水里面有一瓶毒水,通过用兔子去喝水的方式检验,只能让兔子喝一次水,那么最少用多少只兔子检验出来是哪一瓶?
  13. c++ primer kindle_kindle全系列使用墨水屏版微信读书解决方法,你的无限卡有用了...
  14. 全基因组选择中准确性的影响因素
  15. 阿里系App抓包详细分析
  16. =default =delete
  17. 36岁的it一线运维是不是废了_35以上IT人咋活?给你三个真实的案例
  18. 计算机的声音怎么设置在哪设置方法,Win7电脑声音设置的方法
  19. Spring整合MyBatis导致一级缓存失效问题
  20. Delphi图像处理 -- 高保真反差

热门文章

  1. 习惯 积累 沉淀
  2. 程序员取名:用大数据分析一下宝宝取名时最容易重复的名字
  3. Sina App Engine 介绍
  4. Python DataFrame数据清洗后行索引不连续——reset_index
  5. 转载:力扣字符串题atoi
  6. java 方块_哈工大java实验 移动小方块
  7. C语言中fun的功能是将字符串,下列给定的程序中,fun()函数的功能是:将p所指字符串中......
  8. android webview 报错,Android WebView 5.x 系统下 Resources$NotFoundException异常处理
  9. java 操作 word 表格和样式_poi 操作excel和word(修改样式和内容)
  10. php 多表查询输出,ThinkPHP多表查询