架構實戰

来源:https://www.cnblogs.com/newton/p/18385754
-Advertisement-
Play Games

所謂架構,意即系統架構,廣義上它涵蓋業務架構、運維架構、組織架構等所有系統構建場景,本文特指一般開發人員主要關註的開發架構。 關於架構的理論有很多,每個人也都有各自的理解,筆者相信很多人在實際運用中也會遇到各種各樣的問題和困惑,本文拋開教條,從一個實際項目的演化看何為架構。 項目背景 開始之前,先了 ...


所謂架構,意即系統架構,廣義上它涵蓋業務架構、運維架構、組織架構等所有系統構建場景,本文特指一般開發人員主要關註的開發架構

關於架構的理論有很多,每個人也都有各自的理解,筆者相信很多人在實際運用中也會遇到各種各樣的問題和困惑,本文拋開教條,從一個實際項目的演化看何為架構。

項目背景

開始之前,先瞭解下項目背景。該項目原本是為某東南亞公司開發的圖庫,提供圖片使用授權服務,正規項目。無奈當地營商環境魚龍混雜,黑白手段層出不窮,有好幾個其它項目要麼被 DDOS,要麼流量被劫持,要麼莫名出現違規內容,搞得該公司苦不堪言,這回乾脆重金懸賞,遍求挑梁賢能。這不,被筆者一個在國內靈活就業的朋友揭了榜,幾年之後才回國,這中間發生的種種又是另外的故事了。

不管怎麼說,雖然項目看著不大,但除業務本身內容外,伺服器和數據安全也須重點考慮。

基礎版

顯然,用戶瀏覽網站需要一個site,如果採用前後端分離還得有api-server

為了防止惡意用戶上傳違規內容,所有圖片都由管理員上傳至圖床比如AWS-S3(公共讀私有寫模式)

S3 同步版

基礎版雖然在業務端保證了數據安全,但由於兩處伺服器(S3、site/api,即紅色節點)直接對外暴露,黑客能輕而易舉地實現定位進而展開攻擊。S3 是可靠的雲服務,倒也不用太擔心,然而驚弓之鳥的甲方要求管理員不能直接訪問 S3,防止黑客嗅探到管理端。

於是,在管理端和 S3 中間新加一個中轉節點minio,圖片先上傳到 minio,再同步給 S3,如此,管理端暴露的風險大大降低。

註意此時還沒有解決 site/api 暴露的問題,後面會講。

會員版

馬上新的需求出來了,甲方要求加入收費會員模式,但是不能出現任何關於公司的賬戶信息(看來甲方真的是怕了,要徹底地隱藏自己)。

要有會員體系,得先有賬號模塊,為防止惡意註冊,加上郵箱驗證即可。

收費不能體現公司賬號比較麻煩,常規走銀行流水肯定不行,第三方甚至套殼支付總是會被追蹤到,剩下的選擇只有加密貨幣了,所幸加密貨幣在當地是被廣泛使用的。

加密貨幣交易一般都是非同步的,所以要設計一個定時器,定時從鏈上獲取最新的交易記錄,同步給賬號中心處理。

圖中虛線表示連接的是內部服務。

CMS 版

管理員除管理圖片外,還需對網站本身進行管理,比如廣告投放、佈局調整、會員策略等。於是新增了CMS-Service

當然以後還會需要其它非 CMS 的站點管理功能比如會員管理、系統監控等,統一以admin-site對管理端提供服務。

CQRS 版

現在,把圖片管理一同併入站點管理,並對各服務應用CQRS模式,為以後做讀寫策略/集群/分散式打下良好基礎。

註意,其中 admin-site 兼具 site-command、album-command 職責。

IM 版

為了提升服務質量,甲方老闆要求加上線上客服,客戶訴求第一時間反饋,同時其它一些消息(比如客戶下單、圖片合約到期等),管理員也能第一時間收到。

這就不單單是一個即時聊天系統了,還得有消息推送的功能。

再考慮到當地朝九晚五懶散的工作狀態,想要管理員一直呆在電腦前也不現實,那麼客戶消息和系統消息就容易錯過。

還好,這裡有一個人人都離不開的聊天 App ——Telegram,這玩意兒類似國內的微信,但是開放了很多介面和協議,使第三方系統能方便地接入它。比如我們可以使用它的Telegram-Bot,當客戶發送消息時,IM 服務除向管理端實時推送外,還會推送給 Telegram-Bot,Telegram-Bot 再將消息推至 Telegram,如此,沉浸在美女頻道的管理員就能及時知道有待反饋消息了。

Cloudflare 版

