本文作者陈睿|mike,优知学院创始人,曾先后在淘宝、百度、携程带领技术、产品等团队。
优知学院,是首家互联网技术&产品学习社区,提供系统的技术&产品晋升学习课程,也定期提供深度互联网产品观察&互联网最新技术动向。
“
今天我们重点说淘宝最重要的一次架构演变,这次演变在整个淘宝发展历程中算是最具决定性的一次,没有之一!
这套架构体系,如果你能用心掌握,足可以帮助你在任何一家互联网大公司站稳脚跟!
淘宝技术发展历史前一篇文章“一位亲历者眼中的淘宝技术架构发展之路”,已经写过淘宝技术架构前两个阶段的发展历程。
今天我们重点说淘宝最重要的一次架构演变,也就是第叁到第四阶段。
1.从人员的角度。
维护一个代名工程Denali的百万级代码怪兽(虽然物理部署是分离的),从发布到上线,从人员的角度,百号人同时在一个工程上开发,一旦线上出问题,所有代码都需要回滚,从人员的角度,也基本忍受到了极致。
2.从业务的角度
淘宝淘宝包含太多业务:用户、商品、交易、支付...等等,代码已经严重影响到业务的效率,每个业务有各自的需求,技术需要快速跟上业务的发展步伐。
3.从架构的角度
从数据库端oracle数据库集中式架构的瓶颈问题,连接池数量限制(oracle数据库大约提供5000个连接),数据库的CPU已经到达了极限90%。数据库端已经需要考虑垂直拆分了。
从应用横向角度,需要走向一个大型的分布式时代了。
4.从公司的角度
基本处于硬件横向扩展(服务器端按照层次物理部署),随着淘宝的访问量越来越大,横向部署扩展很快将到头,从架构的前瞻性角度来讲,这次架构调整晚做不如早做,否则越到后面越棘手,长痛不如短痛,是时候做出决断了!
5.从借鉴的角度
以上任何一条,足可以推动整个技术架构往后延伸。这里也不得不提到一点,淘宝的整个技术架构的发展,离不开整个java体系开源的力量,以及当时技术更为先进的前辈。这些包含ebay、google等,淘宝当初从他们身上借鉴和学习到的特别多,从技术架构的角度。淘宝后面的tddl这就是直接从ebay的dal身上借鉴而来,以及tfs(从google的gfs参考而来)。类似的参考桉例还有很多很多,今天我们重点还是继续谈这次架构演变。
问题了都暴露出来了,关键是怎样去解决,用怎样的思路开启?
怎样来解决如此棘手的问题当你面临以上严峻问题,这个阶段需要痛下决心,是否需要把这些问题彻底解决?
如果你要彻底解决,你肯定需要付出巨大的代价。这次淘宝架构演变无疑是最具决定性的一次,也是周期最长,挑战最大的一次。系统将按照职责和业务进行垂直拆分,努力去打造一个大型的分布式应用以及廉价的服务器集群时代。
1.首先工程代码垂直拆分
把整个工程代码denali按照业务为单元进行垂直拆分,还需要按照业务为单元进行单独的物理部署。
淘宝就把denali按照业务为单位拆分成了类似这样的系统:UM(UserManger)、SM(ShopManager)..等等几十个工程代码。
2.所有接口访问垂直拆分。
按照业务为单位,把所有调用相关的接口以业务为单元进行拆分(早期可以把接口放在上面的工程里,通过服务暴露接口),以后再考虑单独部署。
比如,一个店铺系统,需要访问一个用户的头像的接口,用户头像的接口是独立部署在用户中心(UIC)这边的集群服务器上的。随着拆分的进行,淘宝的业务接口中心就变成了:UIC(用户中心服务)、SIC(店铺中心服务)等等以业务为单元部署的集群。
如果涉及到独立部署,这里就涉及到接口底层通信机制。由于淘宝的访问量特别大,从早期就意识到需要定制一个自己定制的通信框架,也就是如今的HSF:一个高性能、稳定的通信框架,并且支持多种不同的通信和远程调用方式。走到这一步涉及的知识体系非常的多,要求对通信、远程调用、消息机制等有深入的理解和掌握,要求的都是从理论、硬件级、操作系统级以及所采用的语言的实现都有清楚的理解。
3.淘宝的中间件开始形成自己的矩阵。
如果仔细查看,你会发现中间件基本都是在解决数据库端的瓶颈为主,比如oracle的连接池限制、以及减少对数据库的访问,需要中间的分布式动态缓存来减少数据库端的访问,以及减少对数据库的访问,把大量的小文件(图片等)存储在廉价的硬件服务器上,以及到了后面为什么淘宝要坚定的去IOE(IBM的小型机,Oracle的数据库,EMC的存储设备),其实基本都是基于数据库
端的压力。
当你走到了去IOE阶段,一定是数据库服务器端节点之间的通信已经成为瓶颈,以及各个节点对数据的访问控制将受制于事务处理的一致性等问题,还有受限于磁盘的机械转速与磁臂的寻道时间,以及受限于磁盘存储性能提昇缓慢等问题。随着访问量越来越大,这些瓶颈早晚会碰到,这就是阿里厉害的地方,这是一家强控制的企业。这些必须要自己控制,所以去掉IOE就变得很合理了,没有什么轰轰烈烈的壮举了。一切都是为了赢取业务的需要。当然,这里面也有阿里云的考虑,毕竟这些服务要全面开放出来。关于IOE这个话题,以后再详细说。
大家比较了解的分布式缓存Tair、分布式文件存储TFS、异步通信Notify、淘宝数据库Tddl、淘宝Session框架等等就属于淘宝中间件团队(底层架构组)。
4.数据库端按照业务为单位进行垂直和水平拆分
按照业务为单位进行垂直拆分数据库,拆分完后就是:交易数据库、用户数据库、商品数据库、店铺数据库等。
这里还有涉及到的数据库的选型,垂直拆分的时候,把除核心系统(交易等)之外的数据库,选用免费的mysql为好,毕竟oracle太贵了,非核心系统用oralce完全没有必要。
还有就是水平扩展,分库分表,再结合读写分离一起。当然,分库分表需要涉及到对应的SQL路由规则主库备库等,所以淘宝就设计了一套TDDL来解决这些问题,应用端只需配置对应的规则即可,对应用端的没有任何侵入的设计。
5.需要整理业务和接口等依赖关系
将一个庞大的应用拆分需要耗费很长的时间,需要进行业务的整理和系统依赖关系等等,比如,常用的访问接口单独提供出来服务,调用这个接口方要考虑依赖关系。
6.淘宝商品搜索引擎ISearch
毕竟海量的商品需要搜索,需要强大的搜索引擎。采用自己开发的ISearch搜索引擎来取代在Oracle数据库中进行搜索,降低数据库服务器的压力。做法比较简单,每天晚上全量将Oracle小型机的数据dump出来,Build成ISearch的索引,当时商品量也不大,一台普通配置的服务器,基本上可以将所有的索引都放进去,没做切分,直接做了一个对等集群。
7.淘宝开始建立自己的独立CDN基站等基础设施
8.需要建立自己的运维体系
用于解决依赖管理、运行状况管理、错误追踪、调优、监控和报警等一个个庞大的分布式应用的情况。淘宝的这个系统叫淘宝的哈勃望远镜。
9.机房容灾等
还要考虑如果线上出问题后,需要有备用机房工作,也就是我们常说的机房异地容灾,保证哪怕断水断电,不能断淘宝。
真实的演变过程中还会借助像提昇硬件配置、网络环境、改造操作系统、CDN镜像等来支撑更大的流量,因此在真实的发展过程中还会有很多的不同,另外一个大型网站要做到的远远不仅仅上面这些,还有像安全、运维、运营、服务、存储等等。
今天就写到这了,如果你还有更多想了解的内容,还请关注优知学院。也可以访问优知学院官网,免费报名参加线下的活动了解更多内容。
本文作者:让我先冷静一下
不看标题 之看题图的话 你知道这篇是要晒啥不?
关注了本站的“白菜君”,每天叁轮白菜集锦和间歇性超值白菜爆料不停。
作为一名理智的消费者,不能看到便宜的就买,只有看到需要的东西有便宜又好用的才买。
比如说这款“Readson 键盘腕托 60/87键版 ”29.9用券减20,实付9块9。
国内
Readson 键盘腕托 60/87键版9.9元包邮(需用券)
键盘手托(腕托)本人已经买过多块了。手头的几块都是胡桃木的,但是作为一名桌面装备党,一直对桌面装备有着更好、更齐、颜值更高的追求。几个月前定制了一块屌炸天的脂木拼接手托,类似这样的:
东西看上去很厉害,所以价格当然也很厉害。
等了有四个多月了,却迟迟还没收到(商家解释作坊遭遇了强拆。。。。。。)
所以一看到白菜君推荐的9块9PU手托,第一感觉是“这么便宜的,能用?”,翻看评论却发现用过的都说好。反正便宜,就买两个玩一下咯。(每个淘宝号只能领券一次,不得不动用备机号码注册淘宝才下了第二单)
为什么要买两个?因为手边的键盘,87键和60键各占了一半左右。
因为收到的时候没想到会写这个晒单,所以没有保留包装也没有给包装拍照。毕竟是9块9包邮的东西,印象中的包装好像是很简陋的,好在东西给力。东西给力就是一百分,那些包装一层又一层,花里胡哨的廉价小赠品一大堆的淘宝店家反而会引起我的厌恶。
好了,没有包装,手托我也用了一阵了,选择原创类型的时候,把这篇分类到“开箱晒物”有一点点奇怪。
下图就是白色的87键键盘手托,干干净净,平平无奇。但是一眼看上去,绝不是9块9包邮的便宜货!
近看,细节并不完美,边缘的弧度不自然
直线的缝制走线令人满意:很直,间距一致。
底面,黑色纤维面包裹,里面应该是一块硬塑料板,起支撑的作用
底面的缝线是黑色,正面的缝线是白色。细节决定了产品的优秀外观。
底面的纹路是细密的十字纹,单格的长度不到两毫米。因为太细密了,且不柔软,造成了底面与桌面的摩擦很小,非常容易滑动。所以这款手托有带防滑垫的版本,价格贵很多。卖的总是比买的精?
看动图感受一下,在同样也很细密的鼠标垫上,这块手托简直像是在熘冰一样
解决方法总是有的,请接着看
缝线收边的“底座”部分,由白色的表面层和黑色的底面层缝合组成,白色部分有个别不平整。
“底座部分”的总厚度是6毫米。
刚刚好,嵌入我这块filco键盘的边框下
手托长度与87键机械键盘刚刚好匹配
手托的高度也不会挡住键盘的logo
在“嵌入”后,摩擦力大了很多,就像是键盘与手托完美合体
来看一下“合体”后的整体效果
再来看看手托的表面部分,号称使用“进口PU皮革材料”,做成的效果是皮具非常常见的“荔枝纹”
PU材质彷皮逼真度很高,无论是观感还是触感,而且整块手托没有任何劣质材料的异味
用手指按压下去,比较紧实。商家介绍里写的填充物是“优质海绵软性材料”
整个表面给人的感觉是细腻、柔软、弹性适中
真正作为手托(腕托)使用,宽度完全够,弹性够,抬手立刻回弹到恢复平整
整个掌心部分的一半以上面积可以靠或趴在这个手托上,明显降低了手腕的疲劳度。
比起实木材质的手托,这种“软手托”更不易疲劳。但会更容易粘手,更适合用来办公打字,也更适合在气温不高的情况下使用。
除了白色的87键,试试与其他颜色的键盘搭配。以白色配白色90分为基准主观打分
黑壳 大碳键帽组搭配白色手托,配色和适度75分
银灰壳 熊猫配色键帽组搭配白色手托,配色和适度88分
晒完白色87键适用手托,接着看看黑色60键适用手托。
宽度与87键款一致(均为8.8厘米)
表面、底面的材质一致
正面的缝线与白色的一样,用了白线。使得黑色的整体外观更复古一点。
手感,材质都一致,没必要再写了,直接看看它与60键小键盘的搭配吧:
ikbc的POKER,黑壳 Dolch复古键帽,配色和适度90分
HHKB Professional 2 黑壳 黑灰色键帽,配色和适度80分
来张侧视图,手托的总高度与键盘的外壳靠近使用者的部分差不多一样高,使用的时候抬高双手的手掌,特别是掌跟部分,使得双手从手指抬起形态恢复到更接近手指水平伸展的形态。
像一些超薄的薄膜键盘,不使用手托也不会有疲劳感;机械键盘一般都比较厚,不用手托就像握持鼠标的“抓握”,而用了手托,就接近“趴握”的感觉了。在手腕的疲劳度上有明显不同的感受。
前面白色占的篇幅大了。来张“黑色桌面叁件套”
其实也不一定要白配白、黑配黑,偶尔试一下“熊猫配色”,也挺有趣。
总结:这款87键/60键可选的PU皮质手托以9块9包邮的价格买到,是非常超值的。
优点是皮质细腻,整体做工不错,没有异味,高度合适、弹性适中
缺点是需要底部防滑的话要加钱,边缘缝线还可以改进
在近期购买的张大妈家的“白菜”中,这颗最美味。
希望白菜君再接再厉,为大家搜寻更多白菜好物。
这款手托的话,最好能每年爆料两叁次,就可以用脏了、用旧了扔掉买新的了。
对了,白菜君最近开始写白菜评测了,实用性很高,大家可以去围观: