写点什么

淘宝网架构师岳旭强的年度展望

  • 2010-03-08
  • 本文字数:2362 字

    阅读完需:约 8 分钟

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

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

数据扩展性探讨和总结

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

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

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

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

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

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

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

关注系统和人的交互

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

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

上面的两个例子都是对人的关注缺失,技术人员做系统,大部分都更关注技术,而忽视技术的创造者和使用者——人。软件或服务的可测试性是对测试人员的关注、可维护性和可管理性是对运维人员的关注,而一个框架的易用性是对所有使用人员的关注。除非能做出自己进化的 Skynet(注:Skynet(天网)出现在《终结者》系列电影中,是一个人类于 20 世纪后期创造的以计算机为基础的人工智能防御系统,最初是研究用于军事的发展。天网在控制了所有的美军的武器装备后不久,获得自我意识,并且认定人类是它存在的威胁。于是立刻倒戈对抗其创造者,采用大规模杀伤性武器(甚至核暴)来灭绝全人类。),否则还是要多关注系统和人的交互。

关注可用性

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

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

免责声明:我很现实,为解决问题和完成工作不择手段,并且不懂架构是什么意思,以上观点如有雷同,纯属巧合!如有异议,欢迎拍砖!


个人简介:岳旭强,淘宝网技术专家。2004 年加入淘宝,见证了淘宝网业务以及技术上完整的发展过程;在过去 5 年的时间中,参与了淘宝几乎所有核心系统改造,并主导了用来支撑淘宝网未来高速发展的核心业务中心的建设。岳旭强现在负责网站整体业务架构的设计和规划,在大型交易网站的设计和调优方面有丰富的经验。

2010-03-08 05:3218548

评论

发布
暂无评论
发现更多内容

butterfly美化日记(一)

程序员余白

Hexo butterfly 博客配置 11月月更

Apache Doris Join 实现与调优实践|未来源码

MobTech袤博科技

Vue基础学习(三)

Studying_swz

Vue 11月月更

鱼传科技:函数计算,只要用上就会觉得香

阿里巴巴云原生

阿里云 云原生 函数计算

什么是入侵检测系统?有哪些分类?

wljslmz

网络安全 11月月更 入侵检测 IDS

如何解决产品知识培训问题?

Baklib

是谁的请求导致我的系统一直抛异常?

阿里巴巴云原生

阿里云 微服务 云原生

【愚公系列】2022年11月 微信小程序-app.json配置属性之tabBar

愚公搬代码

11月月更

基于HTML5的爱心表白动画特效

芯动大师

HTML5, CSS3 11月月更 爱心代码

vue数据代理

我搬去水星了

vue cli 11月日更 11月月更

简单概述理解vue的MVVM模型

张三丰无极

vue cli 11月日更 11月月更

快速实现无人车远程控制开发——实践类

阿里云AIoT

阿里云 物联网 远程控制

华为全联接2022 openEuler 累计装机量达 245 万套,市场份额 22%,助力企业高效进行操作系统迁移

Geek_2d6073

为什么要做数据分析

穿过生命散发芬芳

数据分析 11月月更

体验不尽,进化不止,看视频云技术六大创新

阿里云CloudImagine

阿里云 视频云 云栖大会 2022云栖大会

算法题学习---判断链表中是否有环

桑榆

算法题 11月月更

文档管理系统平台:实现文档管理现代化

Baklib

腾讯蓝鲸 API 网关如何借助 APISIX 实现产品升级与业务完善

API7.ai 技术团队

云原生 API网关 APISIX 客户案例

让开发者成为决定性力量,华为开发者英雄汇圆满落幕

华为云开发者联盟

云计算 华为云 企业号十月 PK 榜

管控内部威胁,数据如何安全使用?

极盾科技

数据安全

利刃出鞘 | 从五大核心技术来看Bonree ONE 2.0的全球竞争力

博睿数据

可观测性 核心技术 智能运维 博睿数据 ONE平台

化繁为简|AIRIOT智慧水务信息化建设解决方案

AIRIOT

物联网 智慧水务

下一代龙蜥操作系统 Anolis OS 23 公测版正式发布|2022云栖龙蜥实录

OpenAnolis小助手

开源社区 龙蜥操作系统 分层分类 2022云栖大会 Anolis23

手动在CentOS7.4环境下,安装MySQL5.7.X版本的方法。

@下一站

MySQL 程序猿 11月月更

月日均AUM提升40倍!看这家银行如何做好网金客群分层经营?

索信达控股

科技 客户分群 网金客群

【iOS逆向】小陈手牵手带你看懂iOS伪代码

小陈

移动安全 iOS逆向 ios安全

2022-11-10:写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率。 为了简单起见,你可以假设: words.txt只包括小写字母和 ‘ ‘ 。 每个单词只由小写

福大大架构师每日一题

bash Shell 福大大

“工程化”对于大型数据平台而言,意味着什么?新一届StartDT Hackathon来了

奇点云

数据平台 奇点云

什么是API

阿泽🧸

API 11月月更

HMS Core的AI之力与开发者的英雄本色

脑极体

Prometheus Native Histograms 实现原理及应用

Grafana 爱好者

云原生 可观测性 Prometheus 11月月更

淘宝网架构师岳旭强的年度展望_Java_岳旭强_InfoQ精选文章