小架構step系列01:小架構初衷

1 概述

小公司做業務服務,需要聚焦到實際的業務上,盡快通過業務服務客戶,給客戶創建價值,公司才能生存下去。在技術上采用的Web應用架構具備以下特點:
  • 主要由開源組件組裝而成。這樣既可以節省成本,也可以把時間聚焦到實際的業務當中,盡快實現業務。
  • 需要功能豐富,能夠支持業務快速開發。數據量雖然不一定大,但業務可能很多,關系型存儲、非結構化存儲、文件存儲、關鍵字搜索、任務調度、消息中間件等一個都不能少,每個都需要用。
  • 不需要支持大的“量”級。大多情況下不涉及大數據、高并發之類的,不能過度設計。
  • 成本要低。不能采用耗費資源過大的組件,客戶服務器預算有限,大多只能提供一臺或者一個雙機的服務器。
這里把這種架構成為“小架構”,這個“小”主要是指小型,其內涵是很豐富的,其核心是要支持業務快速開發,功能豐富且好用。
為了支持業務快速開發,僅僅把一系列開源組件組合還不夠,還需要:
  • 提供一個工程模版,把程序的啟動、參數/返回值處理、異常處理等都規范好,可以直接開發業務。
  • 把開源組件的配置、啟動等封裝起來,給業務提供能夠之間使用的服務。比如消息中間件,業務注入一個服務就可以發消息,不需要關心下面用的到底是Kafka還是RocketMQ,也不關心它們是如何配置的,如何啟動的。
  • 提供一些通用的服務。有些是用開源軟件不夠易用的需要封裝一下,有些沒有開源軟件提供能力的則自研一個。
  • 提供一套規范,大家在這規范下可以快速開發出一致的、易維護的代碼,也能夠減少一些踩坑的情況。
這系列“小架構”的文章就主要是講解如何搭建這種“小架構”的,以及了解相關原理。

2 來由

2.1 一個機會

在一家公司里,受限于人力有限和維護成本,從零建設架構的機會一般是很有限的,不太會每個項目都重頭搞個不同的架構,這對公司的發展和維護是非常困難的。這意味著在一家公司里,能夠接觸到架構變更的機會是非常有限的,可能待很長時間都不一定有一次。架構的變動也是慎之又慎,畢竟底層的東西影響范圍比較大。當時間長了,架構本身就會積累很多東西,也就更加難改變了。
自己在一家公司待的時間很長,經歷過幾次架構改動,架構有在逐步迭代完善。但還是有不少東西受限于歷史原因和業務當時的限制而不得不做的妥協,留下了各種各樣的“遺憾”。經常會有點小小的感慨:如果這個能一開始就做好一點就好了。所以面對這種感慨,自己萌生了有沒有可能重頭再寫一個的想法。在工作上不好說什么時候能有這種機會,但在業余上則是可以嘗試一下,把自己的一些心得實踐一下,也把一些自己覺得“遺憾”的地方糾正一下。

2.2 整理知識

做一件事情時間長的好處是這個事的全流程基本了解,里面有哪些坑和如何折中解決的也都了解。但也有個缺點,就是每次的迭代都是碎片化的,一個個知識就像一顆顆小珍珠一樣散落到各個地方,總是感覺差一根繩子把這些零散的珍珠串接起來形成一個項鏈,也就是一個知識的體系。
借這個機會則可以把這些知識重新整理一下,把自己的一些思考記錄下來,修正一些自己覺得不太好的地方,把自己之前了解的原理片段串聯起來,從而形成一個小知識體系。

2.3 挑戰

這種小架構,麻雀雖小卻五臟俱全,要把里面的知識整理清楚,并不容易。一個東西好像是理解了,但如果要把它有條理的表達出來,難度就不在一個檔次了。自己實際經歷的不少東西是歷史沉淀下來的,歷史的局限也在里面,要把它的一些局限更換掉,既需要對局限的內容深入了解,也要鉆研一些新的知識,才能把這些局限更換掉,這需要花不少時間。而在工作之外,時間本來就比較少,要把這個事情做成,挑戰也比較大,需要自己給自己一股擠時間的勁,額外擠出足夠的時間才有可能完成這個事情。把這個事列出來,也算是有一股監督的力量來推動一下自己。

