公司為什麼需要建立一套統一的開發框架?
一、起因:野蠻生長
近十年,中國網際網路發展的速度越來越快,網際網路科技顛覆了越來越多的傳統行業,我們的衣食住行隨著網際網路科技的進步,發生了翻天覆地的變化。在這個大潮中,越來越多新興的公司如雨後春筍般的冒了出來,他們的業務增長非常快,公司規模也越來越大。這得益於中國經濟的高速增長和網際網路的快速發展。
弊端一:自我繁衍
在公司快速的發展過程中,往往會出現這樣一個鏈條。新增一塊業務 —> 招聘一位高階技術人員 —> 圍繞這位同事組建一隻技術團隊 —> 該業務基本由這隻團隊負責。然後就形成了一個閉環。當需要跟其他業務進行互動時,經常是技術負責人之間自行決定。(我曾經經歷過一個專案,同樣一個業務介面,同時提供 RPC,HTTP,MQ 等多種方式,為了給不同的專案提供基礎服務)。
弊端二:管控壁壘
隨著業務規模的快速發展,這個團隊很快的形成了一個部門,團隊決策者通常會從自身利益考量,希望儘量減少對外部門的依賴,無論是技術選型,規範建立,元件選取,執行環境都能夠自行掌控。(在這裡講一個笑話,在一家公司怎麼成為中層領導呢?很簡單,招聘足夠多的下屬就可以了)。
弊端三:斷崖效應
當這樣的技術氛圍一旦形成,單個員工對單個專案的影響就會變的非常巨大。一個產品經常會因為一兩個核心員工的離職難以為繼,最後不得不重新開發新的產品。
弊端四:資源浪費
當每個團隊都在試圖構建自己完整的研發流程時。中間的技術研究,產品研發,運維管理就會出現非常多的資源浪費。
弊端五:難以考核
怎麼衡量一個川菜廚師和一個魯菜廚師誰更優秀?當每個團隊都採用不同技術棧,不同的技術元件,不同的維護方式和規範時。已經無法從產出效率來判斷一個團隊的績效。KPI 指標也就非常難以設立。
二、如何破解?
在公司發展初期,為了快速的進行業務拓展,大都不考慮成本投入,運營維護以及技術沉澱等問題。所有的指標導向都是業務的快速發展,儘可能的搶佔市場份額,獲取足夠多的使用者數量。
在公司發展到一定階段後,市場逐漸趨於穩定,先期快速擴充套件的各種問題會逐步暴露出來。從技術層面來講,如果可以形成公司級別的統一開發框架,會在實際的生產過程中帶來非常大的收益。
三、 統一開發框架的優勢
1. 避免重複性技術研究——節約人力成本
讓專案組把精力更多的投入到業務中。相信這是大多數技術公司的共識,如果讓專案組把精力投入在業務中?就需要在專案組之下構建一個基礎的開發架構平臺,把技術的共性問題提煉出來,交給這樣一個團隊負責處理。避免每個專案都獨自去解決遇到的各種各樣的技術難題,有效的把精力釋放出來。
2. 標準化技術規範——提升產品專案質量
要千人一面,而不要千人千面。採用統一的開發框架(平臺)後,在技術棧,技術元件,技術實現方案,甚至在程式碼規範上就能形成標準化的技術輸出模式,標準化帶來的最大效果不僅僅開發效率的快速提升,還有產品質量的大幅提升,這是顯而易見的。
3. 進行技術沉澱——提升公司整體技術能力,避免陷入一個人的能力決定一個專案
技術的進步來源於不斷的技術積累和沉澱。每個工程師都是站在別人肩膀上完成工作的。以專案為導向的技術團隊,一般都會以實現業務需求為最重要的目標,技術只不過是完成業務的一種工具而已。基於此,業務開發團隊就不可能把技術積累作為一項重要的工作。當一位核心員工構建了一些基礎的平臺工具後,往往隨著他的離開把之前的技術積累全部丟棄掉,而更嚴重的情況會導致整個專案的持續執行都成了問題。
當存在公司級別的統一開發框架(平臺),專案團隊基於該平臺進行自身專案的研發,不再需要關注於底層技術實現,只需要關注業務即可。當存在核心同事離職時,平臺的研發同事可以對新進入專案的同事進行相關培訓,不會導致青黃不接的事情發生。而且,專注於平臺的同事為了更好的滿足專案組的技術需求,對平臺進行不斷的改進,從而達到技術積累和沉澱的目標。
4. 可衡量的研發投入——對研發團隊的有效管理和考核
當基於同一開發框架(平臺)的標準化技術規範建立起來後,對業務功能的程式碼實現就可以進行相對有效的評估和考量,可以避免因為技術實現差異而出現的種種問題。這對 KPI 的制定和考核是一個巨大的幫助。
四、 統一開發框架(平臺)的定位和目標
統一開發框架(平臺)定位於技術層面,其主要目的是為統一公司內相關產品研發和專案實施使用的技術架構和開發工具,有效提高統一技術支援力度,形成持續的技術積累手段,提升技術人員的利用率並降低對人員的依賴性,最終提升軟體的規模化、流水線式的生產能力。
五、統一開發框架(平臺)的建設思路
1. 基於 Spring Cloud 技術棧
Spring Cloud 在 2017 年一躍成為最流行的微服務開發框架,不是採用了 Spring Cloud 框架就實現了微服務架構,具備了微服務架構的優勢。正確的理解是使用 Spring Cloud 框架開發微服務架構的系統,使系統具備微服務架構的優勢。下圖為選擇 Spring Cloud 作為技術棧的原因。
2. 部分 SpringCloud 構件的增強
Spring Cloud 提供的基礎構建可能無法完全滿足業務需求,需要在部分構件之上做二次研發。比如我們在 Zuul 基礎之上研發的 API 閘道器、服務註冊發現中心 EurekaPlus 等。
下圖為服務註冊發現中心 EurekaPlus 的截圖,可以手動控制服務註冊中心的節點狀態,從而支援藍綠部署。
3. 新基礎元件產品的研發
除了 Spring Cloud 的基礎構件外,我們往往需要開發新的基礎元件產品來滿足專案組的需求。特別是當前微服務架構大行其道,常常需要基於微服務架構的設計思想來開發新的元件產品,比如我們開發的分散式任務排程框架。採用自動抓取,線上編排的模式,完全契合於 Spring Cloud 技術棧。
下圖為分散式任務排程框架原理。執行器在啟動時將任務介面註冊到分散式資料中心,編排中心從分散式資料中心獲取執行器資訊進行編排,然後把編排資訊儲存到資料儲存中,排程中心從資料儲存中獲取資訊對執行器進行遠端排程。
六、統一開發框架(平臺)團隊的運作方式
如何在公司推進統一開發框架(平臺)的建設,並不是一件簡單的事情。以我個人的經驗,從分工和運作方式上來講,我主要著重把統一開發框架(平臺)的工作分成三個部分。
-
開發示例、技術支援和技術規範。編寫完整的開發示例,對很多新接觸統一開發框架的同事來說,有一份完成業務開發是非常重要,不僅僅可以指導你如何進行業務程式碼的編寫,同時還能夠指導你如何編寫出正確、高效的程式碼。還需要對很多同事進行技術培訓與技術支援支援,都是統一開發框架(平臺)團隊應該完成的工作。
-
服務運維。統一開發框架(平臺)提供了很多公司內部的服務,比如服務註冊發現中心、配置中心、監控中心、鏈路中心、健康監測中心等。這些都需要統一開發框架(平臺)團隊進行運維。
-
新元件、新產品的研發。前一章節提到的 API 閘道器、分散式任務排程框架、服務註冊中心 Plus 等。都是統一開發框架(平臺)團隊的工作範圍。
七、過猶不及
雖然建設公司級的統一開發框架(平臺)會在實際的生產過程中帶來非常大的收益。但未必適用於所有情況,考慮到某些專案產品的特殊性,並不能一概而論。
相關推薦
公司為什麼需要建立一套統一的開發框架?
一、起因:野蠻生長 近十年,中國網際網路發展的速度越來越快,網際網路科技顛覆了越來越多的傳統行業,我們的衣食住行隨著網際網路科技的進步,發生了翻天覆地的變化。在這個大潮中,越來越多新興的公司如雨後春筍般的冒了出來,他們的業務增長非常快,公司規模也越來越大。這得益於中國經濟的
Web快速開發:一套標準開發框架對企業有多重要
前端 asp.net+mvc 快速開發平臺 快速發框架 Web快速開發:一套標準開發框架對企業有多重要 近十年,是中國互聯網發展最為蓬勃的時期,互聯網的快速發展顛覆了越來越多的傳統行業,人們的生活隨著互聯網的發展,發生著天翻地覆的變化。 在這種互聯網
基於.net core 2.0+mysql+AceAdmin搭建一套快速開發框架
前言 .net core已經出來一段時間了,相信大家對.net core的概念已經很清楚了,這裡就不再贅述。筆者目前也用.net core做過一些專案,並且將以前framework下的一些經驗移植到了.net core下,並結合.net core本身的一些特性整理成此框架,以供學習參考。如有不足之處,歡迎指
基於spring boot 獨立開發的一套統一認證解決方案,易讀、易拓展
follow 公司 登錄頁面 跳轉 所有 不可 權限 github 源碼 公司需求搭建公司內部系統,需要使用到統一認證,在查看shiro等發現接入無頭緒,而且存在不可控性,對於認證系統高可用、可靠性會顯得無比重要,所以筆者決定手動擼一套統一認證解決方案。 筆者通過sprin
搭建一套Java開發環境以及使用eclipse從頭一步步建立java專案
一、java 開發環境的搭建 在windows 環境下怎麼配置環境。 1.首先安裝JDK java的sdk簡稱JDK ,去其官方網站下載JDK。 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-down
建立一套MySQL及Redis搭建統一的KV儲存服務
一、MySQL+Redis 常用部署方式 1.1 拓撲 1.2 特點 業務層通過雙寫同時寫MySQL及Redis。讀通常在Redis,若讀取不到,則從MySQL讀取,然後將資料同步到Redis,Redis通常設定expire或者預設LRU進行資料淘汰。 這
基於ASP.Net Core開發一套通用後臺框架記錄-(資料庫設計(許可權模組))
寫在前面 本系列部落格是本人在學習的過程中搭建學習的記錄,如果對你有所幫助那再好不過。如果您有發現錯誤,請告知我,我會第一時間修改。 前期我不會公開原始碼,我想是一點點敲程式碼,不然複製、貼上那就沒意思了。而且很多程式碼(比如Identity Server4)網上也有很多類似的教程及成熟的框架。這裡只是想,知
基於ASP.Net Core開發的一套通用後臺框架
基於ASP.Net Core開發一套通用後臺框架 寫在前面 這是本人在學習的過程中搭建學習的框架,如果對你有所幫助那再好不過。如果您有發現錯誤,請告知我,我會第一時間修改。 知其然,知其所以然,並非重複的造輪子。因為這段時間我發現,自己悶很久寫出來的程式碼,再去看看別人的,會有種恍然大悟的感覺。不是隻會用,而
如何零基礎搭建一套微服務框架(一)
原標題:如何零基礎搭建一套微服務框架(Spring Boot + Dubbo + Docker + Jenkins) 本文你將學到什麼? 本文將以原理+實戰的方式,首先對“微服務”相關的概念進行知識點掃盲,然後開始手把手教你搭建這一整套的微服務系統。 專案完整原始碼下載 https
Django如何建立一套介面級別的許可權系統
從零開始搭建當然是可以的,但是Django的特色就是大而全,所以,我的方案是,利用現有的Django框架,實現功能。 我用的pycharm,操作很方便快捷。 | auth_group | | auth_group_permissi
建立一套精美的聖誕圖示
建立新文件 如我們建立所有新專案那樣,首先我們建立一個新文件(檔案>新建或控制+ N),並進行以下設定: 畫板數量: 1 寬度: 800畫素 高度: 600畫素 單位:畫素 並從“ 高階”選項卡: 色彩模式: RGB 光柵效果:螢幕(
Taro 1.2.0 beta 13 釋出,多端統一開發框架
Taro 1.2.0 beta 13 釋出了,Taro 是一套遵循 React 語法規範的多端統一開發框架,支援用 React 的方式編寫一次程式碼,生成能執行在微信小程式/百度智慧小程式/支付寶小程式、H5 與 React Native 等端的應用。 更新內容如下: B
平面設計:如何建立一套精美的日落插圖
(本教程由尋 圖示icon.52112.com提供) 在今天的教程中,我將會教大家如何使用Illustrator提供的一些基本繪圖工具來繪製一個漂亮的日落插圖。 設定新的專案檔案 啟動並執行Illustrator,為我們的專案建立
建立一套精美的辦公主題圖示
(本教程由尋 圖示icon.52112.com提供) 建立基本形狀 首先讓我們在Adobe Illustrator中建立一個具有以下引數的新文件: (本教程由尋 圖
Taro 1.2.1 釋出,多端統一開發框架
Taro 1.2.1 釋出了,Taro 是一套遵循 React 語法規範的多端統一開發框架,支援用 React 的方式編寫一次程式碼,生成能執行在微信小程式/百度智慧小程式/支付寶小程式、H5 與 React Native 等端的應用。 Bug Fixes cli:&
Taro 1.2.2 釋出,多端統一開發框架
Taro 1.2.2 已釋出,Taro 是一套遵循 React 語法規範的多端統一開發框架,支援用 React 的方式編寫一次程式碼,生成能執行在微信小程式/百度智慧小程式/支付寶小程式、H5 與 React Native 等端的應用。 Bug Fixes cli:&
Taro 1.2.3 釋出,多端統一開發框架
Taro 1.2.3 釋出了,Taro 是一套遵循 React 語法規範的多端統一開發框架,支援用 React 的方式編寫一次程式碼,生成能執行在微信小程式/百度智慧小程式/支付寶小程式、H5 與 React Native 等端的應用。 更新內容如下: Bug
web前端背景下的多端統一開發框架
自從跨平臺興起以來,各種各樣的框架層出不窮,從一開始的 Hybrid App (PhoneGap/Cordova/Ionic),到前兩年開始熱門的編譯轉換框架 React-Native 和 Weex,以及今年大火的 Flutter,期間還興起了 Web App 的熱潮 (PWA 和各種小程式)
零基礎秒懂:手把手教你搭建一套微服務框架!
這套微服務框架能幹啥?這套系統搭建完之後,可以實現:微服務架構,你的整個應用程式將會被拆分成一個個功能獨立的子系統,獨立執行,系統與系統之間通過 RPC 介面通訊。這樣系統之間的耦合度大大降低,你的系統
Taro 1.2.4 釋出,多端統一開發框架
Taro 1.2.4 釋出了,Taro 是一套遵循 React 語法規範的多端統一開發框架,支援用 React 的方式編寫一次程式碼,生成能執行在微信小程式/百度智慧小程式/支付寶小程式、H5 與 React Native 等端的應用。 更新內容如下: Bug Fixes