服务化的过去、现在和未来

原创: bluedavy HelloJava  9月18日

服务化毫无疑问是技术圈一直火热的buzzword,而且其实已经非常多年了,这在日益更新的技术圈还挺神奇的,作为在服务化这个领域还从事过比较多年的人,觉得值得写一篇文章来说说我眼里的服务化的过去、现在和未来。

启蒙阶段

我应该是从2006年学习OSGi的时候开始第一次接触Service这个概念,不过OSGi的Service还指的的是单机应用,和之后服务化更多的是应用在分布式应用领域有挺大差别,但也有些共通之处,例如OSGi中的Service也同样具备定义、注册、发现这些机制,我之所以后来能加入淘宝估计也是因为我对OSGi Service这块的经验。

SOA落地阶段

2008年在淘宝我开始淘宝服务框架(HSF)的编写,和业务研发团队一起推进淘宝的服务化,这个时候的SOA火爆的不行,但更多的也只是概念,缺乏非常细节的落地Guideline或框架,这个时候业界的SOA的实现主要倡导两种方式,一种为用xml方式描述的service,例如WSDL,另一种则是esb。

我在设计HSF的时候,认为xml方式描述的service太复杂,而且其实也没有很清晰的指导例如服务的注册/发现应该怎么实现,尤其是在有集群、负载均衡场景的大型分布式系统中,更不用说服务化后会带来什么问题;至于esb,我认为在一个高并发的系统中,esb会成为极大的瓶颈点,最终导致系统的风险,所以最终我决定自己探索一个可用于落地SOA的服务框架到底应该怎么做,从而让大家基于这个框架就可以去做服务化,而不是还得先解读这个概念。

但由于缺乏经验,HSF的设计是出了挺多问题的,在系统设计之解决核心问题的设计这篇文章里基本都说到了,在这就不再去重复,最后总结下来就是我们可以看到一个服务框架的特征是:

  1. 简单的和单机开发框架集成的服务定义方式,例如在HSF中就是通过spring的bean定义方式来发布、订阅服务;

  2. 服务注册/发现机制,HSF采用的是引入一个ConfigServer来实现;

  3. 服务寻址和负载均衡,HSF采用的是无中心化的软件负载均衡方式,这个方式为支持可水平伸缩的服务调用是奠定了很好的基础的;

  4. 服务Tracing,HSF采用的是类似Google Dapper的方式,自己实现了一个内部代号为EagleEye的东西,以跟踪一个复杂的服务调用过程,这个对排查问题而言真的是至关重要,如果没有Tracing,服务化后的一堆问题是很麻烦的。

有了一个服务框架后呢,相对来说服务化就不是那么一个停留在概念阶段的东西,但对于服务化而言,服务框架不是全部,只是个基座而已,服务框架解决的更多的是服务化的技术问题,但服务化还有另外的核心问题是业务系统本身怎么服务化,应该把什么抽象为服务,服务的粒度怎么把控,这不是框架能搞定和指导的,这就得靠业务架构师了,而且除了这个外,服务化还会带来巨大的变化是组织结构需要相应的变化,因为在服务化之前,通常分工是不会太明晰的,而服务化后,就会有这样的要求,这对很多企业来说,是推进服务化最难的地方。

回顾这个阶段的话,可以看到的是这个阶段更重要的是让SOA这个概念有了一个更为清晰的可落地的框架出现,从而大家不用在纯粹的技术概念层面去争吵,比较概念这玩意吵个十年都没问题,框架的出现使得大家去落地服务化更多的进入了真正的实操阶段,去思考业务系统应该怎么抽象和定义服务,组织结构需要相应的如何调整。

