跳到主要內容

黃金級贊助商 - 蝦皮購物:擁抱開源技術,推進架構演進

蝦皮購物是一家服務臺灣、印尼、越南等7個東南亞市場的電商平臺,涵蓋了從C2C拍賣、B2C購物到B2B2C商城等多種業務。從2015年開始上線到如今成為區域性的最大電商平臺,蝦皮的系統架構在這段期間承受住了使用者和訂單火箭般地飛速成長,也伴隨著很多痛並快樂的煩惱。而這些煩惱中,有相當一部分就與蝦皮使用的各種各樣的開源軟體相關。

開源軟體還是商業產品?

很多開源軟體都有對應的商業產品,蝦皮從誕生的第一天起,就經常面臨是使用開源軟體方案還是商業產品方案的選擇。舉個例子來說,像大家開啟蝦皮的時候,所有的請求流量會發到蝦皮的負載均衡器,負載均衡器會做按照預先定義的規則做各種各樣的處理,包括服務發現、動態路由、健康檢查、熔斷、故障轉移等等。大家可以想下,因為所有流量都會經過這樣的一個負載均衡的系統,所以我們對它的效能、可用性、可拓展性的要求就非常高。

在負載均衡器領域,F5、A10和AWS的ELB就是非常出名的商業產品。F5和A10都是基於硬體提供的負載均衡,AWS的ELB則是基於軟體。對於F5和A10這種硬體產品來說,一般採購它們的產品的時候是有一定規格和處理能力上限的,且1Gbps和10Gbps有不同的價格,而蝦皮的流量增長又特別快,假設我們這個月買了一臺1Gbps的F5或A10,過不了多久就會因為當前的F5或A10撐不住而要買另一臺更高規格的來進行升級。而且更麻煩的是,像這些硬體負載均衡器的升級只能是替換成更高階的裝置,且升級的過程會造成相當長的一段時間無法訪問網站。而像某些雲服務提供商的負載均衡方案,我們使用它的時候就完全無法撐住蝦皮的海量請求,當雲服務發生問題時我們完全束手無策。這些雲服務對我們來說是一個黑盒子,裡面程式碼到底是如何執行的,我們完全不瞭解,當遇到問題需要解決的時候,我們需要提ticket,來回溝通的週期特別長,至少都要好幾個星期,而我們對服務的可用性要求有特別高,任何時候有問題,都需要第一時間立刻恢復服務,使用商業產品對我們來說,就不得不面對這樣那樣的矛盾。

所以我們最終是基於LVS和Nginx這樣的開源軟體開發了我們自己的負載均衡系統,相比商業產品,開源軟體的程式碼開放,社群使用者參與活躍,我們參與到其中去,一方面可以基於開源軟體開發出更符合蝦皮業務場景的系統並快速定位和修復問題,另一方面也能在向上遊報BUG,修復BUG的過程中和開源社群一起成長,從而更好地支撐業務的發展,保障蝦皮的使用者體驗。

使用開源軟體 A 還是使用開源軟體 B?

對開源軟體來說,即使是同一類別,可能也會有很多不同的選擇。比方說Cache,常見的就有Memcached和Redis。在蝦皮早期的時候,我們就經常遇到Redis CPU跑滿的問題。我們使用profiling工具一查,發現當用戶請求湧進來的時候,我們的服務短時間建立了大量地連線到Redis,而Redis是單執行緒,只能使用一個CPU Core,導致Redis都在處理連線的建立和斷開,正常的Cache讀寫都無法處理,最終導致服務處理請求時大量超時報錯。那時我們為了避免Redis的CPU跑滿的問題,就換用成是多執行緒模型的Memcached。換了Memcached後效果立竿見影,CPU使用都均攤到了每個CPU Core,非常均衡。當然換成Memcached也帶來了一些不方便的地方,因為Memcached不像Redis一樣支援豐富的不同的資料結構和讀寫命令,中間對系統的改造確實是一個相當痛苦的過程。

從今天來看,我們再看看蝦皮到底是使用了Redis還是使用了Memcached。答案是我們都用。蝦皮是由很多不同的分散式系統和服務組成,有不同的場景和業務要求,有些場景用Redis非常合適,直接使用一個Redis自帶的命令就可以解決;有些場景用Memcached就更合適,比方說上面提到的那個例子;有些場景則可以直接上Redis Cluster的方式來繞過Redis單Instance時只能用一個CPU的限制。

在蝦皮的各種不同系統中,從前端到後臺,從資料庫到作業系統,我們使用了大量不同的開源軟體。很多時候並不是非此即彼,用了A就不用B,用了B就不用A。每種開源軟體都有其適合的場景,也有其相對應的優缺點。只要能解決問題,都值得使用嘗試和使用。像Redis和Memcached一樣,他們都是非常優秀的Cache,又有各自適合的場景,對我們來說,都值得使用和學習。

如何正確使用開源軟體和參與開源社群?

