淘寶網的技術發展史(一)——個人網站時代

《天下網商·經理人》十月刊開始將連載系列文章《淘寶網的技術發展史》,為讀者描述淘寶網在整個發展過程中,所有的主動和被動的技術變革的前因后果。

文/淘寶技術大學培訓專家 子柳??

前言

11月11日,這個棍子最多的日子被網民自我調侃變成了一個節日——“光棍節”。而淘寶網又用瘋狂的折扣促銷給它賦予了另外一個意義——“購物狂歡節”。2011年11月11日這一天,淘寶商城(現天貓商城)與淘寶網交易額之和突破52億元,這個數字是“購物天堂”香港一天零售總額8.5億元的6倍。

網民感受到的是瘋搶的喜悅,而網站的技術人員感受到的卻是“壓力山大”。就如同你家辦酒席,宴請左鄰右舍,這個辦起來容易。倘若宴請十里八鄉所有的人,吃飯的人自然開心,但卻不是一般人家能夠辦得起來的。能辦得起來如此盛宴者,需要強大的財力物力、組織能力、技術實力,例如做這么多菜,你的炒鍋一定要是“分布式的”、“可復制的”、“可擴展的”,洗菜切菜要有“工作流引擎”,上菜的路徑要用圖論計算出來,甚至連廚房的下水道都要重新設計。

淘寶能夠舉辦如此盛宴,網站的技術實力可見一斑。淘寶網擁有全國最大的hadoop分布式計算集群之一,日新增數據50TB,有40PB海量數據存儲。分布在全國各地80多個節點的CDN網絡,支持的流量超過800Gbps。淘寶的搜索引擎能夠對數十億的商品數據進行實時搜索,另外還擁有自主研發的文件存儲系統和緩存系統,以及java中間件和消息中間件系統,這一切組成了一個龐大的電子商務操作系統。

另外從商業數據上來看,Amazon的財報顯示其2011年完成了大約 480億美金的交易額。eBay2011年財報顯示其全年完成了大約600億美金的交易額(不包括其獨立的汽車交易平臺交易額)。不管從交易額、商品數量還是同比增速等指標上看,淘寶網均遠超于此,是目前全球最大的電子商務平臺。(筆者注:由于淘寶非上市公司,未公布2011年業績,以上內容來自淘寶網技術副總裁行癲的微博)

為了有個更直觀的對比,我們說一個同行,它在2011年光棍節之前做促銷,流量上去之后,達到12Gbps,達到了極限,網站幾乎掛掉,用戶無法下訂單。而淘寶網光棍節當天網絡的流量最高達到800多Gbps,帶給各家銀行和快遞公司的流量也讓他們壓力山大,如臨大敵。另外如果你在網上購買過火車票的話,更能體會到網站能支持多大的流量有多重要。但這不是一朝一夕做出來的,也不是有錢就能辦到的。

以上對比的這些網站,也許讀者很容易就猜到是哪一家,這里拿出來作對比,絕對沒有嘲笑人家的意思,采用通常的網站技術方案,能做到這種程度已經算不錯了。

任何網站的發展都不是一蹴而就的,處在什么樣的階段就采用什么樣的技術。在發展的過程中網站會遇到各種各樣的問題和業務帶來的壓力,正是這些推動著技術的進步和發展,而技術的發展又會反過來促進業務的更大提升。二者互為因果,相互促進。如今淘寶網的流量已經是全球排名第12、國內排名第3。淘寶網的系統也從使用一臺服務器,到采用萬臺以上的服務器。

本文就為大家描述淘寶網在整個發展過程中,所有的主動和被動的技術變革的前因后果。淘寶網的出身,網上有非常多的傳說,下面我們就從它的出生開始講起。

出生:買一個來

2003年4月7日,馬云,在杭州成立了一個“神秘的組織”。他叫來十位員工,要他們簽了一份協議,這份協議要求他們立刻離開阿里巴巴,去做一個神秘的項目。這個項目要求絕對保密,老馬戲稱“連說夢話被老婆聽到都不行,誰要是透漏出去,我將追殺到天涯海角”。這份協議是英文版的,匆忙之間,大多數人根本來不及看懂,但出于對老馬的信任,都卷起鋪蓋離開了阿里巴巴。

