
前言
凹凸實驗室從最初的前端團隊成長為如今的全端團隊,意味著我們不僅關注前端的技術能力,也重視全端及全堆疊的能力,在這一篇,我們從前端團隊角度出發,闡述我們最初搭建服務端體系遇到的一些困難,已構建的服務體系架構,以及如何更好地助力業務增長,
些許似曾相識
首先,我們來看下日常作業中存在的一些場景,
- 場景A:在某些業務中,底層資料團隊提供的資料介面并沒有提供 HTTP 呼叫,需要去尋找其他服務端團隊來封裝,這時候需要等待其他團隊排期,可能造成業務無法正常上線;
- 場景B:前端頁面性能卡頓,由于呼叫介面過多,需要等待其他服務端團隊聚合資料;
- 場景C:我們在一些專案需要SSR,前后端需要復用統一套模板;
- 場景D:我們內部范訓了一些專案,需要介面服務,需要等待其他服務端團隊支持,
這些場景的背后,我們急需組建一個服務端研發團隊來承擔部分的業務服務開發以及更好地幫助團隊未來發展,
成型
在團隊組建上,主要采用「內部選拔」 + 「外部招聘」2 種方式,在團隊發展上,我們主要經歷了 3 個階段,
雛形
在最初的階段,選擇以 NodeJS 作為服務端編程語言,主要以下有 2 點考慮:
- 團隊大部分同學熟悉 Javascript,能夠快速學習 NodeJS,上手成本較低;
- 在 SSR 方面有天然的優勢,前后端能夠共用部分代碼,
在這個階段,我們快速范訓了一系列的系統和平臺,比如 Mock 平臺、前端監控平臺、兜底平臺等等,主要目標豐富前端研發體系,提升前后端的開發及協作效率,同時也沉淀了一些 NodeJS 中間件,
成長
在服務開發效率、性能、穩定、安全等方面有了一定的沉淀之后,我們開始思考如何更加規范服務開發,更加高效地支撐業務增長,
在這個階段,我們不僅輸出了「研發規范」、「研發流程」、「開發框架」等一系列的知識體系,也搭建了「部署平臺」、「通用管理平臺」等相關研發平臺,在業務開發上,我們用 NodeJS 實作了「天狗」游戲服務、用 OpenResty 實作了「資料聚合服務」、在某些頻道上采用了 SSR 等等,
賦能
在設計中臺中,我們沉淀了大量的通用服務,比如「頁面」、「圖片」、「編譯」相關的服務,部分服務賦能給了其他團隊,比如說我們將頁面智能設計相關的服務賦能給了「江湖平臺」、「智鋪」等產品,
在公司內部,大部分的服務端團隊技術堆疊主要是 Java,在服務間呼叫采用了集團內部自研的 JSF 協議,而我們團隊主要技術堆疊依然以 NodeJS 為主,給其他團隊提供 HTTP 呼叫,與 Java 在接入方式、限流、代碼提醒等方面存在較大差異,也無法很好利用集團內大量的中間件,
在這個階段,我們引入了 Java 技術堆疊,形成了以「NodeJS + Java」為主要服務端語言的技術體系,針對部分領域服務,我們提供了 Java 版本的 JSF 服務實作,方便第三方團隊溝通合作,
體系結構
經過幾年的沉淀,我們團隊在服務端領域構建出了初步的體系結構,
服務端研發體系的建設,主要目標是為了提升團隊代碼的下限,提升開發效率,提高服務交付質量,促使團隊共同成長,

構建一套服務端研發體系,主要圍繞 8 個方面展開,包含研發規范、研發平臺、研發流程、檔案建設、團隊管理、監控告警、中間件管理以及基礎設施,