在蝦皮,我們使用開源軟體都是當成白盒子來使用。使用開源軟體,意味著也要承擔開源軟體中存在的BUG帶來的風險。在最開始的選型時,我們會去提前瞭解每個開源軟體的內部實現和評估潛在的問題,從而避免使用了不合適的開源軟體,最終折返重頭開始的情況。在使用過程中,遇到問題時和社群保持溝通,修復BUG並回饋patch給社群。

對我們來說,如果使用一個開源軟體,而我們卻不瞭解它內部是如何工作,出問題毫無解決頭緒,無法基於已有的開原始碼做二次修改的話,還不如直接使用相應的商業解決方案,至少商業解決方案有專業支援。比方說Ceph這個分散式檔案儲存系統,蝦皮在使用的過程中,就經常因為各種各樣的原因踩到Ceph的坑,但是Ceph這個分散式的檔案儲存對我們而言又非常重要,每次Ceph出問題都會導致我們的系統當機很長時間,客服人員電話會被海量的使用者投訴打爆,造成非常嚴重的後續影響。這逼著我們不斷地閱讀和熟悉Ceph的各個元件和程式碼,逐漸地糾正之前使用Ceph的錯誤方式,patch相關的地方以便故障時能快速恢復。

而隨著蝦皮使用者量和業務量的不斷增長,很多之前可能是正常工作的開源軟體到了某個瓶頸之後就無法再正常工作。這也讓我們對了解開源軟體的程式碼和內部實現有了更高要求,需要我們能即時定位到效能瓶頸。比方說我們使用Nginx,在過去三年中一直執行的非常穩定,突然前幾天就出現把所有CPU Core跑滿的問題。所幸在過去幾年中,我們基於Nginx的原始碼做了大量工作,對Nginx的程式碼比較熟悉,這次就很快定位到了是一處shared memory lock競爭導致的效能衰退。

蝦皮對這些開源軟體的修改,我們一般會根據實際情況把這些patch提交回上游merge。像Linux Kernel、Docker、Tensorflow等等開源專案中都有蝦皮工程師提交的patch。當然也存在這樣的情況,改動的地方上游覺得不夠好,或者有其他解決方案拒絕或者推遲了我們的patch,或者merge和review的速度非常慢。這個時候可以fork出一個版本,當然也保持開源,這樣其他人如果遇到了和我們一樣的問題的時候,參考我們的改動,也會對他們帶來一定啟發。參與開源社群有很多中方式,不一定提交patch並merge才算,報BUG是一種方式,改進使用說明資料是一種方式,fork出另外的分支也是一種方式,最終都能在開源社群相互交流,共同進步。

蝦皮自研軟體和開源的關係?

在蝦皮,我們廣泛使用了各種各樣的開源專案,但我們也有非常多的核心元件是自行研發。對蝦皮來說,自研和開源並不是對立的,並不是蝦皮自己喜歡重新發明輪子。我們知道,就算是輪子,也分很多種,比方說自行車的輪子和跑車的輪子要求就不一樣,而飛機的輪子又和跑車的輪子要求不同。有些時候,開源社群可能只能找到自行車的輪子,那假設蝦皮要開始造飛機了,在開源社群裡面找不到飛機輪子的實現,那麼沒辦法,我們只能自行研發。

同樣的,在考量解決方案的時候,我們會先看看是否已有開源的方案能解決我們的需求,如果有的話,已有的開源方案是否足夠成功,設計足夠好,執行是否足夠穩定,如果不成熟的話,我們是否可以在這個基礎上,在上面再開發改進。如果整個開源軟體設計優秀,很容易擴充套件和改進,和我們期望的解決方案比較匹配,那麼我們就會採用,一方面節約了資源的投入,同時又能少走一些彎路,而且開源社群不止蝦皮,很多組織都在參與,在整個生態系統中,每個參與的團體做的改進其他團體都能受益。

但也存在開源社群中我們無法找到相對應的實現或者滿足我們要求的實現的情況,這個時候我們會自行研發解決方案。大家知道像蝦皮支援的業務型別非常多,對核心系統和元件有各種各樣的業務要求以及效能上的考量,在廣泛使用開源軟體的同時,蝦皮也有大量自行研發的元件,共同支撐了業務的飛速成長。

蝦皮成立三年來業務飛速成長,離不開各種優秀的開源專案,也在不斷地回饋開源社群,如果你熱愛開源,熱愛Coding,就快快加入我們一起共同成長吧。心動不如馬上行動,火速開啟 https://careers.shopee.com/ 投遞簡歷吧!

留言

這個網誌中的熱門文章

COSCUP 2023 徵稿辦法 / COSCUP 2023 Call for Proposals