他們去了一個神秘的據點——湖畔花園小區的一套未裝修的房子里,房子的主人是馬云。這伙人剛進去的時候,馬云給他們布置了一個任務,就是在最短的時間內做出一個個人對個人(C2C)的商品交易網站。

先介紹一下這個創業團隊的成員:三個開發工程師(花名虛竹、三豐、多隆)、一個UED(花名二當家)、三個運營(花名小寶、阿珂、破天)、一個經理(花名財神),還有就是馬云和他的秘書。當時對整個項目組來說壓力最大的就是時間,怎么在最短的時間內把一個從來就沒有的網站從零開始建立起來?

了解淘寶歷史的人都知道淘寶是在2003年5月10日上線的,這之間只有一個月。要是你在這個團隊里,你怎么做?我們的答案就是:買一個來。

買一個網站顯然比做一個網站要省事一些,但是他們的夢想可不是做一個小網站而已,要做大,就不是隨便買個就行的,要有比較低的維護成本,要能夠方便地擴展和二次開發。

那接下來就是第二個問題:買一個什么樣的網站?答案是:輕量一點的,簡單一點的。于是買了這樣一個架構的網站:LAMP(linux+apache+mySQL+PHP)。這個直到現在還是一個很常用的網站架構模型。這種架構的優點是:無需編譯,發布快速,PHP功能強大,能做從頁面渲染到數據訪問所有的事情,而且用到的技術都是開源的,免費。

當時我們是從一個美國人那里買來的一個網站系統,這個系統的名字叫做PHP Auction,他們的官方網站是http://www.phpauction.net。這個名字很直白,一眼就能看出來這個系統是用什么語言做的、是干什么用的。PHP Auction有好幾個版本,我們買的是最高版的,功能比較多,而且最重要的是對方提供了源代碼。最高版比較貴,當時花了我們2000美金。

要注意的是,買來之后這個網站系統是不能直接就用的,需要很多本地化的修改,例如頁面模板改得漂亮一點,頁頭頁腳加上自己的站點簡介等,其中最有技術含量的是對數據庫進行了一個修改。原來是從一個數據庫進行所有的讀寫操作,拿過來之后多隆把它給拆分成一個主庫、兩個從庫,讀寫分離。這么做的好處有幾點:存儲容量增加了,有了備份,使得安全性增加了,讀寫分離使得讀寫效率提升了。(見下圖)

