? ? ? ? 前兩天一個(gè)朋友微信給我留言,說讓我?guī)兔o他搭建一個(gè)高可用的Mysql集群,這讓我有點(diǎn)疑惑。因?yàn)樗⒉皇亲黾夹g(shù)的,前一段時(shí)間因?yàn)橄胱约鹤鲆粋€(gè)公眾號,學(xué)了些前端知識,現(xiàn)在又搞起后端來了?還有就可能他的公眾號做得太好,用戶量上來了,需要一個(gè)高并發(fā)高可用的數(shù)據(jù)庫。帶著好奇,我撥通了他的電話......
? ? ? ? 原來是他的公眾號有一個(gè)支付功能,他想知道那些人充了錢,所以想把數(shù)據(jù)存下來。
? ? ? ? 我說:你做好后每天大概多少人充錢?
? ? ? ? 他說:做得好的話可能每天能有十幾二十個(gè),做的不好的話可能沒有。
? ? ? ? 我繼續(xù)問:那流水呢?
? ? ? ? 他說:估計(jì)幾百塊吧。
? ? ? ? 作為一個(gè)負(fù)責(zé)人的開發(fā),抱著充分了解用戶需求的態(tài)度,我繼續(xù)問:那這個(gè)充值記錄除了展示以外,還有其他功能嗎?
? ? ? ? 他想了想,回答說:沒有,我只是想應(yīng)用的數(shù)據(jù)不都要用數(shù)據(jù)庫存起來嗎?我又百度了下,知道為了保證高可用,都要做成集群,但我又不會,所以想讓你幫下忙。他頓了一會,似乎想又到了什么:我可能也不會看,因?yàn)榭戳艘矝]用,我也不知道誰是誰。
? ? ? ? 到這里我算是徹底明白他的需求了。其實(shí)他的想法也不能算是不對,應(yīng)用運(yùn)行的數(shù)據(jù)確實(shí)需要存起來,但是,他似乎鉆到技術(shù)的牛角尖里了。存數(shù)據(jù)不一定都要用關(guān)系型數(shù)據(jù)庫,更不一定上來就搭分布式集群,這是和你的需求密切相關(guān)的。
?技術(shù)是手段,產(chǎn)品需求是目的。
? ? ? ?所有的技術(shù)都是為了滿足需求而設(shè)計(jì)和發(fā)明的,除非是科研性質(zhì)的,一般商業(yè)性的技術(shù)的發(fā)展都是市場需求推動的。我們在設(shè)計(jì)產(chǎn)品時(shí),首先考慮的是產(chǎn)品的需求,再從性能、成本、可操作性、需求的本質(zhì)等決定用什么技術(shù)。而不是因?yàn)槟硞€(gè)技術(shù)比較火,強(qiáng)行用起來,人為的“設(shè)計(jì)”出需求。手段可以選,需求永遠(yuǎn)不能變。
? ? ? ? 技術(shù)很多時(shí)候本身也是一個(gè)產(chǎn)品。
? ? ? ? 所有的中間件他既是一個(gè)技術(shù)的載體,本身也是一個(gè)產(chǎn)品。他有明確的設(shè)計(jì)目標(biāo),有解決問題的范圍,有適用的場景,有自己的產(chǎn)品特性。當(dāng)你想用某項(xiàng)技術(shù)時(shí),首先要清楚該項(xiàng)技術(shù)產(chǎn)品的“說明書”,明白他是干嘛的,什么場景下適合用。
? ? ? ? 針對該童鞋的求助,我最后給出的答案是:你根本不用數(shù)據(jù)庫,你就寫一個(gè)日志文件,把充值記錄記下來,等你產(chǎn)品做大了再說。關(guān)系型數(shù)據(jù)庫,或者是數(shù)據(jù)庫集群是一個(gè)好東西,是一個(gè)好產(chǎn)品,但目前并不適合他。
? ? ? ? 聊到這里,我突然想起來當(dāng)時(shí)自學(xué)java時(shí),看到j(luò)ava分為javaEE,javaSE,javaME三個(gè)體系,我一直不能理解,什么叫“三個(gè)體系”?java不就是java嗎,不就那一套語法嗎?其實(shí)這三套體系就是java這個(gè)“大品牌”下的三個(gè)“產(chǎn)品”,就像豐田旗下的漢蘭達(dá)、凱美瑞、普拉多一樣,他們用的基礎(chǔ)技術(shù)都差不多,但是根據(jù)不同的用戶場景提供不同的特性。他們各自有各自的產(chǎn)品發(fā)展路線,當(dāng)然,也有自己不同的現(xiàn)狀和結(jié)局。再擴(kuò)展一下,java語言本身也是一個(gè)產(chǎn)品,或者說一個(gè)商品,特別是被Oracle收購后,商品屬性越發(fā)明顯。