主頁 > 企業開發 > 凹凸技術揭秘 · 基礎服務體系 · 構筑服務端技術中樞

凹凸技術揭秘 · 基礎服務體系 · 構筑服務端技術中樞

2021-01-16 07:39:50 企業開發

前言

凹凸實驗室從最初的前端團隊成長為如今的全端團隊,意味著我們不僅關注前端的技術能力,也重視全端及全堆疊的能力,在這一篇,我們從前端團隊角度出發,闡述我們最初搭建服務端體系遇到的一些困難,已構建的服務體系架構,以及如何更好地助力業務增長,

些許似曾相識

首先,我們來看下日常作業中存在的一些場景,

  • 場景A:在某些業務中,底層資料團隊提供的資料介面并沒有提供 HTTP 呼叫,需要去尋找其他服務端團隊來封裝,這時候需要等待其他團隊排期,可能造成業務無法正常上線;
  • 場景B:前端頁面性能卡頓,由于呼叫介面過多,需要等待其他服務端團隊聚合資料;
  • 場景C:我們在一些專案需要SSR,前后端需要復用統一套模板;
  • 場景D:我們內部范訓了一些專案,需要介面服務,需要等待其他服務端團隊支持,

這些場景的背后,我們急需組建一個服務端研發團隊來承擔部分的業務服務開發以及更好地幫助團隊未來發展,

成型

在團隊組建上,主要采用「內部選拔」 + 「外部招聘」2 種方式,在團隊發展上,我們主要經歷了 3 個階段,

雛形

在最初的階段,選擇以 NodeJS 作為服務端編程語言,主要以下有 2 點考慮:

  1. 團隊大部分同學熟悉 Javascript,能夠快速學習 NodeJS,上手成本較低;
  2. 在 SSR 方面有天然的優勢,前后端能夠共用部分代碼,

在這個階段,我們快速范訓了一系列的系統和平臺,比如 Mock 平臺、前端監控平臺、兜底平臺等等,主要目標豐富前端研發體系,提升前后端的開發及協作效率,同時也沉淀了一些 NodeJS 中間件,

成長

在服務開發效率、性能、穩定、安全等方面有了一定的沉淀之后,我們開始思考如何更加規范服務開發,更加高效地支撐業務增長,

在這個階段,我們不僅輸出了「研發規范」、「研發流程」、「開發框架」等一系列的知識體系,也搭建了「部署平臺」、「通用管理平臺」等相關研發平臺,在業務開發上,我們用 NodeJS 實作了「天狗」游戲服務、用 OpenResty 實作了「資料聚合服務」、在某些頻道上采用了 SSR 等等,

賦能

在設計中臺中,我們沉淀了大量的通用服務,比如「頁面」、「圖片」、「編譯」相關的服務,部分服務賦能給了其他團隊,比如說我們將頁面智能設計相關的服務賦能給了「江湖平臺」、「智鋪」等產品,

在公司內部,大部分的服務端團隊技術堆疊主要是 Java,在服務間呼叫采用了集團內部自研的 JSF 協議,而我們團隊主要技術堆疊依然以 NodeJS 為主,給其他團隊提供 HTTP 呼叫,與 Java 在接入方式、限流、代碼提醒等方面存在較大差異,也無法很好利用集團內大量的中間件,

在這個階段,我們引入了 Java 技術堆疊,形成了以「NodeJS + Java」為主要服務端語言的技術體系,針對部分領域服務,我們提供了 Java 版本的 JSF 服務實作,方便第三方團隊溝通合作,

體系結構

經過幾年的沉淀,我們團隊在服務端領域構建出了初步的體系結構,

服務端研發體系的建設,主要目標是為了提升團隊代碼的下限,提升開發效率,提高服務交付質量,促使團隊共同成長,

system

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

platform

在整體服務架構上,我們日常的開發采用分層結構的模式,盡可能去抽離出通用的服務邏輯,輸出更多的積木,降低我們的開發和維護成本,

以下從「業務支撐」和「技術建設」方面去簡單闡述我們近幾年在服務端領域的一些探索和實踐,

業務支撐

業務是團隊的立命之本,只有在業務的快速增長中才能不斷去驗證和優化我們整個服務體系,保證整體服務的可靠性,

羚瓏服務

