成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

框架組件,究竟要不要自己重復造輪子?

開發 數據庫
框架組件,究竟要不要自研?究竟要不要建設自研技術體系?下面,我談一談自己的想法。

有朋友在星球問我:

框架組件,究竟要不要自研?究竟要不要建設自研技術體系。

15年加盟到家后,框架/組件/基礎服務/技術平臺,正好也是自己負責范圍的一部分,故談一談自己的想法。 

為什么早期不建議自研?

早期研發人數較少,公司也不確定能走多遠,業務相對簡單,業務以“快速迭代”為最高優先級,此時一般會選擇“自己熟悉的技術”作為選型:

  • 研發語言:熟PHP選PHP,熟Java選Java;
  • 數據庫:熟MySQL選MySQL,熟SQL-server選SQL-server;
  • 框架組件:熟Ruby on Rails選ROR,熟ThinkPHP選ThinkPHP,熟Spring boot才選;

此時千萬不要糾結選型,選自己熟悉的,業務以快速迭代為最優先,公司得先生存下來。

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

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

如今,如果你再創業,選云,選Spring體系,八成不會走太大的彎路。

隨著規模的擴大,為什么要控制技術棧?

隨著業務越來越復雜,研發人數越來越多,如果每個leader都選擇自己擅長的框架,就會出現這樣的情況:

  • 站點框架,team A用著SSH,team B用著Spring+SpringMVC+Mybatis;
  • 服務框架,team C用著REST,team D用著dubbo,team E用著thrift;
  • 數據庫訪問,team X用著mybatis,team Y用著DAO,team Z用著jdbc;

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

第一個觀點:即使不自研,技術棧也請盡量統一。

統一了技術棧,為什么建議淺淺的封裝一層?

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

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

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

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

這有什么好處呢?

  • 對上游屏蔽底層實現的細節,調用方不用關注緩存是memcache還是redis,調用方只關注DaojiaKV;
  • 底層變化的時候,對上游透明,當memcache不能滿足需求,要切換為redis時,所有調用方不需要大的變化,升級一個最新的DaojiaKV即可,DaojiaKV的接口不變,實現變為:
String DaojiaKV::get(String key) {
         String result = Jedis::get(key);
         return result;
}
String DaojiaKV::set(String key, String value) {
         String result = Jedis::set(key, value);
         return result;
}
String DaojiaKV::del(String key) {
         String result = Jedis::del(key);
         return result;
}
  • 統一實現一些通用的功能,就不需要每一個上游升級了,例如,要實現一個緩存訪問時間統計的功能,所有調用方不需要大的變化,升級一個最新的DaojiaKV即可:
String DaojiaKV::get(String key) {
         Long startTime = now();
         String result = Jedis::get(key);
         Long endTime = now();
         reportKVTime(startTime- endTime);
         return result;
}
String DaojiaKV::set(String key, String value) {
         Long startTime = now();
         String result = Jedis::set(key, value);
         Long endTime = now();
         reportKVTime(startTime- endTime);
         return result;
}
String DaojiaKV::del(String key) {
         Long startTime = now();
         String result = Jedis::del(key);
         Long endTime = now();
         reportKVTime(startTime- endTime);
         return result;
}

同理,如果要實現統一的告警,調用鏈跟蹤,SQL執行時間,也可以用類似的方法。

第二個觀點:第三方庫,不但要統一,還可以淺淺地封裝一層,預留未來的擴展性。

隨著規模的進一步擴大,為什么需要適當的造一些輪子?

業務進一步發展,研發團隊進一步擴張,雖然使用了統一的技術棧,但不同研發團隊的痛點是極其類似的:

  • 有站點,監控服務的可用性,處理時間監控需求;
  • 有告警需求;
  • 有自動化發布,自動化運維需求;
  • 有服務治理,服務自動發現需求;
  • 有調用鏈跟蹤需求;
  • 有SQL監控需求;
  • 有系統層面數據收集與可視化展現的需求;

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

  • 開源框架/組件太重了,我們需要的可能只是一個輕量級的框架/組件;
  • 開源框架/組件,只能滿足我們的一部分需求;
  • 不了解開源框架/組件的設計理念,要二次開發成本更高(維護dubboX的同學,維護數據庫中間件Atlas的同學可以出來說兩句);
  • 有些通用的需求是和業務緊密結合的,開源框架/組件可能滿足不了;

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

第三個觀點:適當造一些輪子。

總結

框架組件,是否需要自研?

初期建議:不自研,用熟悉的,業務快速迭代為優先,需要一定技術視野。

長遠建議:

  • 統一技術棧;
  • 淺淺封裝一層;
  • 適當造輪子;
責任編輯:趙寧寧 來源: 架構師之路
相關推薦

2020-11-17 09:17:58

框架組件基礎服務

2018-01-24 07:58:47

框架組件技術棧開源

2015-07-15 10:25:44

SDN物理交換機

2019-10-23 20:19:26

Python 開發編程語言

2021-11-24 22:39:03

手機系統功能

2012-03-16 14:23:00

框架

2012-03-16 14:23:00

框架

2025-03-24 09:20:00

架構分布式ID開發

2013-11-29 14:04:42

2023-10-06 12:04:41

ORM關系型數據庫

2017-11-20 09:00:43

跳槽職場精英年終獎

2021-02-21 09:09:24

GoGOPATH代碼

2014-12-09 09:13:46

BaaS云備份備份即服務

2018-07-12 09:04:15

RAID陣列硬盤

2021-10-21 09:41:43

互聯網數據技術

2018-12-06 14:40:07

蘋果iOS 12.1.1 iOS 12

2018-11-19 09:02:53

垃圾代碼辭職入職

2020-04-20 09:32:31

VIM程序員編程

2015-10-21 16:27:45

公務員國考大數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美视频 | 久久人人网 | 亚洲视频免费播放 | 热久色| 91精品国产91久久久久久最新 | 欧美日韩福利视频 | 欧美日韩精品 | 国产乱人伦精品一区二区 | 国产精品久久久亚洲 | 中文字幕亚洲区 | 啪啪精品 | 五月综合激情婷婷 | 国产精品久久久久久久久久 | 久久综合久久综合久久 | 欧美一区二区三区四区视频 | 99re视频 | 国产精品久久久久久久久动漫 | 欧美激情在线观看一区二区三区 | 欧美一级在线观看 | 日韩影音 | 在线观看国产wwwa级羞羞视频 | 久久精品国产99国产 | 婷婷色国产偷v国产偷v小说 | 亚洲精品久久久久中文字幕欢迎你 | 国产精品免费一区二区三区四区 | 日韩一区二区成人 | 欧美亚州 | 亚洲综合二区 | 91性高湖久久久久久久久_久久99 | 毛片一级电影 | 国产乱码一二三区精品 | 久久久国产一区二区 | 91在线成人 | 黄色成人在线观看 | 久久国产精品免费一区二区三区 | 久久国 | 日本黄色高清视频 | 欧美国产视频一区二区 | 毛片一级片 | 狠狠躁夜夜躁人人爽天天高潮 | 成人精品福利 |