其中pear DB是一個PHP模塊,負責數據訪問層。另外也用開源的論壇系統PHPBB( http://www.phpbbchina.com )搭建了一個小的論壇社區,虛竹負責機器采購、配置、架設等,三豐和多隆負責編碼,他們把交易系統和論壇系統的用戶信息打通,給運營人員開發出后臺管理(admin系統)的功能,把交易類型從只有拍賣這一種增加為拍賣、一口價、求購商品、海報商品(意思是還沒推出的商品,先掛個海報出來)這四種。

PHP Auction只有拍賣的交易,Auction即拍賣的意思。行癲在微博中提到:今天eBay所有交易中拍賣交易仍然占了40%,而在中國,此種模式在淘寶幾乎從一開始就未能占據優勢,如今在主流的交易中幾乎可以忽略不計。背后的原因一直令人費解。我大致可以給出其中一種解釋:eBay基本在發達國家展開業務,制造業外包后,電子商務的基本群體大多只能表現為零散的個體間交易。

在經歷了另外一些有趣的事情之后,網站開始上線運行了。

運行:個人網站

在接下來的大半年時間里,這個網站迅速顯示出了它的生機。這里有必要提一下當時的市場環境,非典(SARS)的肆虐使得大家都不敢出門,尤其是去商場之類人多的地方。

另外在神州大地上最早出現的C2C網站易趣也正忙得不亦樂乎。2002年3月,eBay以3000萬美元收購了易趣公司33%的股份,2003年6月以1.5億美元收購了易趣公司剩余的67%股份。

當時淘寶網允許買賣雙方留下聯系方式,允許同城交易,整個操作過程簡單輕松。而eBay為了收取交易傭金,是禁止這么做的,這必然增加了交易過程中的難度。而且eBay為了全球統一,把易趣原來的系統替換成了美國eBay的系統,用戶體驗一下子全變了,操作起來非常麻煩,這等于是把積累的用戶拱手送給了淘寶。

為了不引起eBay的注意,淘寶網在2003年里一直聲稱自己是一個“個人網站”。由于這個創業團隊強大的市場開拓和運營能力,淘寶網發展非常迅猛,2003年底,最高每日31萬PV,從5月到年底成交額4000萬。這沒有引起eBay的注意,卻引起了阿里巴巴內部很多員工的注意,他們覺得這個網站以后會成為阿里巴巴強勁的對手。甚至有人在內網發帖,忠告管理層要警惕這個剛剛起步的網站,但管理層似乎無動于衷。

在市場和運營的后方,淘寶網的技術團隊也在快速做著系統的改進和創新。這里插一個有趣的故事:eBay和易趣早期都有員工在論壇上響應用戶的需求,eBay的論壇用粉紅色背景來區分員工的發言,易趣的員工在論壇上昵稱都選各種豆豆,例如黃豆豆、蠶豆豆等。淘寶在討論運營策略的時候提到這個問題,要求所有的員工都去論壇上回答用戶的問題。最早回答問題的任務落在小寶頭上,那我們用什么名字好呢?

“淘淘”?“寶寶”?小寶都不滿意,太女性化了。討論了很久之后,小寶靈光乍現,干脆取個名字叫“小寶”吧,小寶帶七個老婆來開店,迎接各位客官,很有故事性。于是很多武俠小說中的人物開始在論壇中行俠仗義,這些昵稱下面標注著“淘寶店小二”,他們回答各種各樣的問題,快速響應用戶的各種需求。如果是技術上能解決的,幾個人商量一下,馬上就開發、測試、發布上線。反過來對比一下,易趣被eBay收購之后,系統更換成了全球通用的版本,響應用戶的一個需求需要層層審批,反應速度自然慢了下來。

當時淘寶第一個版本的系統里面已經包含了商品發布、管理、搜索、商品詳情、出價購買、評價投訴、我的淘寶這些功能。(現在主流程中也是這些模塊。在2003年10月增加了一個功能節點:“安全交易”,這個是支付寶的雛形。)

隨著用戶需求和流量的不斷增長,系統上面做了很多的日常改進,服務器由最初的一臺變成了三臺,一臺負責發送email、一臺負責運行數據庫、一臺負責運行web App。

過了一段時間之后,商品搜索的功能占用數據庫資源太大了,又從阿里巴巴中文站搬過來他們的搜索引擎iSearch,起初iSearch索引的文件放在硬盤上,隨著數據量的增長,又采購了NetApp服務器放置iSearch。

如此快節奏的工作,其實大家都累得不行,有人就提議大家隨時隨地地鍛煉身體。可是外面SARS橫行,在一個一百多方的房子里,怎么鍛煉呢?高挑美女阿珂提議大家練習提臀操,這個建議遭到男士的一致反對,后來虛竹就教大家練習倒立,這個大家都能接受。于是這個倒立的傳統一直延續至今,和花名文化、武俠文化一并傳承了下來。

隨著訪問量和數據量的飛速上漲,問題很快就出來了,第一個問題出現在數據庫上。mySQL當時是第4版的,我們用的是默認的存儲引擎myisam,這種類型讀數據的時候會把表鎖住,我們知道Oracle在寫數據的時候會有行鎖,讀數據的時候是沒有的,尤其是主庫往從庫上面寫數據的時候,會對主庫產生大量的讀操作,使得主庫性能急劇下降。這樣在高訪問量的時候,數據庫就撐不住了。另外當年的mySQL不比如今的mySQL,在數據的容量和安全性方面也有很多先天的不足(和Oracle相比)。

淘寶網作為個人網站發展的時間其實并不長,很快地,隨著其知名度的飛升,它也從個人網站開始了轉型。已經撐不住的mySQL,被替換成了Oracle,開啟了淘寶技術的另一個時代。


http://i.wshang.com/?p=17019

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286888.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286888.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286888.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux之徹底卸載mysql

1 問題 在centos系統下徹底卸載mysql 2 操作方式 1)、查看mysql的信息 rpm -qa | grep -i mysql mysql57-community-release-el7-10.noarch mysql-errmsg-8.0.17-3.module_el8.0.0+181+899d6349.x86_64 mysql-8.0.17-3.module_el8.0.0+181+899d6349.x86_64 mysql-server-8.…