羚瓏全稱羚瓏智能設計平臺,提供一站式在線設計服務:一鍵摳圖、免費摳圖、商品打腰帶、改尺寸、商品主圖設計、線上廣告banner設計、店鋪首頁設計、活動頁設計、頁面設計、互動營銷設計、小程式設計、動圖視頻設計、視頻廣告設計、商品主圖視頻設計、海報設計、公眾號配圖設計、二維碼名片設計、DM傳單設計、物流面貼設計、易拉寶設計、張貼海報設計等等,提供海量精美模板和免費素材,免費設計,另設有企業專區,是致力于成為商家經營的設計合作伙伴的平臺,

其下的羚瓏智能頁面設計是集結業內各色資深電商行業設計師,提供一站式專業智能頁面和小程式設計服務的平臺,整個架構服務輕量化、模塊化,更便捷拓展專區業務場景,服務架構如下:

服務架構圖

整體架構分為 Web 應用層、介面層、服務層和資料層四部分,這樣拆分能做到入口統一,在部署上單點部署讓發布更加便捷,獨立部署則降低模塊更新對整體服務的影響:

  • Web 應用層:包括羚瓏及其他的平臺應用;
  • 介面層:提供網關服務,應用層的請求經由網關,通過權限校驗,轉發到各個模塊去;
  • 服務層:主要分為下面四部分:
    • 服務通信:異步通信使用 MQ,RPC 通信采用 HTTP 呼叫的方式;
    • 業務模塊:也即服務的核心邏輯,它們被按照功能邏輯劃分成不同的模塊,模塊內獨立地處理大部分功能,達到高內聚低耦合的效果;
    • 基礎服務:支撐業務模塊的基礎功能,統一把控用戶與權限;
    • 服務管理:用于服務輔助,提升服務的穩定性、健壯性和靈活性,
  • 資料層:服務主要使用到了 MongoDB 和 Redis,前者為主要存盤,后者用于資料快取,

專案使用 Typescript 開發,遵循統一的介面規范,保證出入參的風格統一,模塊化的設計讓服務運維和迭代輕松,在功能上,支持專區和場景的插拔式拓展,讓業務變得無限可能,

資料聚合服務

在電商的業務中,比如頻道、大促活動這種型別的業務會經常使用到商品組、廣告組的資料,在通用的介面里面會出現較多冗余的欄位,特別在批量查詢服務的時候,整個回應包會比較大,

我們采用 OpenResty 實作了 GraphQL 服務,資料按需加載,能夠有效減少資料包大小;資料自動兜底,能夠保障服務可用性,尤其在大促期間底層服務出現回應慢的情況下,

o2api

技術建設

必要的基礎建設和技術探索,是為了更好地幫助業務和團隊面向未來,

以下圍繞「Talos部署平臺」和「通用管理平臺」來闡述我們在服務端方面的一些基礎建設,

Talos 部署平臺

Talos 部署平臺基于內部的 JDOS 平臺開發而來,主要是提供應用資源管理和部署功能,解區域署難、開發效率低、服務運維成本高等問題,使研發同學更專注于開發,

主要架構圖如下:
Talos 框架圖

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

資源管理

Talos 專案分組

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

Talos 靜態網站部署方式

靜態網站部署支持將靜態網站應用部署至同一后端應用中,瀏覽器訪問時根據域名或者前置路由匹配對應檔案,達到節省資源,提高資源利用率的目,

除此之外,還有其他的一些功能:

  • 提供 Talos 網關,方便服務轉發及掛載;
  • 提供 MongoDB 可視化面板功能,方便開發同學查看線上資料庫,提供只讀、讀寫等權限;
  • 提供全流程監控功能,包括應用創建、部署、容器調整等,運行程序中 cpu、磁盤、負載等超過閾值也會告警;
  • 其他還有容器數量調整、大促時上線限制、通知等功能,
應用部署

支持多環境部署,可設定測驗、預發、生產等環境,每個環境下有各自單獨的組態檔、配置屬性欄位等,支持一鍵部署、回滾、下線等操作,部署界面如下圖:

Talos 應用部署

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

Talos 不中斷部署

支持不中斷部署,利用 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/249401.html

標籤:JavaScript

上一篇:關于在Vue中使用ZTree

下一篇:原型與原型鏈詳解

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more