今年 COSCUP 一如往常,徵求各式各樣不同的 Open Source 相關稿件。請於 5 月 23 日 (UTC-12) 前投稿,或可參考本頁下方各議程軌資訊。 請注意, 每場議程長度預設為 30 分鐘 , 惟指定議程軌開放其他議程長度進行選擇 ,會在報名表單第二頁進行填寫,報名表單第一頁的提交型態中,請選擇預設值。 為了追求與全球社群更良好地溝通, 今年所有選中的議程都必須提供英文版的資訊 。一旦您的議程入選,我們會請您提供議程資訊的英文版翻譯。您仍可以自己偏好的語言演講或撰寫 CfP 稿件。 提醒您,COSCUP 是一個倡導開放的研討會,所有演講將錄影並以創用 YouTube CC 姓名標示-相同方式分享 4.0 釋出。如果您的演講有任何不能錄影或不願以此條款釋出的狀況,請務必於投稿表單上註明。 We are looking for talks in several open-source related areas, please submit your proposal before May 23th, 2023 (AoE, Anywhere on Earth, UTC-12) . After the review process from the coordinators, we will publish the full programme in early June. Please note that the length of each agenda is preset to 30 minutes, only the specific tracks are open to other agenda lengths for selection, which will be filled in on the second page of the registration form. In the submission type on the first page of the submission form, please select the default value (30 mins) . For better communication with the glob

2022!前夜派對!Open source and wine!Welcome Party!

喝! 年會 前夜 的交流 派對 ,來與大會講者、社群同好一起喝酒聊天! Join the Party, have fun with the speakers and your beloved FLOSS community members! 會場有什麼? / What will we have at the party? 當日精選的 MIT 掌門精釀啤酒 (也有無酒精飲料) Beer ! For people who don't like alcohol, the bar also provides soft drinks. 下酒點心 Snacks 200 坪空中花園派對,可以直接看到台北 101!美景與美酒,絕配! Awesome view, believe me! Just check the photos from Google Maps. 最重要的是:與熱愛開源的大會講者與社群同好交流的最佳活動! Lots of FLOSS folks! 注意事項 / Note 會場食物為小零食,數量有限,建議吃過正餐再來! Please have your dinner before the party, we only prepare party appetizers. 低消為 $200 元。 The minimum order is NTD$200. 不用報名,自由參加。 Please feel free to join Welcome Party, no matter what you come to COSCUP x KCD Taiwan 2022 or not. 贊助商請找 贊助組 領取酒券。 If you are the sponsor, please contact the Sponsorship Team for the free beer ticket. 如果你怕忘記參加活動,可以訂閱 COSCUP 活動電子報 ,不錯過最新活動訊息! Subscribe the COSCUP newspaper to receive important reminders and exciting activities. 時間地點 / When, Where 時

會眾新服務「療癒市集」結合紅酒瑜伽、冥想正念、按摩小站、氮氣咖啡 | Introducing the Healing Market with Yoga Wine, Meditations, Massage Station, Nitro Coffee

新 [English version below] 今年的 COSCUP x KCD 2022 Taiwan 嘗試推出新的會眾服務,希望在繁忙的平日還抽空在假日來參與活動時、能夠療癒一下心靈與身體的負擔,「 療癒市集 」希望能夠為你帶來不一樣的體驗! 由於部分課程需要 預先報名 ,如果你有意參與課程,請直接 寄信報名 ,並等候志工收件處理,感謝! 以下是相關的課程簡介。 紅酒瑜伽 照片來源:台南安平雅樂軒酒店 都市生活步調快,上班壓力大,周末總想找些紓壓的活動幫自己充飽電,用更好的狀態去迎接下個挑戰。而說到現在最新穎,時尚的選擇那就不能不提風靡歐美的「紅酒瑜珈」。現在不用出國,在 COSCUP 也可以體驗這種身心靈保養的運動。 課程中,老師也會指引學員在不同階段品嘗手中的葡萄酒,感受這支紅酒在不同醒酒階段的各種風味,細細品嚐它的層次與韻味。酒精也同時能夠增加血液循環,讓身體發熱,達到肌肉暖身,類似熱瑜珈的運動效果! 紅酒瑜珈是什麼? 於 2017 年誕生於紐約,紅酒瑜珈是把紅酒帶進瑜珈練習的一種課程。在瑜珈練習的過程中,學員們手上各有一杯紅酒。老師帶領著學員練習瑜珈姿勢,並加入酒杯動作來增加難度與運動量。比如說,手握紅酒杯進行戰士三式(Warrior III),為了不讓液體撒出來,其實比起沒有道具輔助的瑜珈需要多一點肌耐力,所以可以達到更大的脂肪燃燒跟運動效果。 課程須知 每一課程時長為一個小時,費用 $470元/人,每一堂最多 12 人。 講座內容包含:活動包含約 45 分鐘的紅酒瑜珈活動,及約 15 分鐘的講解,課程會提供酒杯,若損壞葡萄酒杯,則每只費用 $250。 需自備:瑜伽墊、水壺、毛巾等個人用品。 ★ 由於課程需要預先報名,如果你有意參與此課程,請參閱 課程時間表 並直接 寄信報名 、等候志工收件處理,感謝! 冥想正念 我們都渴望獲得內心的平靜,尤其在現在這個快速、忙碌更迭的時代,在這個無時無刻都在面對比較、落後焦慮的世代。透過冥想與正念,你會更加理解你自己,你也會更加理解你的周遭一切,而點滴的時光之間,再次放下自我,又擁抱自我。 課程須知 每一課程時長為一個小時,費用 $350元/人,每一堂最多 10 人(未滿 5 人不開課)。 講座內容包含:冥想正念概念介紹、正念心理