作為技術(shù)愛(ài)好者的我,常常從技術(shù)的角度考慮問(wèn)題,也往往陷入技術(shù)的細(xì)節(jié),而忽略了大局觀。
當(dāng)不斷閱讀業(yè)界的文,尤其是soa相關(guān)分析,我日益感覺(jué)如是考慮問(wèn)題的弊端,或許這也是開(kāi)發(fā)者(junior, senior software developer)與系統(tǒng)架構(gòu)師(system designer and architecture)的區(qū)別。前關(guān)心技術(shù)細(xì)節(jié)和技術(shù)的深度;后關(guān)心技術(shù)的解決問(wèn)題面和技術(shù)的寬度。
回頭再思考soa,才發(fā)現(xiàn)通過(guò)技術(shù)角度幾乎無(wú)法理解soa的本質(zhì)和初衷。web service的鐵三角:服務(wù)提供者、服務(wù)消費(fèi)者、服務(wù)注冊(cè)中心。 soa的鐵三角:數(shù)據(jù)、業(yè)務(wù)構(gòu)件、組合。技術(shù)我門關(guān)注了web service,一種很好的分布式系統(tǒng)、異構(gòu)系統(tǒng)間互聯(lián)互通的解決方案,也是一種很好的面向接口的設(shè)計(jì)思想;sca sdo則因?yàn)閣eb service的不能描述服務(wù)間依賴和服務(wù)組合而提出(附注1),也很好的體現(xiàn)了所謂的業(yè)務(wù)數(shù)據(jù)的組織。僅此而已,再多一點(diǎn),esb負(fù)責(zé)消息路由和交互功能也隱含于sca的部署描述符來(lái)完成,esb的事件觸發(fā)機(jī)制.....;或許我們能夠很好的理解技術(shù),正如架構(gòu)師和高級(jí)開(kāi)發(fā)人員區(qū)別所體現(xiàn),我們對(duì)技術(shù)的初衷和目地有清晰的了解么?我們能夠針對(duì)某一個(gè)目標(biāo)選擇出合適的技術(shù)來(lái)么?我慚愧的感覺(jué)自己的力不從心。
依然以soa為例來(lái)說(shuō)這個(gè)問(wèn)題。soa和web servie的初衷并不完全吻合,如果說(shuō)web service是soa實(shí)現(xiàn)手段也有點(diǎn)牽強(qiáng)附會(huì)。web service初衷是什么?web service為解決互聯(lián)互通的分布式應(yīng)用的互操作而生;而soa并不是為互聯(lián)互通的目標(biāo),而是為業(yè)務(wù)敏捷性而生。也道出soa實(shí)際本質(zhì)背后的業(yè)務(wù)模型和業(yè)務(wù)數(shù)據(jù);它要使得業(yè)務(wù)具有敏捷性,必然要求技術(shù)實(shí)現(xiàn)和業(yè)務(wù)脫離;這樣業(yè)務(wù)才能夠快速只管有效的表達(dá)和示意;相應(yīng),輔助手段也就有了要求,就是構(gòu)件,業(yè)務(wù)負(fù)責(zé)人就可以如同堆積木般組織業(yè)務(wù),技術(shù)人員拿到業(yè)務(wù)模型后開(kāi)發(fā)就是,新需求或者業(yè)務(wù)需要就是變更和重組業(yè)務(wù),對(duì)業(yè)務(wù)模型進(jìn)行重組和重構(gòu),就是soa提供的有效手段 。
作為開(kāi)發(fā)者的我,往往會(huì)因?yàn)橐环N技術(shù)的熱門而去跟蹤或者拼命想用于項(xiàng)目,但是它真的被需要么?真的是必要的么?是預(yù)期資源可控的么?沒(méi)有去想,怕的是被潮流或者趨勢(shì)淘汰,哪怕并不合理,也不理會(huì)性能和效率。你是否也具有此問(wèn)題呢?
所以理智的對(duì)待問(wèn)題,在時(shí)間、團(tuán)隊(duì)、資源內(nèi)考慮技術(shù)的選擇,從技術(shù)初衷以及技術(shù)的優(yōu)缺點(diǎn)去選擇技術(shù),從宏觀上理智的把控,而不是人云亦云。譬如大家批判ejb,因?yàn)閑jb的初衷應(yīng)用背景往往被濫用。這也符合spring創(chuàng)始人的“循環(huán)設(shè)計(jì)”理念。
附注1:
組合服務(wù):
1)bpel也是組合服務(wù),但我更覺(jué)得他用于流程控制;
2)web servie的不足:定位于接口的暴露,但是不解決服務(wù)組合問(wèn)題;
或許你可以說(shuō),設(shè)計(jì)一個(gè)類,包含所有需要的業(yè)務(wù),然后把類發(fā)布成服務(wù)。可是需要組合得業(yè)務(wù)往往來(lái)源于不同系統(tǒng),異構(gòu)即不同語(yǔ)言,你如何表達(dá)于一個(gè)類呢?
或許你又可以說(shuō),設(shè)計(jì)一個(gè)類,里面聚合很多服務(wù),然后把類再次發(fā)布為服務(wù),這部也是一個(gè)聚合服務(wù)么?
對(duì),是很好,但是如果業(yè)務(wù)再次變化呢?sca或許好一些,通過(guò)配置描述符。此處留下一點(diǎn)不確定,希望大家討論。