溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么掌握框架組件

發(fā)布時間:2021-10-23 17:56:14 來源:億速云 閱讀:136 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“怎么掌握框架組件”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“怎么掌握框架組件”吧!

為什么早期不建議自研?

早期研發(fā)人數(shù)較少,公司也不確定能走多遠(yuǎn),業(yè)務(wù)相對簡單,業(yè)務(wù)以“快速迭代”為最高優(yōu)先級,此時一般會選擇“自己熟悉的技術(shù)”作為選型:

  • 研發(fā)語言:熟PHP選PHP,熟Java選Java

  • 數(shù)據(jù)庫:熟MySQL選MySQL,熟SQL-server選SQL-server

  • 框架組件:熟Ruby  on Rails選ROR,熟ThinkPHP選ThinkPHP,熟Spring  boot才選

  • …

此時千萬不要糾結(jié)選型,選自己熟悉的,業(yè)務(wù)以快速迭代為最優(yōu)先,公司得先生存下來。

多說一句,此時對于技術(shù)合伙人的技術(shù)視野就有一定要求,如果早期方向不對,等公司發(fā)展若干年,數(shù)據(jù)量并發(fā)量上漲很多倍,成本以及未來的技術(shù)應(yīng)對恐怕會有麻煩。

58同城早期選型是微軟技術(shù)體系,后來數(shù)據(jù)量增大,并發(fā)量增大,機器數(shù)據(jù)庫越來越多,性能扛不住,成本也扛不住(你猜一個SQL-server的licence一年多少錢?),后來CTO帶領(lǐng)大家轉(zhuǎn)型開源陣營,雖然陣痛了1-2年,但長遠(yuǎn)來說,絕對是正確的決策。

如今,如果你再創(chuàng)業(yè),選云,選LAMP或者Spring,八成不會走太大的彎路。

隨著規(guī)模的擴大,為什么要控制技術(shù)棧?

隨著業(yè)務(wù)越來越復(fù)雜,研發(fā)人數(shù)越來越多,如果每個leader都選擇自己擅長的框架,就會出現(xiàn)這樣的情況:

  • 站點框架,team  A用著SSH,team B用著Spring+SpringMVC+Mybatis;

  • 服務(wù)框架,team C用著REST,team D用著dubbo,team  E用著thrift;

  • 數(shù)據(jù)庫訪問,team X用著mybatis,team Y用著DAO,team Z用著jdbc;

  • …

對于整體而言,跨部門的調(diào)用越來越麻煩,重復(fù)造的輪子越來越多,技術(shù)效率會逐步降低,研發(fā)+測試+運維成本都越來越高。

第一個觀點:即使不自研,技術(shù)棧也請盡量統(tǒng)一。

統(tǒng)一了技術(shù)棧,為什么建議淺淺的封裝一層?

統(tǒng)一了技術(shù)棧以后,如果不封裝,redis官方Java客戶端Jedis可能有這樣一些接口:

String Memcache::get(String key) String Memcache::set(String key, String value) String Memcache::del(String key)

淺淺的封裝一層,會變成這樣:

String 58DaojiaKV::get(String key) {          String result = Memcache::get(key);          return result; } String 58DaojiaKV::set(String key, String value) {          String result = Memcache::set(key, value);          return result; } String 58DaojiaKV::del(String key) {          String result = Memcache::del(key);          return result; }

這有什么好處呢?

(1)對上游屏蔽底層實現(xiàn)的細(xì)節(jié),調(diào)用方不用關(guān)注緩存是memcache還是redis,調(diào)用方只關(guān)注58DaojiaKV;

(2)底層變化的時候,對上游透明,當(dāng)memcache不能滿足需求,要切換為redis時,所有調(diào)用方不需要大的變化,升級一個最新的58DaojiaKV即可,58DaojiaKV的接口不變,實現(xiàn)變?yōu)椋?/p>

String 58DaojiaKV::get(String key) {          String result = Jedis::get(key);          return result; } String 58DaojiaKV::set(String key, String value) {          String result = Jedis::set(key, value);          return result; } String 58DaojiaKV::del(String key) {          String result = Jedis::del(key);          return result; }

(3)統(tǒng)一實現(xiàn)一些通用的功能,就不需要每一個上游升級了,例如,要實現(xiàn)一個緩存訪問時間統(tǒng)計的功能,所有調(diào)用方不需要大的變化,升級一個最新的58DaojiaKV即可:

String 58DaojiaKV::get(String key) {          Long startTime = now();          String result = Jedis::get(key);          Long endTime = now();          reportKVTime(startTime- endTime);          return result; } String 58DaojiaKV::set(String key, String value) {          Long startTime = now();          String result = Jedis::set(key, value);          Long endTime = now();          reportKVTime(startTime- endTime);          return result; } String 58DaojiaKV::del(String key) {          Long startTime = now();          String result = Jedis::del(key);          Long endTime = now();          reportKVTime(startTime- endTime);          return result; }

同理,如果要實現(xiàn)統(tǒng)一的告警,調(diào)用鏈跟蹤,SQL執(zhí)行時間,也可以用類似的方法。

第二個觀點:第三方庫,不但要統(tǒng)一,還可以淺淺的封裝一層,預(yù)留未來的擴展性。

隨著規(guī)模的進(jìn)一步擴大,為什么需要適當(dāng)?shù)脑煲恍┹喿?

業(yè)務(wù)進(jìn)一步發(fā)展,研發(fā)團隊進(jìn)一步擴張,雖然使用了統(tǒng)一的技術(shù)棧,但不同研發(fā)團隊的痛點是極其類似的:

  • 有站點,監(jiān)控服務(wù)的可用性,處理時間監(jiān)控需求;

  • 有告警需求;

  • 有自動化發(fā)布,自動化運維需求;

  • 有服務(wù)治理,服務(wù)自動發(fā)現(xiàn)需求;

  • 有調(diào)用鏈跟蹤需求;

  • 有SQL監(jiān)控需求;

  • 有系統(tǒng)層面數(shù)據(jù)收集與可視化展現(xiàn)的需求;

  • …

此時,開源的框架可能滿足不了需求了:

  • 開源框架/組件太重了,我們需要的可能只是一個輕量級的框架/組件;

  • 開源框架/組件,只能滿足我們的一部分需求;

  • 不了解開源框架/組件的設(shè)計理念,要二次開發(fā)成本更高(維護dubboX的同學(xué),維護數(shù)據(jù)庫中間件Atlas的同學(xué)可以出來說兩句);

  • 有些通用的需求是和業(yè)務(wù)緊密結(jié)合的,開源框架/組件可能滿足不了;

  • …

此時,如果技術(shù)實力具備,可以統(tǒng)一研發(fā)一些框架和組件,解決所有技術(shù)團隊的通用痛點,滿足所有技術(shù)團隊的通用需求。

第三個觀點:適當(dāng)造一些輪子。

到此,相信大家對“怎么掌握框架組件”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI