自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

框架組件,究竟要不要自研?

開發(fā) 開發(fā)工具
18年規(guī)劃系統(tǒng)介紹58到家的技術(shù)體系,15年加盟58到家后,架構(gòu)部正好也是負(fù)責(zé)范圍的一部分,故談一談自己的想法,個(gè)人觀點(diǎn)。

一、問題的提出

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

18年規(guī)劃系統(tǒng)介紹58到家的技術(shù)體系,15年加盟58到家后,架構(gòu)部正好也是負(fù)責(zé)范圍的一部分,故談一談自己的想法,個(gè)人觀點(diǎn):

  • 如果公司業(yè)務(wù)不復(fù)雜,研發(fā)人數(shù)比較少,技術(shù)實(shí)力相對(duì)有限,一定不要自研框架組件
  • 如果公司業(yè)務(wù)復(fù)雜,研發(fā)人數(shù)比較多,技術(shù)能力能夠勝任,建議自研部分框架組件

[[218106]]

二、為什么早期不建議自研?

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

  • 研發(fā)語言:熟PHP選PHP,熟Java選Java
  • 數(shù)據(jù)庫:熟MySQL選MySQL,熟SQL-server選SQL-server
  • 框架組件:熟Ruby on Rails選ROR,熟ThinkPHP選ThinkPHP,熟SSH選SSH

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

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

58同城早期選型是微軟技術(shù)體系,后來數(shù)據(jù)量增大,并發(fā)量增大,機(jī)器數(shù)據(jù)庫越來越多,性能扛不住,成本也扛不住(你猜一個(gè)SQL-server的licence一年多少錢?),后來老崔帶領(lǐng)大家轉(zhuǎn)型開源陣營(yíng):

  • Windows -> Linux
  • SQL-server -> MySQL
  • C# -> Java

雖然短痛了1-2年,但長(zhǎng)遠(yuǎn)來說,絕對(duì)是正確的決策。

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

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

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

  • 站點(diǎ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

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

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

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

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

  1. String Memcache::get(String key) 
  2. String Memcache::set(String key, Stringvalue) 
  3. String Memcache::del(String key) 

淺淺的封裝一層,會(huì)變成這樣:

  1. String 58DaojiaKV::get(String key) { 
  2.          String result = Memcache::get(key); 
  3.          return result; 
  4. String 58DaojiaKV::set(String key, Stringvalue) { 
  5.          String result = Memcache::set(key, value); 
  6.          return result; 
  7. String 58DaojiaKV::del(String key) { 
  8.          String result = Memcache::del(key); 
  9.          return result; 

這有什么好處呢?

  • 對(duì)上游屏蔽底層實(shí)現(xiàn)的細(xì)節(jié),調(diào)用方不用關(guān)注緩存是memcache還是redis,調(diào)用方只關(guān)注58DaojiaKV
  • 底層變化的時(shí)候,對(duì)上游透明,當(dāng)memcache不能滿足需求,要切換為redis時(shí),所有調(diào)用方不需要大的變化,升級(jí)一個(gè)最新的58DaojiaKV即可,58DaojiaKV的接口不變,實(shí)現(xiàn)變?yōu)椋?/li>
    1. String 58DaojiaKV::get(String key) { 
    2.          String result = Jedis::get(key); 
    3.          return result; 
    4. String 58DaojiaKV::set(String key, Stringvalue) { 
    5.          String result = Jedis::set(key, value); 
    6.          return result; 
    7. String 58DaojiaKV::del(String key) { 
    8.          String result = Jedis::del(key); 
    9.          return result; 
  • 統(tǒng)一實(shí)現(xiàn)一些通用的功能,就不需要每一個(gè)上游升級(jí)了,例如,要實(shí)現(xiàn)一個(gè)緩存訪問時(shí)間統(tǒng)計(jì)的功能,所有調(diào)用方不需要大的變化,升級(jí)一個(gè)最新的58DaojiaKV即可:
    1. String 58DaojiaKV::get(String key) { 
    2.          Long startTime = now(); 
    3.          String result = Jedis::get(key); 
    4.          Long endTime = now(); 
    5.          reportKVTime(startTime- endTime); 
    6.          return result; 
    7. String 58DaojiaKV::set(String key, Stringvalue) { 
    8.          Long startTime = now(); 
    9.          String result = Jedis::set(key, value); 
    10.          Long endTime = now(); 
    11.          reportKVTime(startTime- endTime); 
    12.          return result; 
    13. String 58DaojiaKV::del(String key) { 
    14.          Long startTime = now(); 
    15.          String result = Jedis::del(key); 
    16.          Long endTime = now(); 
    17.          reportKVTime(startTime- endTime); 
    18.          return result; 

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

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

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

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

  • 有站點(diǎn),監(jiān)控服務(wù)的可用性,處理時(shí)間監(jiān)控需求
  • 有告警需求
  • 有自動(dòng)化發(fā)布,自動(dòng)化運(yùn)維需求
  • 有服務(wù)治理,服務(wù)自動(dòng)發(fā)現(xiàn)需求
  • 有調(diào)用鏈跟蹤需求
  • 有SQL監(jiān)控需求
  • 有系統(tǒng)層面數(shù)據(jù)收集與可視化展現(xiàn)的需求

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

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

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

未來介紹監(jiān)控平臺(tái)、服務(wù)治理、調(diào)用鏈跟蹤系統(tǒng)、數(shù)據(jù)收集中心的時(shí)候,大家能夠更深刻的理解到“造一些輪子”的好處。

第三個(gè)觀點(diǎn):適當(dāng)造一些輪子。

六、58到家自研的框架組件有哪些?

通用框架+服務(wù):

  • WEB框架,Daojia-Web-Framework,DWF
  • Service框架,Daojia-Service-Framework,DSF
  • 消息隊(duì)列,Daojia-Msg-Queue,DMQ

基礎(chǔ)組件:

  • 緩存訪問組件DMemcache,DJedis
  • 數(shù)據(jù)庫訪問組件DAO
  • 分庫分表組件DShard

還有一些日志,消息的組件,這些組件的架構(gòu)與細(xì)節(jié),未來再和大家細(xì)聊。

七、總結(jié)

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

初期建議:不自研,用熟悉的,業(yè)務(wù)快速迭代為優(yōu)先,需要一定技術(shù)視野。

長(zhǎng)遠(yuǎn)建議:

  • 統(tǒng)一技術(shù)棧
  • 淺淺封裝一層
  • 適當(dāng)造輪子

【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2020-11-17 09:17:58

框架組件基礎(chǔ)服務(wù)

2024-09-30 05:38:48

2015-07-15 10:25:44

SDN物理交換機(jī)

2019-10-23 20:19:26

Python 開發(fā)編程語言

2021-11-24 22:39:03

手機(jī)系統(tǒng)功能

2012-03-16 14:23:00

框架

2012-03-16 14:23:00

框架

2025-03-24 09:20:00

架構(gòu)分布式ID開發(fā)

2013-11-29 14:04:42

2023-10-06 12:04:41

ORM關(guān)系型數(shù)據(jù)庫

2017-11-20 09:00:43

跳槽職場(chǎng)精英年終獎(jiǎng)

2021-02-21 09:09:24

GoGOPATH代碼

2014-12-09 09:13:46

BaaS云備份備份即服務(wù)

2018-07-12 09:04:15

RAID陣列硬盤

2021-10-21 09:41:43

互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)

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程序員編程

2018-01-29 09:42:27

創(chuàng)業(yè)技術(shù)團(tuán)隊(duì)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)