系統的主要功能基本都實現了,但甲方心心念念的安全問題反倒隨著功能的擴展顯得更加嚴峻。如之前所述,直接暴露給用戶的節點風險等級最高,其次為管理員使用節點,進而會影響到整個系統內部。

自己搭建一套安全體系成本太高,實力也不允許,幸好市面上有免費的午餐,比如Cloudflare

Cloudflare 是全球知名的網路服務商,提供保護、優化、加速網站等相關服務。本項目中至少可以考慮如下服務:

  • 源站 IP 隱藏
  • Bots - 自動屏蔽惡意爬蟲
  • Turnstile - 人機驗證
  • S3 功能變數名稱重寫為本站功能變數名稱(做了 cname 解析)

同時要求管理員在所使用的設備上安裝VPN,將風險降到最低。

可以看到,圖中的紅黃線塊都沒了,整個系統只要內部不出問題,從外部攻破的可能性不大。

CI/CD 版

還有一個漏洞,甲方意味深長地說。他指的是從本地開發/測試機部署至生產環境這道工序,同樣會出現本地設備直連線上節點的情況。雖然現在伺服器已經藏得夠深,直接登錄被髮現的幾率不大,但安全起見,甲方還是要求每次都採用跳板機中轉一下。

對於經常發版的任務,跳板中轉屬實也有點麻煩,可以採用CI/CD方案,自動化部署,既輕鬆又安全。

至此,開發架構與運維架構產生了交集,前者也總算可以告一段落了。


總結

架構,既是名詞,亦是動詞,既是實體,亦是變化,它是一種理念,也是一種實施。但它肯定不是一套模板 —— 如果所有的房屋都千篇一律,那也不存在架構師了。

整個項目,甲方對安全的要求簡直到了偏執的程度,很多要求看似無理,聰明的你也許能看出些端倪:)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 此“華仔”,不是彼“華仔”,你懂的! 先來了個截圖 緊跟著,實現步驟也來了 1. 安裝 Node.js,終端運行 npm create vue@latest,項目名 vue-to-do,後面的選項全選 No; 2. cd vue-to-do 進入項目目錄,npm install 安裝依賴,npm r ...
  • title: 使用 Nuxt 的 showError 顯示全屏錯誤頁面 date: 2024/8/26 updated: 2024/8/26 author: cmdragon excerpt: 摘要:本文介紹Nuxt.js中的showError方法用於顯示全屏錯誤頁面,包括其參數類型及使用方式,並演 ...
  • 信息系統設計速查表需求收集功能性需求:通過用戶訪談、問卷調查和市場分析來確定系統必須實現的功能。 非功能性需求:定義性能基準(如響應時間)、安全性要求(如數據加密標準,傳輸加密)、可靠性標準(如系統的正常運行時間, MTTR)。 用戶故事:使用敏捷方法論,如Scrum,來創建和優先順序排序用戶故事。 ...
  • @目錄1.流程2.自定義發佈數據2.1 std_msgs內置類型2.2 編寫.msg文件2.3 修改package.xml文件2.3.1 完整的package.xml文件2.4 修改CMakeLists.txt文件2.4.1 修改find_package指令2.4.2 添加add_message_f ...
  • IOC與DI的理解 1.1、IoC是什麼 Ioc—Inversion of Control,即“控制反轉”,不是什麼技術,而是一種設計思想。在Java開發中,Ioc意味著將你設計好的對象交給容器控制,而不是傳統的在你的對象內部直接控制。如何理解好Ioc呢?理解好Ioc的關鍵是要明確“誰控制誰,控制什 ...
  • @目錄1.launch文件有哪些標簽2.node標簽2.1 必選屬性2.2 可選屬性2.3 可選子級標簽3.include標簽3.1 必選屬性3.2 可選屬性3.3 可選子級標簽4.remap標簽4.1 必選屬性5.param標簽5.1 必選屬性5.2 可選屬性6.rosparam標簽6.1 必選屬 ...
  • @目錄1.工作空間目錄2.載入環境變數3.打開CLion4.配置CLion5.編譯和調試軟體包 1.工作空間目錄 我們的一個工作空間目錄應該是這樣的 2.載入環境變數 先進入工作空間再載入 source ./devel/setup.bash 3.打開CLion 一定要在第二步的同一個終端下 clio ...
  • @目錄1.流程2.自定義請求和響應的數據2.1 std_msgs內置類型2.2 編寫.srv文件2.3 修改package.xml文件2.4 修改CMakeLists.txt文件2.4.1 修改find_package指令2.4.2 添加add_message_files指令2.4.3 添加gene ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...