整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          解密電商平臺-商品詳情緩存!高可用架構設計必備

          幾節說了中小型電商公司,項目詳情頁的優化方案,一般是使用freemark模板生成了html靜態頁面,放到nginx或者tomcat中,但是肯定選擇nginx的并發是tomcat的100倍,通過mq的方式刷新緩存生成新的html靜態頁面。一起看下大型互聯網關于商品詳情的架構。



          (一)講解上圖的的詳細信息

          這些架構是根據業務多年演變而來的,可不是最終就是這樣的。機器的內存有上限的話,并發量也是有上限的,一臺redis可以存儲100g,你水平擴展100臺其實還是100g,必須 通過分片的方式這樣就是10t的數據存儲空間。

          1. 通過LVS負載后,轉發到下面nginx(分發器),這里的nginx(分發器)只有2個,但是實際的環境下可能有多個水平的。
          2. nginx(分發器)下面是通過hash轉發到nginx(應用層),之前的nginx只有一層,現在的nginx搞了2層,為了是分片存儲,大大提高本地緩存的利用率。
          3. 3.nginx(應用層)轉發到緩存服務,類似tomcat的一個應用,緩存服務在實際的大型互聯網公司肯定有很多臺,都是水平擴展的。緩存服務里面實際是就是一個web應用,這里畫了2個一個redis集群和ehcache。
          4. 這里就是轉發過來的http請求,然后redis集群拿數據,如果有馬上返回給前端,如果沒有通過內存中取。ehcache(JVM緩存)和redis這2個順序不一定,根據場景來的。
          5. 商品服務,庫存服務,會員服務,交易服務有變動的話異步的調用MQ更新緩存,一般正常的情況都是異步來請求的。更新緩存有很多的并發問題。
          6. 之前說過如果處理并發問題最好的方案,就是線性處理,讓并發的變成串行。用上MQ一定能保證變成串行。
          7. 一個lua腳本下面加了nginx的本地緩存去渲染這個html模板,nginx本地。lua腳本相對來說比freemark這種快太多了。
          8. 緩存內放入的都是不經常變化的。如果經常變化的都是ajax異步請求的方式來完成的,或者通過其他的系統來負責關聯靜態的html。

          (二)介紹本書

          其實之前的幾次關于互聯網的技術方案,都是通過這個書【億級流量網站架構核心技術】里面的內容分享出來的,我加入了自己的思路。通過我的思路引導更容易的理解,如果沒做過互聯網的老鐵,直接看這本書不一定看的懂,很多方面他都是一句話就過了。沒有詳細的解釋里面的業務場景。

          PS:通過看的技術文章,在詳細的看看這本書,其實互聯網技術不過如此,自古真情留不住,唯有套路的人心,都是前人總結的解決問題的方案和套路,對于有互聯網經驗這本書還是很不錯的,大大的拓寬技術經驗,光看這本書的目錄估計都被虎的一愣一愣的,其實都不復雜,都是一些經驗,其實在互聯網公司呆過這些都是常用的技術。還是那句話,沒搞過想破腦子就是不會,需要的還是場景。

          何盡量減少用戶的流量,減少客戶端與后臺的交互,讓用戶在APP上有比較好的體驗,這些都是在設計商詳系統時候需要面臨的挑戰。

          今天來跟大家聊聊商詳,商詳是展示商品詳情信息的一個頁面,整個購物流程比較重要的一個部分,承載著網站的絕大部分流量。為了提高轉化率構成商詳的元素非常豐富,有大量的圖片、部分商品還有視頻介紹、有相對靜態的商詳模板,有實時變化的價格、促銷、庫存。

          下面我們先來看下商詳上一共有哪些元素組成?

          可以看到商詳上的元素非常多,總結下來分為這么幾個維度:商品維度(標題、主圖、規格參數、商品文描)、分類維度、商家維度、店鋪維度。另外還有一些實時性比較高的:價格、實時促銷、配送地址、庫存、廣告等。

          主要面臨的挑戰有:

          • 高性能,商詳頁聚合服務比較多,要保證商詳頁在1-2秒內可以打開。
          • 靈活性較好,可以快速響應頁面變更需求。
          • 具有較好的擴展性,當訪問量增加的時候可以隨時進行水平擴展。
          • 要能夠做到柔性降級,自帶開關。某些底層服務出問題時可以通過開關進行相應降級處理。

          針對商詳可以有幾種不同的實現方式,用戶看到的是同一個商詳頁,但背后實現的方式卻多種多樣,下面給大家介紹幾種常見的實現。

          第一種實現方式:單機版

          整個網站放在一臺機器上,通過幾條SQL分別拿到商詳需要展示的各種信息,聚合成一個大的接口吐出給前端展示。

          優點:邏輯簡單。靈活性較好,可以快速響應頁面變更需求。

          缺點:性能比較差,沒有擴展性。

          第二種實現方式:緩存銀彈

          在第一版的基礎上增加各種維度的緩存。可以將主圖、商詳的HTML模板放到CDN上,每個商品的聚合信息可以放到cache中,不需要每次請求都通過DB獲取商品數據。

          優點:可以一定程度上提高性能。

          缺點:需要解決緩存與DB的數據一致性問題,單純增加緩存面臨數據實時性不高,底層數據已經修改,緩存中還不是最新數據。若任何底層數據變更實時更新緩存則修改工作量較大。另外仍然沒有解決擴展性問題。當請求量過大,或者商品數據過多將導致性能變差。

          第三種實現方式:分布式服務化

          按照領域進行切分,不同業務領域獨立實現分別部署,將商詳依賴的底層業務領域分別拆分出來。例如,商品、庫存、促銷、地址等分別進行服務化。每個子領域的服務自己保證各自的性能。

          優點:具有很好的靈活性。當有業務需求變化的時候,每個子領域內部自行修改,對外部提供的接口協議不變,對外部無感知。并且具有良好的擴展性,當請求量或者數據量比較大的時候,每個子領域都可以分別進行橫向擴展。

          缺點:開發難度變大,由于按照領域進行服務劃分,往往原來一行SQL可以搞定的事情。現在要涉及到多個領域一起配合來修改,需要協商接口協議,各個領域內部仍有不少開發量。

          下面我們來說幾個基本的概念,上面提到的服務到底是什么?

          服務:自己自足的、無狀態的業務功能,通過定義良好的標準接口,它接受一個或多個請求,返回一個或多個應答。

          • 服務不應依賴于其他功能或過程;
          • 用于提供服務的技術,編程語言,不構成定義的一部分;
          • 服務體現了業務功能,聚焦于流程,服務的主要目標是體現業務功能的“自然”步驟。就服務起作用的業務而言,服務應該代表了一項自足的功能,對應著一項真實世界的業務活動,業務人員應該理解服務干了什么。

          接口和契約(技術層面)

          • 一項服務是一個處理(多個)消息的接口,返回信息,以及/或者改變實體(后端系統)的狀態
          • 前置條件、后置條件(安全意識,不信任原則)
          • 粗粒度:有助于分離服務提供者的內部數據結構和外部接口
          • 接口的版本、向后兼容

          上面介紹了分布式服務化的方式來實現商詳的技術架構,那么這樣是不是就完美了?在實際情況下即使這種架構還是有很多不可控的因素會影響整個商詳的性能。最重要的一個就是對外部服務的依賴。如果外部服務出現抖動那么整個商詳頁也會隨之出現不穩定。尤其商詳是個比較大的聚合服務,底層依賴的服務比較多,任何一個出問題都會受到影響,那么商詳出錯的概率就會比較大。如何解決這個問題呢?

          一種方案是要求所有底層服務各自保證自己的穩定性,這需要有比較完善的監控體系,能夠快速找到出問題的點,然后進行修正。這種方案屬于比較理想狀態,對外部有強依賴。這需要有一個比較靠譜的團隊,團隊中每個人負責的領域穩定性、健壯性都比較高,那么這種方式是比較好的,領域的劃分比較清晰,各自的職責也比較清晰。大家各自把自己的領域做好,那么整個網站的效率都比較高。

          這對整個團隊要求比較高,這種團隊是存在的,但是當公司業務發展比較快,團隊人數增長也比較快的時候,這時候團隊的質量就比較難保證了,就會出現某一個領域或者某幾個領域質量不是很高,就會導致整個服務調用鏈都不穩定,對整體網站影響較大。那么出現這種問題時如何解決呢?

          互不信任原則

          對外部不信任的原則是服務自我保護最重要的方式,盡量降低外部服務出問題時對本服務的影響。對于一個寫服務來說,一定要校驗外部服務調用的所有參數是否合法,對每一個調用方分配場景ID記錄調用來源,并且自己要做冪等去重處理。設計系統時首先想到對于這個外部調用一旦失敗該如何處理?是否有相應的降級策略?對于不同調用失敗的場景一定要清晰記錄錯誤信息方便后面調試跟蹤解決問題。

          數據閉環

          數據閉環即數據的自我管理,或者說是數據都在自己系統里維護,不依賴于任何其他系統,去依賴化;這樣得到的好處就是別人抖動跟我沒關系。

          • 數據異構:是數據閉環的第一步,將各個依賴系統的數據拿過來,按照自己的要求存儲起來;
          • 數據原子化:數據異構的數據是原子化數據,這樣未來我們可以對這些數據再加工再處理而響應變化的需求;
          • 數據聚合:將多個原子數據聚合為一個大JSON數據,這樣前端展示只需要一次get,當然要考慮系統架構,比如使用Redis,Redis又是單線程系統,我們需要部署更多的Redis來支持更高的并發,另外存儲的值要盡可能的小;
          • 數據維度化:對于數據應該按照維度和作用進行維度化,這樣可以分離存儲,進行更有效的存儲和使用。

          下面是一種相對比較簡單的維度的劃分:

          1. 商品基本信息,標題、擴展屬性、特殊屬性、圖片、顏色尺碼、規格參數等;
          2. 商品介紹信息,商品維度商家模板、商品介紹等;
          3. 非商品維度其他信息,分類信息、商家信息、店鋪信息、店鋪頭、品牌信息等;
          4. 商品維度其他信息(異步加載),價格、促銷、配送至、廣告詞、推薦配件、最佳組合等。

          降級開關

          當底層系統出現問題時候要能夠做到通過開關的配置屏蔽底層系統的波動對商詳的影響,例如當底層的庫存系統出現問題時可以通過開關進行配置商詳屏蔽調用庫存接口,默認所有商品有庫存,這樣庫存數量可能不是最準確的,但至少可以保證用戶正常瀏覽商詳頁不至于由于底層系統的波動導致整個商詳頁面打不開。在系統設計時候要盡可能的多預留降級開關,能降級的地方都要做好降級的準備,只有這樣才能保證商詳的高可用。

          異步并發

          假設一個讀服務是需要如下數據:

          1. 數據A 10ms
          2. 數據B 15ms
          3. 數據C 20ms
          4. 數據D 5ms
          5. 數據E 10ms

          那么如果串行獲取那么需要:60ms;

          而如果數據C依賴數據A和數據B、數據D誰也不依賴、數據E依賴數據C;那么我們可以這樣子來獲取數據:

          那么如果并發化獲取那么需要:30ms;能提升一倍的性能。

          假設數據E還依賴數據F(5ms),而數據F是在數據E服務中獲取的,此時就可以考慮在此服務中在取數據A/B/D時預取數據F,那么整體性能就變為了:25ms。

          上面我們聊了聊關于商詳的部分技術實現方案,下期將跟大家聊聊電商的搶購系統的哪些事兒,敬請期待!

          本文由 @Nicole 原創發布于人人都是產品經理。未經許可,禁止轉載。

          么是詳情頁?簡單來說,它是商品圖片和商品文案按照一定規律進行排版后可以展示給目標用戶的視覺“產品”。

          在服飾詳情頁中,圖片和文字是基礎,前者大多在商品屬性、尺碼信息、設計理念模塊發揮必要的介紹作用,同時也作為模塊分割、圖片強調的元素出現。同時,好的排版能起到畫龍點睛的作用。


          那么,一款高轉化服裝詳情頁究竟該如何設計呢?一般來說,需要設計以下7大模塊


          優化區域:包含亮點展示、版型特點、面料工藝和潮流趨勢等;商品信息:包含基本信息、指數信息、尺碼表、尺碼推薦表和試穿報告等;搭銷模塊:酌情使用場景化搭銷、關聯搭銷和同類款推薦銷售可提升連單率及流量利用效率。 此外,還有海報區域、模特展示、平鋪展示、細節展示。

          以上模塊排布順序需要根據目標客戶、商品風格和店鋪定位綜合確定,這里不再贅述。需要注意的是,單一模塊的設計排版也有很多學問,下面展示一組模塊優化前后的視覺對比分析:


          優化點:

          1、色調選用符合店鋪風格;

          2、字體及用色使海報更為亮眼 ;

          3、整合精簡海報文案及修飾布局 。


          優化點:

          1、整體用色更加大膽,風格鮮明,修飾素材更豐富;

          2、版面排布樣式合理,貼合PC端及手機端共用版面設計排布(模特信息可1-2個靈活展示)。


          優化點:

          1、模特圖背景 需右側擴邊才可滿足展示樣式,制版時有擴邊功能,但只可四周同時擴邊(純色與復雜背景擴邊也不同);

          2、調整后左側模特圖可展示正常比例,無需擴邊。


          優化點:

          1、整體視覺排布更直觀;

          2、素材圖選取更加精美;

          3、文案關鍵字排布合理,突出面料特性 。


          優化點:模特位置需靠左側些,預留出搭配圖展示的空間。 搭配圖框用豎構圖更為合適。(平鋪圖與畫框之間上下空間比較狹窄,故畫框適合用豎構圖) 兩款搭配圖位置需放置在右下角,右下角空間比較空余,不易遮擋模特身體。深繪美工機器人如何保證詳情頁的高轉化率?

          模板邏輯:圖文架構、模塊邏輯清晰有序;

          模板尺寸:確保頁面寬度和詳情切片高度達到最佳使用尺寸;

          圖片選用:對素材圖類型做了規范,契合模板套用;

          字體選擇:選用的字體貼合品牌風格,同時規范了字體的大小、間距、行距及HTML區的使用;

          色彩搭配:各元素用色貼合季節、類目屬性及品牌風格;

          內容排版:把握各元素的對齊及區塊之間的節奏感,規范圖文排版的組合、重復與循環;

          終端兼容:保證PC端、無線端等多終端共用的良好體驗;

          搭配銷售:根據用戶的素材條件,酌情使用場景化搭銷、關聯搭銷和同類款推薦銷售區域。

          以上規范和屬性均在高轉化模板中體現:

          如何用美工機器人中小商家版做一款高轉化服裝詳情頁(支持免費試用)?核心流程有四步:

          1、免費領取適合自己店鋪和商品定位的高轉化模板(1100多款模板可選);

          2、填寫詳情頁和上貨必需的字段,并上傳商品圖片包;

          3、系統自動分析裁剪歸類圖片并排版詳情頁(電腦端和手機端同步);

          4、系統自動上貨(支持三種上貨狀態的選擇)或者導出詳情頁切片。

          整個過程僅需要10分鐘左右,如果批量制作詳情頁并自動上貨,平均用時僅需3-5分鐘。


          主站蜘蛛池模板: 国语对白一区二区三区| 国产一区二区三区免费视频| 中文字幕人妻第一区| 春暖花开亚洲性无区一区二区| 国产一区二区三区不卡在线看 | 欧洲精品一区二区三区在线观看 | 天天爽夜夜爽人人爽一区二区| 久久一区二区三区99| 在线精品一区二区三区| 国产精品资源一区二区| 亚洲高清美女一区二区三区| 亚洲人成网站18禁止一区| 怡红院美国分院一区二区| 精品日韩亚洲AV无码一区二区三区| 亚洲乱色熟女一区二区三区蜜臀| 亚洲午夜精品第一区二区8050| 亚洲一区二区三区不卡在线播放| 国产品无码一区二区三区在线蜜桃 | 夜夜添无码试看一区二区三区| 亚洲一区二区三区丝袜| 一区二区三区电影网| 亚洲人成网站18禁止一区 | 亚洲福利视频一区二区| 夜夜精品视频一区二区| 国产一区二区三区小说| 国产一区二区三区影院| 无码国产精品一区二区免费式直播| 亚洲一区二区久久| 无码日韩精品一区二区三区免费| 中文字幕无线码一区| 亚洲一区二区三区无码中文字幕| 国产精品伦子一区二区三区| 国产无人区一区二区三区| 精品国产一区二区三区久| 亚洲一区二区三区无码影院| 亚洲日韩国产精品第一页一区| 韩国一区二区视频| 日韩A无码AV一区二区三区 | 亚洲AV无码一区二区三区鸳鸯影院 | 99久久精品国产一区二区成人 | 国产在线精品一区二区在线观看 |