在整體服務架構上,我們日常的開發采用分層結構的模式,盡可能去抽離出通用的服務邏輯,輸出更多的積木,降低我們的開發和維護成本,
以下從「業務支撐」和「技術建設」方面去簡單闡述我們近幾年在服務端領域的一些探索和實踐,
業務支撐
業務是團隊的立命之本,只有在業務的快速增長中才能不斷去驗證和優化我們整個服務體系,保證整體服務的可靠性,
羚瓏服務
羚瓏全稱羚瓏智能設計平臺,提供一站式在線設計服務:一鍵摳圖、免費摳圖、商品打腰帶、改尺寸、商品主圖設計、線上廣告banner設計、店鋪首頁設計、活動頁設計、頁面設計、互動營銷設計、小程式設計、動圖視頻設計、視頻廣告設計、商品主圖視頻設計、海報設計、公眾號配圖設計、二維碼名片設計、DM傳單設計、物流面貼設計、易拉寶設計、張貼海報設計等等,提供海量精美模板和免費素材,免費設計,另設有企業專區,是致力于成為商家經營的設計合作伙伴的平臺,
其下的羚瓏智能頁面設計是集結業內各色資深電商行業設計師,提供一站式專業智能頁面和小程式設計服務的平臺,整個架構服務輕量化、模塊化,更便捷拓展專區業務場景,服務架構如下:

整體架構分為 Web 應用層、介面層、服務層和資料層四部分,這樣拆分能做到入口統一,在部署上單點部署讓發布更加便捷,獨立部署則降低模塊更新對整體服務的影響:
- Web 應用層:包括羚瓏及其他的平臺應用;
- 介面層:提供網關服務,應用層的請求經由網關,通過權限校驗,轉發到各個模塊去;
- 服務層:主要分為下面四部分:
- 服務通信:異步通信使用 MQ,RPC 通信采用 HTTP 呼叫的方式;
- 業務模塊:也即服務的核心邏輯,它們被按照功能邏輯劃分成不同的模塊,模塊內獨立地處理大部分功能,達到高內聚低耦合的效果;
- 基礎服務:支撐業務模塊的基礎功能,統一把控用戶與權限;
- 服務管理:用于服務輔助,提升服務的穩定性、健壯性和靈活性,
- 資料層:服務主要使用到了 MongoDB 和 Redis,前者為主要存盤,后者用于資料快取,
專案使用 Typescript 開發,遵循統一的介面規范,保證出入參的風格統一,模塊化的設計讓服務運維和迭代輕松,在功能上,支持專區和場景的插拔式拓展,讓業務變得無限可能,
資料聚合服務
在電商的業務中,比如頻道、大促活動這種型別的業務會經常使用到商品組、廣告組的資料,在通用的介面里面會出現較多冗余的欄位,特別在批量查詢服務的時候,整個回應包會比較大,
我們采用 OpenResty 實作了 GraphQL 服務,資料按需加載,能夠有效減少資料包大小;資料自動兜底,能夠保障服務可用性,尤其在大促期間底層服務出現回應慢的情況下,

技術建設
必要的基礎建設和技術探索,是為了更好地幫助業務和團隊面向未來,
以下圍繞「Talos部署平臺」和「通用管理平臺」來闡述我們在服務端方面的一些基礎建設,
Talos 部署平臺
Talos 部署平臺基于內部的 JDOS 平臺開發而來,主要是提供應用資源管理和部署功能,解區域署難、開發效率低、服務運維成本高等問題,使研發同學更專注于開發,
主要架構圖如下:

我們從「資源管理」、「應用部署」這兩個方面來簡單介紹下該平臺,
資源管理

專案分組功能,可方便開發者管理以及查看分組下應用、流量、資源占用等情況,

靜態網站部署支持將靜態網站應用部署至同一后端應用中,瀏覽器訪問時根據域名或者前置路由匹配對應檔案,達到節省資源,提高資源利用率的目,
除此之外,還有其他的一些功能:
- 提供 Talos 網關,方便服務轉發及掛載;
- 提供 MongoDB 可視化面板功能,方便開發同學查看線上資料庫,提供只讀、讀寫等權限;
- 提供全流程監控功能,包括應用創建、部署、容器調整等,運行程序中 cpu、磁盤、負載等超過閾值也會告警;
- 其他還有容器數量調整、大促時上線限制、通知等功能,
應用部署
支持多環境部署,可設定測驗、預發、生產等環境,每個環境下有各自單獨的組態檔、配置屬性欄位等,支持一鍵部署、回滾、下線等操作,部署界面如下圖:

