`
youxinrencwx
  • 浏览: 71181 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

开放平台两三点感悟

 
阅读更多

开放平台两三点感悟

Author:放翁(文初)

Mail:fangweng@taobao.com

围脖:http://t.sina.com.cn/fangweng (多加一个围脖,也潮一把)

有淘宝的同学在旺旺上和我说,你最近很少写blog了哈,是不是忙着照顾孩子啊,我尴尬的笑了笑。是的,照顾“小孩”,自己家的小孩和开放平台这个小孩。以前人家说,三十而立,我今年虚岁33了,儿子就快能够“立”起来了,一直想写点技术和生活的体会,但是总少一些冲动。今天就下面这张图,让我突然想写点什么。

看到一篇文章的这张图,立刻在新浪“围脖”上晒了一把,留言道:“骑车运动中,稍后解释”。结果同僚回应道:“不用解释,一目了然”。其实如果真的就这些数字,的却是一目了然,但是如果你经历过开放服务的发展的话,其实这些数字仅仅只是现在的一个快照,你能看到的也就是现在的一个现状,对比昨天,才能知道今天的数字发生了什么变化,将来意味着会发生什么样的变化。

08年初,Ben的一句“两周能搞出一个雏形来,两个公司就合作开放服务”,我就误打误撞的开始研究和构建开放平台。当时国外Yahoo算是有一个像样的开放平台,Flickr APIYahoo开放平台使用最广泛的服务,在服务开放流程,安全性和服务接口设计上成为我设计借鉴的范例。但这仅仅是开始,要开放,其实有着更深层次的要求。看看下面两张服务市场占有率的图,比较一下08年和10年的情况

08年中旬 2010

Amazon PAAS类的服务,今天已经成为服务类型中占据第一位的服务,Social服务也随着Facebook占据了第二位。最近又开始热炒地理经纬的服务,其实就是Map服务的一个演变。上面的变化其实可以发现两点:

1. 技术的成熟使得PAAS的服务在高门槛背后成长的更加快。

2. 业务的成熟也会推动开放服务的不断发展,因为开放的目的就是用最简单有效的技术方式来实现业务创新。

上面的图片和信息都是来自于一篇关于GlueCon大会的报道,Glue?没错,胶水,我记得最近几次在淘宝技术大学介绍开放平台的技术体系架构的时候,都谈到快餐式的应用构建方式。在互联网创新需求的推动下,需要利用类似于麦当劳的快餐方式来Glue那些面包,生菜,牛肉快速满足用户需求变化。淘宝当年把线下开店搬到线上来,最终吸引客户的是什么?低风险,小投入(今天就未必了),尝试创业。今天要做一个互联网应用,是否也能够类似的有一个平台,不需要再关心域名,站点,推广,基础服务,那么就需要不同层次的服务提供商,从PAAS,到数据服务提供商,到流程服务提供商等等。

看看GlueCon的首页写的一些技术点:

一些老面孔,一些经历过的技术,接着后面将讲述自己在做开放平台的经历,我只是一个技术人员,分享的也就是技术学习的过程,没有创业的辉煌,没有专家的深度,有的就是一些感悟。

雏形

ASF,嗯,没看错,不是apache软件服务联盟,是应用服务框架。当你第一天觉得你要开放内部服务的时候,就需要审视一下你的后台架构体系,是否是能够开放的。也许有人会觉得开放无非就是将一些API封装一下以Http的某种方式暴露出去。对,“暴露”,当你内部就只有一条“遮羞布”的时候,一旦被人扯掉,你就真的暴露了。

因此,在阿里软件早期做SAAS的模式下,希望对内部架构做一次完整的服务化改造。其实今天的淘宝在开放初期也是经历了服务化改造的。服务化改造,在当时我学习的是OSGISCA两种框架模型,在模块化理念上两者基本上是一样的设计思路,但是OSGI在我看来更加适合应用模块化而非架构体系的服务化,因此在开源项目Tuscany 0.91版本的基础上构建了适合于开放服务体系的ASF,基于配置将业务模块化,服务的依赖和发布通过模块来申明。(其实到了Tuscany 1.0以后很多实现就是ASF定制改造的功能,具体对ASF感兴趣的可以看看我blog以前的说明,源代码估计随着Alisoft的结束而消失了)。模块化的推行并非一帆风顺,很简单,不论是开发人员和架构人员对于框架约束模块化的开发模式并不是很适应,同时由于框架本身也在不断成长,总会受到一些抱怨。其他不多说,这个阶段学到的几点:

1. 多一些业务性的指导要比冷冰冰的技术文档来的更有利于框架的推广。(很多时候模块化最大的问题就是粒度,拆分过细,导致依赖复杂,调试成本大,拆分过粗,服务隔离效果差,模块化作用淡化)一句话,没有不好的技术或者框架,只有不适合的技术和框架,任何好的技术和框架都要知道什么时候怎么用,不然就好比期望要一个能医百病的灵丹妙药一样不靠谱。

2. 邀请参与好过自上而下的推广。老大起先可能会很支持的帮你去自上而下的强制推广,但是任何一个产品或者框架的成熟需要使用来反向驱动改进,因此邀请更多的人参与,会让后期由被动转为主动。(这点说起来比较容易,但是做起来比较难,因为很多技术人员喜欢自己创造成就感,就算和别人一样挖同样的洞,深1cm也算是种成就感#_#)。不过在淘宝这边,感觉氛围还不错(不是广告,呵呵),有人愿意参与,有人愿意学习。简单来说这里的人有产品的观念,而非简单的技术观念,满足用户需求是基本,把自己的力气用在自己最擅长的地方,其他的借鉴或者使用兄弟团队的技术和产品。

SOAPREST。最早SAAS平台采用的是Web Service的方式来对外开放服务,原因是WS有成熟的多语言体系框架,同时WS配套的WS-Security是安全的基础保证。因此服务化都是采用WS的方式,身份认证也采用X.509证书的方式来认证,当然当时也采用平台颁发X.509证书(没有搞授权中心去授权),并且将证书内容保存到数据库和内存中,便于校验。但这个过程中,我们认为成熟被多语言支持的WS,却给我们搞了很多麻烦,.netjavaphp对于SOAP的理解在细节上还有很多偏差,特别是对复杂的对象类型,当然在证书上.net的技术专家一起陪着我们搞了许久,最后还是我们自己通过比较蹩脚的办法绕过了问题。

逐渐的将服务都转变成为REST的方式,轻量化的服务体系对于服务发布者或者使用者来说都是一种解脱。下面的图是当前REST方式和SOAP方式的使用量对比:

学到的:

1. 啥都要靠自己去实践才知道是不是真的靠谱。

2. 作对了99%是应该的,但是1%的问题没有处理好,那么就会降低用户体验,因为用户容易看到问题,而正常服务是被认为理所应当的。

成长

服务差异化。随着服务平台的成熟,接入的服务也各自呈现出他们的特点,一成不变的Http请求相应的交互服务模式在业务和性能上不能满足需求。类似于短信服务的异步消息,RSS类型的订阅消息,就需要平台支持异步回调。大数据量的服务(视频,文件上传下载),如果在经过服务平台中转数据流,就会导致带宽浪费,因此需要将安全校验和业务交互流程分离。

服务安全体系的变化。WS-Security到简化的OAuth 0.1 。没看错,OAuth0.1的简化版,那个年代什么东西都是新的,就和前面谈到的OSGISCAOAuth等等,因为国外的服务体系也是这一年半发展起来的。现在很多网站都标榜自己支持OAuth,支持Open ID等等,但其实去看看GoogleYahoo的大量API的安全体系,其实都是做了定制化,原因很简单,就是要在安全的同时尽量降低复杂度,提升可用性,多一次交互就会带来不稳定的因素。TOP和以前的阿软开放平台都是采用了一次令牌授权的方式,而OAuth则是采用了2种令牌,3次交互。其他优点没看出来,不过将安全信息放入到Http头中确实很好。我记得上次回邮件的时候说:“如果能够让我重新做一次协议制定,那么我会让平台安全逻辑完全无侵入业务协议”。一来保证业务协议的无侵入,二来在性能方面来说消息头的处理会极大降低异常服务判断及丢弃的应用系统资源损耗。

服务分流与隔离。很多技术我在以前的blog中都有描述,因此这里也就轻描淡写的说一下。后端服务者看来服务开放平台就是为他一家服务的,但是其实所有的服务在服务开放平台上是对等的,而服务当前多数以Http的应答模式开放,当后端服务处理出现问题时,那么服务平台的前端资源将被耗尽,间接影响到了其他正常的后端服务,因此需要对服务能够做分流和隔离。这里学习了LVSHaproxy的设计理念,在四层以简单的ip分流做对应用粗粒度的保护(大ISV有固定的一些ip),在七层两方面通过URL的服务名称做服务分流,再通过集中式缓存协同集群判断后端服务的可用性,在必要时部分切断中转,来保证其他服务的可用性。

Memcached成为基础组件。高速系统必须要有缓存来支持,因此当时选择了刚刚被推出广受好评的Memcached,系统运行期的服务访问控制和服务路由都靠集中式缓存来支持。但是集中式缓存最大的问题就是如何容灾,数据丢失就去数据库取,那么就会导致一些攻击使得系统奔溃,因此只能让集中式缓存有类似于服务器一样的HA冷热备份。考虑在服务端做基本不靠谱,一来我不熟悉C,二来如果在服务端做,那么就会演变成为分布式缓存,分布式缓存最大的问题就是数据一致性的问题。(几阶段提交,数据节点分区等等,复杂的设计带来的就是可用性和效率的降低,CAP就不再赘述了,看见几个缓存或者NOSQL的设计者一直都在谈CAPRWN数值关系的问题)因此变相考虑实现客户端来支持集群,客户端支持集群很简单的思想,就是多放一份,但是需求是,不影响效率(因此多放一份就不应该同步做),也要保证简单的数据一致性(根据算法优先获取或者存储固定节点数据,即同等节点在客户端来看不等同)。因此就搞了一个Memcached的客户端组件,本来只是希望做客户端集群效果,不过看了原始的BIO的效率不高,就顺带优化了一把,不过后来我现在的同事用NIO又做了一版。(NIO早期不适合用于老版本的Memcached协议,因为没有会话码)

服务流控。资源不收钱,那么自然不用白不用,因此有很多应用疯狂拉数据,从阿里软件的角度或者淘宝的角度都是不希望这样的情况发生的,因此出现了服务流控。对应用的频率和总量控制,一来保证了应用本身不会因为程序问题击垮后台服务,二来也提供了应用的层次设计,为应用良性成长奠定了基础。(当然商业上也有更多的想象空间)

以上都是自己还想得起来的一些技术点,感悟到的内容如下:

1. 量体裁衣,适用就好。有时候在做设计的时候容易陷入盲区,总认为流程就是这样走的,就好比第一个点中提到的关于业务数据流是否真的必须经过开放平台一样,其实安全校验通道和数据通道可以是不同的两个通道,数据通道在获取了安全认证以后可以拿着令牌去建立,这样就可以既满足需求,又降低了系统消耗。(其实和LVS的三种模式的演变很类似)

2. 系统先做繁再做简单。记得小学的时候老师总是和我们说,书是先读厚,然后读薄。这和我们设计系统一样,开始的时候我们往往会想得很全面,然后不断的增加复杂的设计来保证我们的业务可用性,但是后续会发现,复杂本身就是降低业务可用性的罪魁祸首,因此不断的审视需求,重构设计,最后以简单易扩展的方式满足业务需求。我上次和淘宝技术大学的新入职的同学说,我比在坐的优势就在于可以较快的从复杂的设计跳出做到简单的设计,这其实就是积累的经验,但是他们的优势在于可以看到一些经验背后的不足。

3. 从需求的角度看问题。分布式缓存最大的问题是什么,就是数据一致性,为了这个一致性不得不牺牲性能。而对于性能要求很高的场景下如何保证一致性和可用性,则可以从客户端实现数据冗余来做文章。另一个例子,现在TOP的分布式即时日志分析模型中数据获取部分是每个Slave主动请求去“拖”服务器的日志,而淘宝的监控系统则是在应用服务器上设置了Agent计算和收集日志并“推”送给单点,这一推一拖的差别在什么地方,监控系统也好,日志系统也好,最基本的前提是不能影响业务系统,推会导致谁都无法掌握主动权去控制非业务性需求对业务系统的影响,而拖则将主动权交给了非业务性需求,根据业务的适应情况,调节频率和处理内容的数量,有效的利用资源。(这其实就是需求角度看问题)

4. 技术并非无业务性。其实类似的流控,服务范围限定等等,都是提升业务想象空间的技术基础。这年头卖软件不赚钱了,卖服务,而卖服务也是差别化的服务,低层次的免费体验,高层次的增值收费,产生良性循环。

5. 不要盲目崇拜。有同学和我说TOP支持OAuth么?这么流行的不支持,不太好吧。咋们是实在人,在没有服务好用户以前先不想着贴牌子在身上。我自己也是G的粉丝,但是很多时候对于新技术而言需要的是一种嗅觉和辨别能力,不然闻到G拉屎都觉得香了。我虽然转到淘宝才10个月,但是是3个同学的师兄(淘宝的新人都需要一个师兄),其中有个大学刚毕业的同学,开始的时候写代码就开始套模式,有新技术就考虑学一把。代码被我要求返工了4次。和他后来谈起的时候,说到对于新技术的学习,其实为了看见牛的时候能够记得起有一把牛刀可以用,而不是整天提着一把牛刀满大街砍小鸡。还是那句话,找到合适的场景,在去深入学习和了解技术背后的思想。

困顿

淘宝“出逃”。09年初,淘宝开始搭建自己的开放平台TOP,原因很简单,淘宝需要的是淘宝服务开放平台,而非一个服务集成平台,服务集成平台对于专业化和产品化运营API是较为不利的。于此同时产品化服务这个词开始慢慢进入我的脑子。

北京的搜索团队,支付宝都和我交流过关于开放的考虑,但是一系列问题却问倒了我,也问倒了他们,为什么要开放,客户群在什么地方,应用形态是怎么样的?其实就是API产品化的问题,对于没有开放过的服务提供者来说都是抱着尝试的态度去做开放,但是基本上不靠谱(国内的技术能力和创新意识都还处于初级阶段)。看到早期的SNS开放出来其实还是以传统意义的桌面版游戏结合SNS的互动产生效果。而类似于搜索,支付这些专业化程度较高的服务,开发者如何去使用,安全性如何保证,其实都还很模糊。

到了0945月份,开放平台逐步转变成为内部服务平台,技术驱动力随着商业目标的模糊越来越弱,5月底我要求做最后一个版本SIP5.6,然后就暂时终止继续开发。

产品化

098月,阿里软件被多家子公司合并,我主动要求从云公司来到淘宝,因为我还有没有完成的目标,开放平台,同时也只有在这里我才会体会到产品化的含义,踏踏实实的在我30岁的时候经历一个产品,而不在存粹的技术实验室中打滚。

有点晚了,明天继续写…(可能要写如下)

1. 透明化(系统,业务)

2. 客户第一(服务可用性,易用性,商业价值)

3. 平台要死哪里是致命的一击

分享到:
评论

相关推荐

    国家开放大学答案基础写作课程形考任务1.pdf

    本文档是国家开放大学答案基础写作课程形考任务1.pdf的知识点总结,主要讲解了写作中“言之有物”的概念,并解释了材料和思想两方面的因素对写作的影响。此外,还讨论了材料的选择和思想的提炼在写作中的重要性,...

    部编版道德与法治五年级上册《7中华民族一家亲》教学反思(两篇).pdf

    知识点三:地理、社会、文化、法治教育 * 本节课融地理、社会、文化、法治教育于一体,旨在培养学生的多元化知识结构。 知识点四:学生主体作用 * 本节课的教学设计关注学生的主体作用,通过小组之间的分工及配合...

    Java开源的下一代社区平台Symphony.zip

    简介 Symphony([ˈsɪmfəni],n.交响乐)是一个现代化... NetBeans:全宇宙暂时排名第三的 IDE IntelliJ IDEA:全宇宙暂时排名第二的 IDE 下一代的社区系统,为未来而构建 标签:java社区 symphony

    三年级语文下册 5 古诗两首1教案 西师大版 教案.doc

    西师大版三年级语文下册教材中的“古诗两首1教案”为我们提供了一个系统的教学模型,它详尽地展示了如何引导学生学习和欣赏古诗,以及如何在教学过程中实施多样化的教学方法。 首先,在导入阶段,教师需要通过生动...

    三年级语文上册 第五单元 17《古诗两首》教材解析赏析素材 鲁教版 素材.doc

    在三年级语文上册的学习旅程中,学生们将遇到《古诗两首》这一单元,这一单元精选了两首在中国文学史上享有盛誉的古诗词——《望天门山》和《饮湖上初晴后雨》。这两首作品不仅呈现了古代文人对自然山水的独到感悟,...

    三年级语文上册 一株老树和两个怪人教案2 冀教版 教案.doc

    《一株老树和两个怪人》是冀教版小学三年级语文上册的一篇课文,通过对这篇课文的教学设计,我们可以看到冀教版在教学理念上的一个缩影。本文将详细介绍教学目标、情感目标、能力目标,并对整个教学过程进行解析。 ...

    网络安全扫描课程设计

    - **面向连接TCP扫描**:基于TCP协议,通过建立三次握手完成连接建立,以此判断目标端口是否开放。TCP扫描又细分为多种类型,如TCP Connect扫描、TCP SYN扫描等。 - **TCP Connect扫描**:最直接的方式,直接尝试...

    六年级下册课内阅读语段--附答案.doc

    【标题】和【描述】提及的文件是小学六年级下册语文课内阅读材料,包含三个部分:《学弈》、《两小儿辩日》和《桃花心木》。以下是根据这些内容提炼出的相关知识点: 1. **《学弈》** - 作者:《孟子·告子上》中...

    三年级语文下册第一单元1古诗三首惠崇春江晚景诗词解析素材新人教版20200503251

    特别是“三两枝”的表述,既形象地描绘出桃花稀疏开放的景象,又给人一种春意盎然、新生命初露锋芒之感。 诗的第二句“春江水暖鸭先知”是苏轼诗中的经典之笔。在这里,诗人用鸭子对水温变化的敏感反应,巧妙地传达...

    研究创智课堂 促进深度学习.pdf

    切入点应选择在文本学习的重点、儿童认知的冲突点和课程学习的难点三者交汇的地方。此外,课堂作业的设计也应以学生为中心,提倡学习单式操作,通过精心设计的预学单、合作单、助学单和延学单,让学生完成学习后能够...

    七年级语文上册第30课《杜甫诗三首——望岳、春望、石壕吏》同步练习鲁教版.doc

    通过以上分析,我们可以深入理解杜甫和韩愈两位诗人在不同时代背景下对生活的独特感悟和艺术表达,以及他们如何通过诗词传递情感和思想。这些知识点不仅涵盖了文学史上的重要人物,还涉及了诗词体裁、表达技巧、字词...

    2015《文化创新的途径》.doc

    教学目标分为知识、能力和情感态度价值观三个层面。知识目标要求学生掌握文化创新的根本途径——社会实践,以及两个基本途径——“继承传统、推陈出新”和“面向世界、博采众长”。同时,要理解不同文化间的交流、...

    三年级语文下册 放风筝教案 人教版 教案.doc

    《放风筝》这一课,作为教学内容的载体,以其生动的情境和丰富的想象空间,为教师提供了绝佳的施教平台。 首先,教案将教学目标分为三个层面:认知、情感和能力。认知层面要求学生掌握新字词,并理解课文内容;情感...

    最新北师大版四年级语文下册第三单元试卷.pdf

    综上所述,北师大版四年级语文下册第三单元试卷不仅涵盖了大量的语文知识点,更重要的是,它以一种富有创意和实用的方式,引导学生全面提升自己的语文素养。试卷的每一部分都旨在帮助学生搭建起坚实的语文基础,锻炼...

    小学语文三下全册教学反思.doc

    这种开放的教学方式符合新课程标准,强调自主、合作和探究的学习方式,以及建立开放的语文课堂。学生能够联想到“出淤泥而不染”等诗句,表明他们已经开始运用已有知识进行思考。教师应当鼓励这种独立思考,提供足够...

    在反思重建中前行小学数学新基础教育工作计划总结.doc

    通过前埔南区小学和生态圈其他学校的开放活动,教师们直接感受到了新基础教育的课堂评价观,积极参与,不断感悟,逐渐融入新基础教育的课堂氛围。 二、重建中的实践 教师们将所学应用于课堂实践,通过重建教学,将...

    艺考播音主持模拟考试题目.doc

    通过提供的两篇文学稿件,我们可以提炼出以下几个知识点: 1. 文学稿件的情感传达:稿件中的文字描绘了对生活、命运的深刻感悟,以及对未来的期待和努力,要求考生能把握住作者的情感脉络,以恰当的声音和情感表达...

    三年级语文下册 微笑着承受一切教案 苏教版 教案.doc

    其次,让学生学习并掌握课文中出现的12/11个生字,理解这些生字组成的词语,并能用“康复”和“意外”这两个词语造句。生字和词语的学习是语文教学的基础,有助于学生在阅读中准确理解词义,丰富语言表达。最后,...

    关于linux内核以及其他个人体会的文集

    本文集是作者近两年来的心得体会,涵盖了 Linux 内核、操作系统设计、编程思想、Windows 操作系统对比、数学和算法、Java 小文、个人思想等多方面的内容。下面是从标题、描述、标签和部分内容中生成的相关知识点: ...

    基于Matlab的大学物理实验数据处理系统 (1).pdf

    该系统在Matlab 6.1图形用户操作界面(GUI)平台上开发,整个程序结构与一般的Windows编程类似,由系统初始化部分和各种控件的响应函数组成。系统初始化程序段使用Matlab函数进行GUI设计,包括了文件读取、颜色方案...

Global site tag (gtag.js) - Google Analytics