`
andrew1024
  • 浏览: 74269 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

淘宝网架构师岳旭强的谈网站架构

阅读更多
“一场危机赢得高度关注的时候,它已经不是危机,人们是要处理这个危机。”——马云

2009年是挑战和机遇并存的一年,对大部分人来说,已经习惯了金融危机,并努力解决危机。在技术圈子也一样,被裁员的肯定也找到了工作,所以都在踏实做技术。言归正传,先念叨念叨2009年的一些故事,寻个回忆,找个乐子。
数据扩展性探讨和总结

金融危机是电子商务的机遇,所以09年是淘宝高速发展的一年。当一个网站从百万、千万记录的数据规模,增长到亿、十亿、几十亿记录的数据规模时,是一个量变到质变的过程,单纯的硬件升级已经达到了瓶颈,而需要在整体结构上做文章。09年一年,大部分时间都在数据的扩展性上努力。

对于一个电子商务网站来讲,订单是最核心的数据,也是增长最快的数据。对于数据的扩展性来讲,最传统也是最简单有效的模式是数据库的分库分表。当订单和分库分表相遇,会有什么火花迸发出来?09年初碰撞了很久,结果产生的火花很小。最大的问题在于数据分割的规则,无规则的水平分割肯定会带来数据合并的开销,而按照业务规则拆分,会因为买家和卖家的查询需求不同而导致数据不能分割,唯一可行的火花是把订单双份保存,买家卖家各自一份,只是成本比较高,而且对数据同步的要求非常高。

于是我们初步决定按照双份保存的方式拆分订单,而有一天,仔细查看了订单访问的情况,发现订单数据库90%以上的压力来自于查询,而查询中90%以上的压力来自于非核心业务,仅仅是订单数据的展现,对一致性和实时性的要求很低。

因为数据量大,造成数据库压力大,天然想到的是分散压力,其办法就是分库分表。有些时候我们想问题不妨直接一点,既然压力大,能不能减小压力呢?通过对订单访问情况的了解,发现昂贵的主数据库,有80%以上的压力给了不重要的需求,这个就是我们优化的关键,所以订单最后采用了读写分离的方案,高成本的主数据库解决事务和重要的查询业务,80%以上不重要的读,交给了低成本的数据库服务器来解决,同时对数据复制的要求也很低,实现无太大难度。

另外一个有意思的案例是商品的数据扩容,商品的水平分割非常容易,按照卖家进行拆分即可。有了订单的先例,首先想到了读写分离,因为成本可以做低。开始实施后一段时间,又仔细回想了一下商品的整体需求,突然发现商品其实不需要和订单同等的要求,一定要采用高成本的主数据库吗?全部采用低成本的普通服务器来做数据库是否可行?经过仔细的评估,发现是可以接受的,而这样就导致之前已经启动的商品读写分离项目的一部分工作白做了!

故事讲完了总是要有点总结,来点虚的先:对于原始需求的清晰了解是系统决策的前提,否则弯路肯定要走,而对原始需求的了解并不容易,中间会有很多干扰和阻力,前面的实例看起来很简单,但是在一个运行了5年的系统上来了解本质,来进行变更,并没那么容易。另外,经验有些时候会成为系统决策的障碍,这个很矛盾,所以需要有归零的心态来思考问题。说到底,回归本源。

再来点稍微实际一点的,对于大型分布式系统的数据访问,一个统一的数据层是非常必要的,封装水平、垂直的数据分割,封装读写分离,封装数据访问的路由、复制、合并、搬迁、热点处理等功能,并且要对应用透明,应用针对性的,可以在JDBC层面包装,数据库针对性的,可以在数据库协议层包装,比如 Amoeba。
关注系统和人的交互

还有一个故事,在数据层的前期版本,为了做到透明的路由,曾经采用无SQL的方式,所有的数据库访问都是写代码来做。上线后发现一个非常痛苦的问题,无法和SQL对应,排错非常难。曾经一次DBA发现数据库上一个查询耗费太多资源,把优化后的SQL给开发人员改进,开发人员好几天没找到具体是哪个查询。

另外一个在2009年的感触是业界服务化的实施情况,很多组织都在实施服务化,系统层面都很成功,通信、负载均衡、消息系统、服务容器等都有很多成果,但是实施一段时间以后的效果并不是非常好,依赖复杂,变更混乱,效率低下。究其根本,是对人的关注不够,缺少的产品化的服务运维,缺少服务治理。

上面的两个例子都是对人的关注缺失,技术人员做系统,大部分都更关注技术,而忽视技术的创造者和使用者——人。软件或服务的可测试性是对测试人员的关注、可维护性和可管理性是对运维人员的关注,而一个框架的易用性是对所有使用人员的关注。除非能做出自己进化的Skynet(注:Skynet(天网)出现在《终结者》系列电影中,是一个人类于20世纪后期创造的以计算机为基础的人工智能防御系统,最初是研究用于军事的发展。),否则还是要多关注系统和人的交互。
关注可用性

还有一个感触是业界对可用性这个基本指标的关注度不够。几乎所有的框架都会说自己的扩展性多高,性能多好,而很少会提到监控有多强、排错有多容易,很少提到在故障时怎么做隔离,怎么做降级;从这个角度看,商用的产品确实做得好很多;关于性能相关的文章搜索一下,很多,各种优化策略,各种优化方法,而可用性方面,找到的系统性的知识真的很少;希望是我了解的不多。

回顾过去,展望未来。2010年,很多可以做的事情,面向服务系统的隔离和降级、系统可维护性的提高、协程和异步模式在web应用的全面使用……

免责声明:我很现实,为解决问题和完成工作不择手段,并且不懂架构是什么意思,以上观点如有雷同,纯属巧合!如有异议,欢迎拍砖!
个人简介:岳旭强,淘宝网技术专家。2004年加入淘宝,见证了淘宝网业务以及技术上完整的发展过程;在过去 5年的时间中,参与了淘宝几乎所有核心系统改造,并主导了用来支撑淘宝网未来高速发展的核心业务中心的建设。岳旭强现在负责网站整体业务架构的设计和规划,在大型交易网站的设计和调优方面有丰富的经验。
分享到:
评论

相关推荐

    架构师的自我修养pdf

    在当今IT行业,架构师的作用越来越被人们所认识和重视。架构师的职责不仅在于技术层面的领导,还涵盖了从系统设计到维护的全过程。一个优秀的架构师不仅要精通技术,还需要具备良好的沟通能力、管理能力和对业务的...

    架构师成长之路,架构师成长指南

    《架构师成长之路》这本书是为那些志在成为优秀架构师的IT专业人士量身打造的指南。它深入探讨了架构师的角色、职责以及如何在职业生涯中逐步提升自己的技能和视野,以适应快速变化的IT环境。 一、架构师的角色与...

    软件架构师教程 软件架构

    0_架构师与设计师.pdf 01_软件流程实施方案选择.pdf 02_软件架构文档设计.pdf 03_软件架构风险管理.pdf 04_如何描述和评估软件架构质量.pdf 05_设计模式与软件架构设计.pdf 06_AOP开发实践.pdf 07_软件架构通用服务....

    一线架构师实践指南 电子书

    《一线架构师实践指南》是一本专为有志于或已经在IT行业中担任架构师角色的专业人士准备的电子书籍。该书旨在提供实用的、一线的架构设计与实施经验,帮助读者提升自己的专业技能,理解并解决实际工作中遇到的挑战。...

    历年高级系统架构师真题

    系统架构师是一个在IT行业中至关重要的角色,他们负责设计、规划和实施复杂的计算机系统,以满足业务需求。历年高级系统架构师真题是备考这一专业资格考试的重要参考资料,涵盖了从2009年至2017年的历年试题,旨在...

    软件架构师应该知道的97件事.pdf

    软件架构师作为一个专业领域的高级职位,其核心职能包括确保软件系统的稳定性、可扩展性和安全性等。根据提供的文件内容,软件架构师应该了解的知识和技能是多维度的。以下是对文件内容中提到的关键知识点的详细阐述...

    完整版—架构师之路(58沈剑).rar

    《完整版—架构师之路(58沈剑)》是一份深入探讨软件架构设计与实践的宝贵资料,共计322页,由业界知名专家沈剑编著。这本书旨在为那些希望成为优秀架构师或者正在从事架构工作的专业人士提供一套全面的知识体系和...

    软考架构师配套讲义.rar

    《软考架构师配套讲义》是一份针对国家软考(即全国计算机技术与软件专业技术资格(水平)考试)中的架构设计师级别的学习资料。这份压缩包包含了一个名为“软考架构师配套讲义.pdf”的文件,是为准备参加该考试的...

    java 高级架构师教程,java 高级架构师教程,java 高级架构师教程,java 高级架构师教程,java 高级架构师教程

    java 高级架构师教程,java 高级架构师教程,java 高级架构师教程,java 高级架构师教程,java 高级架构师教程,java 高级架构师教程,java 高级架构师教程,java 高级架构师教程,java 高级架构师教程,java 高级...

    华为架构师8年经验谈:从单体架构到微服务的服务化演进之路(李林锋 DBAplus社群)

    根据提供的文件信息,以下是对华为架构师李林锋在DBAplus社群分享的“从单体架构到微服务的服务化演进之路”中涉及知识点的详细解析。 ### 传统应用开发面临的挑战 #### 研发成本高 传统应用开发面临的主要挑战之...

    软考材料合集-系统架构师.rar

    《软考材料合集-系统架构师》是一个针对国家计算机技术与软件专业技术资格(水平)考试,特别是系统架构师级别的备考资源压缩包。系统架构师是IT领域中的高级职位,负责设计、规划和管理企业的信息技术架构,以确保...

    架构师的自我修养.docx

    架构师的自我修养 架构师是高阶职位,需要具备深入的技术知识和丰富的工作经验。架构师的本质是更高级更资深的程序员,需要具备高级工程师之上的能力和知识。架构师的经验体现在能够设计和实现复杂的分布式系统,...

    软件系统架构师(电子书)

    《软件系统架构师》这本书是为那些希望深入理解软件架构设计和实践的读者精心准备的。作为一本电子读物,它涵盖了软件架构的基础知识、关键概念以及实际应用,旨在帮助读者提升在软件开发领域的专业素养。 软件系统...

    软考系统架构师真题

    《软考系统架构师真题解析》 软考系统架构师考试是中国计算机技术与软件专业技术资格(水平)考试中的高级别认证,旨在测试考生在信息系统设计、架构规划、技术选型、项目管理等方面的能力。历年真题是备考的重要...

    java架构师是什么?58套java架构师资源870G进阶架构师学习.pdf

    Java架构师是软件开发领域中的一个关键角色,他们负责设计、规划和实施复杂的Java应用程序的架构,确保系统的稳定性、可扩展性、性能和安全性。在深入理解业务需求的同时,Java架构师还需要具备广泛的技术知识,包括...

Global site tag (gtag.js) - Google Analytics