1.背景介紹
網易美學於2023年8月上線,是以產品和技術為核心,以豐富的美妝產品庫,使用者使用合輯心得為內容載體的社群型產品。和絕大多數初創團隊技術架構選型一樣,為了快速上線,美學在一開始選擇了單應用模式,所有的功能都打包放在乙個war包裡,基本沒有外部依賴,應用部署在乙個tomcat容器裡,包含了client,web,運營後台等所有的邏輯,這個狀況一直持續到2023年12月,重構就從這樣「大雜燴」的背景開始。
2.單應用模式的美學
單應用比較適合比較小型的專案,優點總結如下:
但是它的缺點也非常明顯,新美業務膨脹開始後,這一架構受到越來越多的限制
針對這些問題,新美在設計上採用了 微服務架構,對單應用按照業務模組進行有效拆分,實現敏捷的開發和部署。
3.準備工作
3.1 服務化目的
3.2技術準備
3.3 服務規範制定
4.服務化實施過程
4.1 業務建模
這一步是服務化的基礎,需要拆分多少子服務,服務間的依賴關係,都需要通過業務建模表示清楚。
新美是以美妝社群為業務載體的應用,針對女性化妝產品,使用者可以產生大量的內容,進而產生簡單的社交行為。
4.2 服務如何提供
在新美微服務架構中,每乙個服務都有多個拷貝,用來做負載均衡,乙個服務隨時可能下線(發布時候),也可能應對臨時訪問壓力來增加新的服務節點(線上活動預案),這涉及到服務發現的問題,新美通過zookeeper作為服務註冊資訊的分布式管理,通過心跳檢測維持長連線,實時更新服務資訊。
4.3客戶端如何呼叫服務
4.4 服務之間如何通訊
到目前為止,服務都已經分散到獨立的jvm裡面了,單應用場景的各種相互呼叫在微服務後已經無法滿足了。
因為服務提供層需要遵守「避免跨層呼叫」這一準則,服務之間的同步呼叫就被禁止了。
但是業務上需要解決類似於「使用者註冊後,傳送系統通知」這樣的問題,要處理這種場景,我們使用了非同步訊息呼叫來解決服務之間直接呼叫的問題,這也間接引入了分布式事務,冪等處理和最終一致性的難題。
使用非同步訊息,既能降低呼叫服務之間的耦合,又能成為呼叫之間的緩衝,保證訊息積壓不會沖垮呼叫方。
4.5 服務降級方案
服務降級和治理新美目前還在建設中,主要為了應對某幾個服務掛了之後系統如何應對。
目前的比較成熟的應對方案比較多:
5. 服務化平滑上線
前面大量討論了服務化如何準備,如何實施,但真正的難題卻是如何做好老應用平穩遷移到服務化應用,而不導致線上故障。
這裡按照多年重構的經驗,提出一些簡單的看法,這裡涉及到和qa和運維團隊的密切配合。
6.新美服務化的總結
整體來說,新美服務化是乙個大動作,趕在春節這段業務相對空閒時期,做了比較徹底的架構調整,時間持續乙個半月,由於事先準備的比較充分,整體切換比較平滑,不涉及到停機發布,對使用者無感知,沉澱出的一些通用解決方案。
網易雲大禮包:
【推薦】 使用quic
晨讀系列 01 分布式架構訊息佇列
一 訊息佇列概述 訊息佇列中介軟體是分布式系統的重要組建,主要解決 應用耦合,非同步訊息,流量削峰 訊息通訊等問題。目前在生產環境,使用較多的訊息佇列有 activemq rabbitmq zeromq kafka metamq rocketmq 二 訊息佇列應用場景 1.非同步處理 如,使用者註冊...
03分布式電商專案 系統架構
soa 是 service oriented architecture 的首字母簡稱,它是一種支援面向服務的架構樣式。從服務 基於服務開發和服務的結果來看,面向服務是一種思考方式。其實 soa 架構更多應用於網際網路專案開發。為什麼網際網路專案會採用 soa 架構呢?隨著網際網路的發展,應用的規模不...
分布式系統學習 01 分布式系統優缺點與發展
使用分布式系統主要有兩方面原因 增大系統容量 越來越大的業務量,單一機器的效能無法滿足,需要多台機器,需要能對對業務系統進行水平或垂直拆分 加強系統可用 關鍵業務需要高可用,系統中不能存在單點故障,不能因為一台機器出故障而導致整體不可用 分布式系統還有一些其他優勢 分布式系統在解決上述問題的同時,也...