使用 Vscode 編寫 HTML 文檔竟然可以自動寫代碼(2)

作者簡介 作者名:1_bit 簡介:CSDN博客專家,2020年博客之星TOP5,藍橋簽約作者。15-16年曾在網上直播,帶領一批程序小白走上程序員之路。歡迎各位小白加我咨詢我相關信息,迷茫的你會找到答案。 目錄 HTML基…

甘肅省事業單位公考招聘考試權威復習資料---GIS專業全真模擬題(一)

一、單選 1. 以下那個可以從像元級別、特征級別進行( )。 A.增強 B.銳化 C.重采樣 D.裁剪 2. 1:10000比例尺地形圖的格網大小是( )。 A.30m B.100m C.10m D.5m 3. 電子地圖中加載矢量數據屬于( &…

為什么 Docker 和 Kubernetes 是用 Go 寫的而不是 C# ?

這是 Reddit 平臺上面這幾天一篇比較熱門的帖子, 非常有意思,本文我列出了幾個高贊的回答。👦 HahahahahaSoFunny為什么 Docker 和 Kubernetes 工具是用 Go 寫的而不是 C#?總所周知,現在開發人員使用的很多新工具大多是用 Go 寫的…

打造最舒適的webview調試環境

你在做移動web開發的時候是不是只是在Chrome下開啟移動模式,然后就啪啪啪悶頭敲代碼了?如果你平時只是做做宣傳頁,Chrome的移動模式可能就能滿足你。但是現在越來越多的應用采用Hybrid的開發方式,這樣的話就可能在web頁面上調用we…

淘寶網的技術發展史(二) ——Oracle替換MySQL

本文是《淘寶網的技術發展史》系列連載文的第二篇,在告別個人網站時代后,淘寶網的技術發展迎來了由Oracle開啟的第二個時代。文/淘寶技術大學培訓專家 子柳MySQL撐不住了 淘寶網作為個人網站發展的時間其實并不長,由于它太引人注目了&#xf…

數據結構——不相交集(并查集)

目的:解決等價問題。 表示方法:森林,底層實現用數組 主要操作:find()、union() 優化手段: ①find()時路徑壓縮 ②union()時按規模合并、按樹高合并(依據情況而定) Java實現: class D…

Android之抓取adb logcat全日志后怎么過濾掉只包含當前app進程的日志(一般抓啟動app奔潰日志)

1 、問題 有時候我們啟動APP的時候,APP奔潰,在android studio里面日志可能沖掉,或者是云平臺的手機安裝的app,根本就沒有android stduio,那我們用什么辦法快速知道啟動奔潰日志呢? 2、解決辦法 我們先需要…

一個基礎的 HTML 文檔有哪些標簽?(3)

作者簡介 作者名:1_bit 簡介:CSDN博客專家,2020年博客之星TOP5,藍橋簽約作者。15-16年曾在網上直播,帶領一批程序小白走上程序員之路。歡迎各位小白加我咨詢我相關信息,迷茫的你會找到答案。 目錄 HTML基…

考研:中國科學院地理所歷年GIS研究生入學考試真題匯總

中科院地理所1997年GIS研究生入學試題 一、名詞解釋 1.拓撲關系 2.緩沖分析 3.關系數據模型 4.空間疊加 二、簡答題 1、GIS的主要功能略 2、企業GIS系統的特色 三、問答題(選2) 1、GIS基本組成與主要應用領域 2、地理科學數據集成與管…

能上架App的GooglePlay開發者賬號獲取流程

googleplay 開發者賬號申請流程 接到公司號召,要讓我們的app走向世界,上架GooglePlay,都說天朝的Android 程序員是折翼的天使,猛然發現寫了做么多年的Android,竟然不知道怎么成為GooglePlay開發者。 以前嘗試過&#x…

如何讓 ASP.NET Core 支持綁定查詢字符串中的數組(2)

前言上回說到,我們實現了IntArrayModelBinder,可以讓 ASP.NET Core 綁定查詢字符串中的數組。但是必須顯示指定ModelBinder:public string Get([FromQuery][ModelBinder(BinderType typeof(IntArrayModelBinder))] int[] values)而官方提供的…

hdu 3530 Subsequence

/* 開始以為是二分...后來發現丫不單調... */ #include<iostream> #include<cstdio> #include<cstring> #define maxn 1000010 using namespace std; int n,l,r,ans,tmin[maxn],tmax[maxn],a[maxn]; int qmin[maxn],qmax[maxn],headmin,tailmin,headmax,tai…

FirstLetterUtil

package cn.edu.hbcf.common.utils;public class FirstLetterUtil {private static int BEGIN 45217;private static int END 63486;// 按照聲母表示&#xff0c;這個表是在GB2312中的出現的第一個漢字&#xff0c;也就是說“啊”是代表首字母a的第一個漢字。// i, u, v都不做…

淘寶網的技術發展史(三)——分布式時代

本文是《淘寶網的技術發展史》系列連載文的第三篇。在系統發展的過程中&#xff0c;架構師的眼光至關重要&#xff0c;作為程序員&#xff0c;把功能實現即可&#xff1b;但作為架構師&#xff0c;要考慮系統的擴展性、復用性&#xff0c;這種敏銳的感覺&#xff0c;有人說是一…

Flutter提示之Navigator operation requested with a context that does not include a Navigator.

1 、問題 用Flutter寫了頁面跳轉&#xff0c;提示錯誤如下 Navigator operation requested with a context that does not include a Navigator. 2 、我的代碼 void main() {runApp(MyApp1()); }class MyApp1 extends StatelessWidget {overrideWidget build(BuildContext c…

《地理信息系統概論》課后習題全部答案_黃杏元

第一章 地理信息系統導論 1、什么是地理信息系統(GIS)?它與一般計算機應用系統有哪些異同點? 答:地理信息系統:是由計算機硬件、軟件和不同的方法組成的系統,該系統設計支持空間數據的采集、管理、處理、分析、建模和顯示,以便解決復雜的規劃和管理問題。 GIS脫胎于…

你知道出現“亂碼”的原因是什么嗎?(4)

作者簡介 作者名&#xff1a;1_bit 簡介&#xff1a;CSDN博客專家&#xff0c;2020年博客之星TOP5&#xff0c;藍橋簽約作者。15-16年曾在網上直播&#xff0c;帶領一批程序小白走上程序員之路。歡迎各位小白加我咨詢我相關信息&#xff0c;迷茫的你會找到答案。 目錄 HTML基…

Android應用程序線程消息循環模型分析(4)

接下來我們再看看應用程序的配置文件AndroidManifest.xml&#xff1a;<?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android" package"shy.luo.counter" andr…

【SignalR全套系列】之在.Net Core 中實現Server-Send Events消息推送

微信公眾號&#xff1a;趣編程ACE關注可了解更多的.NET日常開發技巧&#xff0c;如需源碼 請公眾號留言 源碼;如果覺得本公眾號對你有幫助&#xff0c;歡迎關注【SignalR全套系列】之在.Net Core 中實現Server-Send Events消息推送1.前文鏈接&#xff1a;【SignalR全套系列】之…