淘宝大概在2009年可以认为服务化就进入了比较成熟的阶段了(那个时候差的主要是Tracing),在那之后如果看中国范围的企业,可以看到的是更多的互联网公司开始进行服务化的改造,由于当时开源界完全没有可用的服务框架,各家基本都自己打造,不过思想基本类似;如果视野放宽到全球的互联网公司,会看到google、facebook、ebay等其实是在更早的时候就完成了服务化的改造,并且google做的分享(Jeff Dean有一次在Stanford的分享讲到了Google的服务化)或者发表的一些论文(例如影响巨大的Dapper)里都可以看到对服务框架的一些组件的定义,只是没有那么系统化的说一个服务化的框架的组成,所以这样去看的话,阿里的整个服务化进程,通过分享以及后面开源的dubbo,对中国的企业进行服务化改造还是起到了一些帮助的。

微服务?

又过了很多年,SOA好像越来越不火了,突然有个新的概念:微服务火起来了,我到现在都没搞清楚微服务和淘宝在08年做的服务化的区别到底是什么,看了很多解读,我也还是不得要领,有见解的同学欢迎评论指导下,所以我对微服务就不做什么阐述了,这个对服务化唯一的好处我觉得就是又吸引了巨多人的关注。

Service Mesh

这个是继微服务后在服务化领域最火的概念了,同样,目前这东西和当年SOA一样,我觉得也更多的还只是概念,尽管已经有Istio、Envoy、RSocket、Knative等等东西出现了,但实践层面还挺缺少的,目前还是一个战国时代。

Service Mesh这概念我之前也一直看不太懂,现在我基本上认可Service Mesh确实是推进服务化领域发展的一个方法,原因是我认为Cloud Native一个很核心的点是打造一套开放、公共的技术体系,而看起来Service Mesh是实现这个的不错的思路,它会带来两个好处:

  1. 对客户而言,采用Service Mesh使得在vendor no lock-in上有了很大的帮助,因为只要各家vendor在功能层面能差不多,mesh的sidecar方式使得客户非常容易切换vendor,不影响业务层面的代码;

  2. 对云计算厂商而言,采用Service Mesh使得在对接多种协议层面有了很简单的实现方法,这样就可以很好的实现同一技术领域不同产品的互通,这对一个开放、公共的技术体系而言挺重要的,同样也会使得客户move to cloud变的更加容易。

所以我认为Service Mesh最后成的那家一方面是实践的经验,另一方面则是对不同领域的不同技术产品协议的对接丰富度,我也非常看好service mesh成为新一代的服务化的实现方式。

总结

服务化的技术经过这么多年的发展,经历了SOA概念,到帮助SOA落地的服务框架,到微服务,到未来的Service Mesh,现在仍然活跃在技术的舞台上,并且其实大部分企业还在经历多数互联网公司早期服务化的阶段,当然,诉求我觉得差别很大,互联网公司做服务化多数其实是为了解水平伸缩的问题,现在大部分企业服务化更多的是为了解业务互通、大规模研发团队协作的问题,所以仍然非常看好这个领域的发展。