支持不同專案型別部署,如 NodeJS、靜態站點、自定義部署等,

支持不中斷部署,利用 JDOS 的滾動更新介面,控制流程切換,將應用容器分為前后兩批滾動更新,確保更新程序中應用不會中斷,
通用管理平臺
在開發程序中,往往需要硬編碼一些資料,而大多數的資料在以后的維護、運營中時不時需要更新,過去我們經常被這些瑣碎的修改資料給占用了些時間,降低了編碼效率,解決這個問題有兩種方式,第一種在資料庫中存盤變更資料,開發對應服務端介面進行 CRUD,這種方式我們需要的資源有資料庫、服務端開發、網關域名,這么看來得不償失了,而第二種就是在平臺中動態配置表單,定義資料結構,再錄入資料,同時平臺提供統一的 CRUD 網關 API,在上述的背景下,通用內容管理平臺應運而生,下面來看看提供了哪些實用的功能!
通用管理平臺提供了表單、資料創建,滿足了大部分配置管理功能;同時提供了權限管理功能,可以供產品/運營同事更新資料,擺脫讓開發同學修改資料/版本發布的煩惱,

資料表單 - 資料結構定義
為什么要有表單,而不是直接存 JSON 資料呢?想象下在 MongoDB 資料庫中,假如不能使用 Mongoose 等 ORM 框架進行資料的定義,只能通過閱讀資料或者通過分離的檔案進行理解表結構設計的意義,那樣一定非常痛苦,

表單的功能主要分為表單的欄位設計、用戶權限管理和表單標識編輯,其中欄位設計提供了類似于關系型資料庫的 Schema 設計,用戶可以創建對應表結構的欄位的型別、默認值,甚至可以通過正則運算式對資料進行校驗,

資料 - 資料存盤
資料模塊提供的功能包括了資料錄入、資料同步(不同環境)、版本管理和獲取 API 鏈接的功能,
- 資料錄入:錄入資料時根據表單的欄位規則進行校驗,防止同一個表單內的資料不一致情況;
- 資料同步:平臺上提供了兩個環境,預發和正式,用戶可以進行兩個環境的資料全量同步和部分同步;
- 版本管理:像大多數內容管理平臺一樣,為了防止用戶的誤操作或者是恢復舊版本資料,提供了該功能;
- API 鏈接:在錄入資料之后,通過該鏈接便可以訪問錄入的資料,

以上介紹了通用管理平臺的功能點,在實踐中有大量的應用接入,其中便有羚瓏、Jelly、Taro、Quark 等等優秀的專案,
結語
目前為止,我們在服務端領域的積累和沉淀還只是冰山一角,需要進一步探索和沉淀,未來會更聚焦服務積木化,輸出更多可復用、可賦能的積木,為業務增長保駕護航,
凹凸揭秘系列文章地址
1.《凹凸實驗室的過去與未來》
2.《凹凸技術揭秘·羚瓏智能設計平臺·逐夢設計數智化》
3.《凹凸技術揭秘 · Deco 智能代碼 · 開啟產研效率革命》
4.《凹凸技術揭秘·羚瓏頁面可視化·成長蛻變之路》
5.《凹凸技術揭秘 · 夸克設計資產 · 打造全矩陣優質物料》
6.《凹凸技術揭秘 · Tide 研發平臺 · 布局研發新基建》
7.《凹凸技術揭秘 · Taro · 從跨端到開放式跨端跨框架》
8.《凹凸技術揭秘 · 基礎服務體系 · 構筑服務端技術中樞》
歡迎關注凹凸實驗室博客:aotu.io
或者關注凹凸實驗室公眾號(AOTULabs),不定時推送文章:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/249404.html
標籤:其他
上一篇:Chrome擴展程式開發 - 更改活動選項卡的default_icon
下一篇:原型與原型鏈詳解