2.4 局限

筆者并沒有研究過各個公司的架構,很多理解也僅是一家之言,所以這系列的文章有比較多的局限性,整理出來既可以供大家參考,也可以向大家學習。歡迎交流和指正。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912948.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912948.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912948.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

蘋果AR/VR頭顯路線圖曝光,微美全息推進AI/AR智能眼鏡新品開啟視覺體驗篇章

日前,郭明錤發表了一篇關于蘋果(AAPL.US)2025-2028頭戴式產品路線圖的文章,里面提到蘋果正在開發涵蓋MR頭顯、AI眼鏡、AR眼鏡、Birdbath眼鏡等共計7款設備。 蘋果的頭顯設備中,大量出貨的產品是類似于Ray-Ban Meta的智…

python pyecharts 數據分析及可視化(2)

一、任務要求 任務二:感冒高發期分析 【任務說明】 感冒是一種常見的急性上呼吸道病毒性感染性疾病,多由鼻病 毒、副流感病毒、呼吸道合胞病毒、埃可病毒、柯薩奇病毒、冠狀病 毒、腺病毒等引起。臨床表現為鼻塞、噴嚏、流涕、發熱、咳嗽、頭 痛等&#…

React自學 基礎一

React基礎 React 是一個由 Facebook(現 Meta)開發并維護的、開源的 JavaScript 庫,主要用于 構建用戶界面(UI),尤其是單頁面應用程序中的動態、交互式界面。 簡單示例: import React, { useSt…

PHP語法基礎篇(八):超全局變量

超全局變量是在 PHP 4.1.0 中引入的,并且是內置變量,可以在所有作用域中始終可用。 PHP 中的許多預定義變量都是"超全局的",這意味著它們在一個腳本的全部作用域中都可用。在函數或方法中無需執行 global $variable; 就可以訪問它們…

NumPy-核心函數concatenate()深度解析

NumPy-核心函數concatenate深度解析 一、concatenate()基礎語法與核心參數函數簽名與核心作用基礎特性:形狀匹配規則 二、多維數組拼接實戰示例1. 一維數組:最簡單的序列拼接2. 二維數組:按行與按列拼接對比按行拼接(垂直方向&…

aws(學習筆記第四十八課) appsync-graphql-dynamodb

aws(學習筆記第四十八課) appsync-graphql-dynamodb 使用graphql來方便操作dynamodb 理解graphql中的graphql api,schema,resolver 學習內容: graphqlgraphql apischemaresolver 1. 代碼連接和修改 1.1 代碼鏈接 代碼鏈接(app…

關于微前端框架micro,子應用設置--el-primary-color失效的問題

設置了manualChunks導致失效,去掉即可,比較小眾的問題 下面是deepseek的分析 關于 manualChunks 導致 Element Plus 主題變量失效的問題 你找到的確實是問題的關鍵所在。這個 manualChunks 配置影響了 Element Plus 樣式和變量的加載順序,從而導致主題變量失效。…

MySQL 學習 之 你還在用 TIMESTAMP 嗎?

目錄 1. 弊端1.1. 取值范圍1.2. 時區依賴1.3. 隱式轉換 2. 區別3. 解決 1. 弊端 1.1. 取值范圍 TIMESTAMP 的取值范圍為 1970-01-01 00:00:01 UTC 到 2038-01-19 03:14:07 UTC,超出范圍的數據會被強制歸零或觸發異常?。 具體表現為在基金債券等業務中&#xff0…

java中字節和字符有何區別,為什么有字節流和字符流?

在Java中,字節(byte)和字符(char)是兩種不同的數據類型,它們的主要區別在于所表示的數據單位、用途以及編碼方式,字節流和字符流的區分就是為了解決編碼問題。 字節(byte)&#xff…

伴隨矩陣 線性代數

伴隨矩陣的定義 伴隨矩陣的作用是什么?我們可以看到其伴隨矩陣乘上自己等于一個數(自身的行列式)乘以E,所以對于一個方陣來說,其逆矩陣就是自己的伴隨矩陣的倍數。 所以說伴隨矩陣的作用就是用來更好的求解逆矩陣的。…

百勝軟件獲邀走進華為,AI實踐經驗分享精彩綻放

在數字化浪潮席卷全球的當下,零售行業正經歷著深刻變革,人工智能技術成為重塑行業格局的關鍵力量。6月26日,“走進華為——智領零售,AI賦能新未來”活動在華為練秋湖研發中心成功舉辦。百勝軟件作為數字零售深耕者,攜“…

六種扎根理論的編碼方法

一、實境編碼 1.概念:實境編碼是一種基于參與者原生語言的質性編碼方法,其核心在于直接采用研究對象在訪談、觀察或文本中使用的原始詞匯、短語或獨特表達作為分析代碼。該方法通過保留數據的"原生態"語言形式(如方言、隱喻、習慣用…

【Spring篇09】:制作自己的spring-boot-starter依賴1

文章目錄 1. Spring Boot Starter 的本質2. Starter 的模塊結構(推薦)3. 制作 xxx-spring-boot-autoconfigure 模塊3.1 添加必要的依賴3.2 編寫具體功能的配置類3.3 編寫自動化配置類 (AutoConfiguration)3.4 注冊自動化配置類 (.imports 或 spring.fact…

Qt6之qml自定義控件開發流程指南

Qt6之qml自定義控件開發流程指南 🛠? 一、基礎控件創建 定義 QML 文件 在工程中新建 QML 文件(如 CustomButton.qml),文件名首字母大寫。 使用基礎組件(如 Rectangle、Text)構建控件邏輯,通過…

Vue簡介,什么是Vue(Vue3)?

什么是Vue? Vue是一款用于構建用戶界面的JavaScript框架。 它基于標準HTML、CSS和JavaScript構建,并提供了一套聲明式的、組件化的編程模型,幫助你高效地開發用戶界面。無論是簡單的還是復雜地界面,Vue都可以勝任。 聲明式渲染…

從零開始構建Airbyte數據管道:PostgreSQL到BigQuery實戰指南

作為數據工程師,ETL(Extract, Transform, Load)流程是日常工作的核心。然而,構建和維護數據管道往往耗時且復雜。幸運的是,開源工具Airbyte提供了一種更便捷的解決方案——它支持350預構建連接器,允許通過無…

JavaScript的初步學習

目錄 JavaScript簡介 主要特點 主要用途 JavaScript的基本特性 JavaScript的引入方式 1. 內聯方式 (Inline JavaScript) 2. 內部方式 (Internal JavaScript / Embedded JavaScript) 3. 外部方式 (External JavaScript) JavaScript的語法介紹 1.書寫語法 2.輸出語句 3.…

洛谷P1379 八數碼難題【A-star】

P1379 八數碼難題 八數碼難題首先要進行有解性判定,避免無解情況下盲目搜索浪費時間。 有解性判定 P10454 奇數碼問題 題意簡述 在一個 n n n \times n nn 的網格中進行,其中 n n n 為奇數, 1 1 1 個空格和 [ 1 , n 2 ? 1 ] [1,n^2…

MySQL Buffer Pool 深度解析:從架構設計到性能優化(附詳細結構圖解)

在 MySQL 數據庫的世界里,有一個決定性能上限的"神秘倉庫"——Buffer Pool。它就像超市的貨架,把最常用的商品(數據)放在最方便拿取的地方,避免每次都要去倉庫(磁盤)取貨。今天我們就…

使用numpy的快速傅里葉變換的一些問題

離散傅里葉變換(DFT)的頻率(或波數)確實主要由采樣點數和物理步長決定。 最高波數和最小波長的乘積是1。單位長度內波的周期數。 (注意角波數是 k 2 π λ k \frac{2 \pi}{\lambda} kλ2π?) 使用numpy…