毕大从自身设计HSF的角度出发谈服务化这回事的更多相关文章

  1. nodejs高并发大流量的设计实现,控制并发的三种方法

    nodejs高并发大流量的设计实现,控制并发的三种方法eventproxy.async.mapLimit.async.queue控制并发Node.js是建立在Google V8 JavaScript引 ...

  2. 商业智能(BI)可视化大屏的设计及使用原则

    信息时代,数据是一种可贵的资源,我们可能经常听到的一句话就是:用数据说话.但是,在没有进行系统化整理之前,数据不过只是一串串冰冷的数字,我们很难从大量的数据中获取到有价值的信息.只有通过合适的可视化工 ...

  3. ES:PB级别的大索引如何设计

    一.单个大索引的缺陷 如果每天亿万+的实时增量数据呢,基于以下几点原因,单个索引是无法满足要求的: 1.存储大小限制维度 单个分片(Shard)实际是 Lucene 的索引,单分片能存储的最大文档数是 ...

  4. 与焊接厂交流——从生产角度出发的PCB设计心得

    上周的时候,去了趟加工厂盯电路板的焊接进度.然后在闲余的时候,跟焊接厂的工程师交流了一下,工程师从生产的角度,说了几个值得注意的事项: 1.元件的焊盘应该要窄长,不能过宽.因为,在过机表贴时,焊盘上的 ...

  5. 数据结构大二课程设计:QT实现线段树

    源码以及编译文件下载地址:http://download.csdn.net/detail/zhiyanpianyu1234/9445909#comment 加入了一些小东西,一直觉得课设是做给自己看的 ...

  6. 从实力的角度出发来思考这道AOP题目

    文/楠木大叔 技术更迭,一往无前.技术人总是要不断学习以适应社会的发展和行业对我们的要求.每隔一段时间,就会有纷至沓来的新技术,新知识,新概念,我们应该如何应对,是被逼到墙角,还是主动出击? 导读 从 ...

  7. (转)运维角度浅谈MySQL数据库优化

    转自:http://lizhenliang.blog.51cto.com/7876557/1657465 一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架 ...

  8. 运维角度浅谈MySQL数据库优化(转)

    一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分 ...

  9. 从运维角度浅谈 MySQL 数据库优化

    一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分 ...

随机推荐

  1. Python中sort、sorted的cmp参数废弃之后使用__lt__支持复杂比较的方法

    Python2.1以前的排序比较方法只提供一个cmp比较函数参数,没有__lt__等6个富比较方法, Python 2.1引入了富比较方法,Python3.4之后作废了cmp参数.相应地从Python ...

  2. PyQt(Python+Qt)学习随笔:Mode/View中的枚举类 QItemSelectionModel.SelectionFlag取值及含义

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 以上取值可以通过或操作进行组合使用. 老猿Python,跟老猿学Python! 老猿Python博文 ...

  3. PyQt(Python+Qt)学习随笔:窗口的布局设置及访问

    老猿Python博文目录 老猿Python博客地址 在Qt Designer中,可以在一个窗体上拖拽左边的布局部件,在窗口中进行布局管理,但除了基于窗体之上进行布局之外,还需要窗体本身也进行布局管理才 ...

  4. python中的万能密码

    在php中,我们经常见到这样的语句 if(isset($_GET['id'])) { $id=$_GET['id']; //logging the connection parameters to a ...

  5. web前端常用js插件

    第一款:截图插件html2Canvas.js html2是一款强大的截图插件,只需引入js文件,依照官方给定的截图方法,就能截取对应DOM区域的内容.对于有些截图出现模糊偏移的问题,网上也有一堆解决方 ...

  6. 浅析Python项目服务器部署

    基础理论 关于Web服务器和应用服务器 基本概念: Web服务器主要功能就是存储.处理.传递网页,客户端和服务器之间基于HTTP协议进行通信. 应用服务器主要是处理动态请求,调用相应的对象完成对请求的 ...

  7. 总结 Visual Studio 2019 发布以来 XAML 工具的改进

    不知不觉,Visual Studio 2019 已经出到 16.8 和 16.9 Preview 了.虽然每次更新都林林总总地一大堆新功能和改进,但关于 XAML 的内容总是,always,每次都只有 ...

  8. 第一次软件工程与UML的编程作业

    博客班级 https://edu.cnblogs.com/campus/fzzcxy/2018SE1/ 作业要求 https://edu.cnblogs.com/campus/fzzcxy/2018S ...

  9. 事件修饰符 阻止冒泡 .stop 阻止默认事件 .prevent

    stop修饰符 阻止冒泡行为 可以在函数中利用$event传参通过stopPropagation()阻止冒泡 通过直接在元素中的指令中添加 .stop prevent修饰符 阻止默认行为 可以在函数中 ...

  10. Flink读写Redis(二)-flink-redis-connector代码学习

    源码结构 RedisSink package org.apache.flink.streaming.connectors.redis; import org.apache.flink.configur ...