My business processes need to tap into resources, and each activity requires the invocation of IT functionality; I want that functionality to be available in a flexible, replaceable way.
Top-down
Tool-based MDA
I want to define a model (business model) and then let my tools generate the detail for me.
Top-down
Wrap legacy
I have existing systems I have been investing heaviliy on, but they are not resilient. I want new functionality added quickly, but these systems are partitioned. They are silos where functions are locked into them.
Bottom-up
Componentize legacy
Decompose the monolithic legacy systems into modules using compiler-based tools.
Bottom-up
Data-driven
Provide access to information using services without having to expose schemas or implementation decisions on the provider side.
Data-focused
Message-driven
"Just want to have these systems integrate, communicate, over standard, non-proprietary protocols."
Service-Oriented Integration of Applications and Systems
Hard-coded (not a pattern, but a point in time state)
Point in time; low risk; low-changing, high-performance systems
Distributed; multi-point of access
Point-to-point exposure
Expose existing functionality rapidly; unlock value fast; access embedded functionality
Wrap a legacy function and make it callable through Web services
Service adaptor
Consumer needs access to functionality that is not service-enabled ( access to a legacy system through a service invocation, for example -- a Web service)
Access a service using its proxy if you do not have direct access to the service provider?s service description and are unable to directly invoke the service
Service proxy
Provides consumers with an SOA interface
Provide flexibility in the choice of the service provider
Remote service strategy
Provides flexibility in changing service providers based on quality of service or functionality considerations. This opens up possibilities in expediting mergers and acquisitions and flexible alteration of the provider when you consolidate application portfolios.
Eliminate redundant functionality; refactor and consolidate or, in some cases, replace existing systems
Single point of access
Provides one access point to a number of potential variants in functionality. A service strategy often requires a single point of access.
One project or LOB at a time, yet relies on others for some functions not yet exposed as services
Virtual provider
Non-existent providers; ramp up service critical mass
Single point of access
Service integrator
Routing, transformation
General enterprise integration approach
Enterprise service bus
Mediation; routing; transformation, policies, rules, events; inside the organization or between partners in ecosystem/value-net
The Nirvana of SOA; dynamic reconfiguration through context-aware services relying on business domain specific capabilities
Integrated service ecosystem
Provides dynamic configuration capabilities to a set of semantically interrelated industry specific business partners that leverage and recombine the ecosystem capabilities to provide greater value to themselves and the ecosystem as a whole
Often an initial challenge is the concrete determination of the value proposition for using SOA within a project, line of business, or organization. This has to do with flexibility and the ability to alter the actual service provider who implements a service once their quality of service dwindles or they fail to provide the required functionality. This flexibility, which is the primary value of SOA, is overcome by understanding the steps in achieving flexibility through a remote service strategy. There are two more challenges that we describe and overcome with the use of patterns presented here.
SOA is a journey of gradual, small transformations that increasingly decouple service descriptions from service implementations offered by multiple service providers. The solutions below are descriptions of how these issues have been recurrently solved and may serve as a pattern to help you on your next project. Like any other pattern, these must also be adapted to fit the context and the forces that shape your individual problem space: the tradeoffs and considerations of your project, whether organizational or technical, make a difference, and you can determine if you need to skip a step from one pattern to another or to partially implement the pattern
The purely object-oriented strategy pattern primarily relies on inheritance-based polymorphism to create a family of interchangeable algorithms that are swapped out based on context. Rather than have an object hierarchy, in an SOA context, we need to be able to change the service provider with minimal or no impact on the consumer?s perception of the service, thus varying the actual implementer of the service description. The implementer may, in most cases, be a provider of a remote unit of functionality, somewhere in the internal network or Internet. Therefore, for example, a service provider for a VerifyAddress service in an OrderEntry application may need to be changed because our quality of service needs have changed due to higher transaction volumes or security constraints. Or, the provider has decided to charge twice the amount for the same basic service, which we have relied on, in the past. Now, we would like to have the flexibility of changing service providers with IT and Business impunity, which means minimal changes to IT systems and no impact on the business or customer experience in their online shopping experience.
SOA 鐨勪竴涓娊璞¤鐐瑰皢瀹冩弿榪頒負(fù)涓庝笟鍔¤繃紼嬬粨鍚堝湪涓璧風(fēng)殑鍚堟垚鏈嶅姟鐨勯儴鍒嗗垎灞傛灦鏋勩?鍥?3 鍛堢幇浜?jiǎn)杩櫩U嶇被鍨嬬殑鏋舵瀯銆?
鏈嶅姟鍜岀粍寤轟箣闂寸殑鍏崇郴鏄紝浼佷笟綰х殑緇勪歡錛堝ぇ綺掑害鐨勪紒涓氭垨鑰呬笟鍔$嚎緇勪歡錛夊疄鐜拌鏈嶅姟騫朵笖璐熻矗鎻愪緵瀹冧滑鐨勫姛鑳藉拰緇存寔瀹冧滑鐨勬湇鍔¤川閲忋傞氳繃緇勫悎榪欎簺鍏紑鐨勬湇鍔″埌鍚堟垚鐨勫簲鐢ㄧ▼搴忥紝灝卞彲浠ユ敮鎸佷笟鍔¤繃紼嬫祦銆傜患鍚堢殑鏋舵瀯閫氳繃浣跨敤 Enterprise Service Bus錛圗SB錛夋敮鎸佽繖浜涙湇鍔°佺粍浠跺拰嫻佺▼鐨勮礬鐢便佷腑浠嬪拰杞寲銆備負(fù)浜?jiǎn)鏈嶅姟璐ㄩ噺鍜岄潪鍔熻兘鎬х殑闇姹傦紝蹇呴』鐩戣鍜岀鐞嗗凡緇忛儴緗茬殑鏈嶅姟銆?/p>
SOA 鏁村悎涓績(jī)鏄?Web 鏈嶅姟涓庨潪 Web 鏈嶅姟鐨勫悎騫剁殑 SOA 涓庡悗绔紒涓氱郴緇熺殑闆嗘垚銆傚畠浣垮緱 Web 鏈嶅姟鍙?qiáng)闈?Web 鏈嶅姟鑳藉涓庤繍琛屽湪涓嶅悓騫沖彴涓婄殑鏈嶅姟鍣ㄣ佷富鏈哄拰寰満涓婄殑浼佷笟緋葷粺浜や簰銆?/p>
鐒惰岋紝SOA 鏁村悎涓績(jī)涓嶅悓浜庨潰鍚戞湇鍔$殑鏁村悎錛坰ervice-oriented integration錛孲OI錛夈係OI 灝?Web 鏈嶅姟涓庤繍琛屽湪涓嶅悓騫沖彴涓婄殑涓繪満緋葷粺鐩告暣鍚堛傚畠浣垮緱 Web 鏈嶅姟鑳藉閫氳繃緗戝叧涓庝富鏈轟氦浜掋傛?zhèn)ㄩ渶瑕?ASP.Net 鎴栧叾瀹冩妧鏈幏鍙栫綉鍏蟲(chóng)潵鎵ц鏅氱殑 Web 鏈嶅姟銆?/p>
SOA 鏄熀浜庝竴濂椾笟鍔℃祦紼嬬殑 Web 鏈嶅姟鐨勪氦浜掔殑浣撶郴緇撴瀯銆傛?zhèn)ㄥ彲浠ュ湪绗竴涓?SOA 涓幏鍙?Web 鏈嶅姟鏉ュ湪絎簩涓?SOA 涓鐢ㄤ唬琛?Web 鏈嶅姟鐨勬湇鍔°俉eb 鏈嶅姟鍙兘鐢變竴浜涘皬鐨?Web 鏈嶅姟緇勬垚錛屽畠浠皢鏈嶅姟浼犻掔粰瀹㈡埛銆?/p>
絎洓灞傚悜鎮(zhèn)ㄥ睍紺轟簡(jiǎn)閭d簺鏈嶅姟鏄浣曟牴鎹竴濂椾笟鍔℃祦紼嬩粠涓涓祦鍚戝彟涓涓殑銆傛洿楂樹(shù)竴灞傞氳繃榪滅▼闂ㄦ埛緗戠珯 Web 鏈嶅姟錛圵eb Services for Remote Portlet錛學(xué)SRP錛夋爣鍑嗘垨鍏跺畠闈㈠悜浜虹殑琛ㄧず灞傜殑鏂規(guī)硶鏉ュ皢 Web 鏈嶅姟搴旂敤浜庡簲鐢ㄧ▼搴忔帴鍙d腑銆?/p>
浜岀淮闈?rùn)鎬佺殑 SOA 鍙兘鏄湁闂鐨勩傚垢濂斤紝鏁村悎涓績(jī)鐨勫彂灞曟剰鍛崇潃 SOA 灝嗗彉鎴愪笁緇村姩鎬佺殑銆?/p>
鎮(zhèn)ㄥ彲浠ュ紑鍙戞ā鍧楀寲鐨勫拰浼樺寲鐨?SOA 搴擄紝榪欎簺 SOA 琚垎鎴愪簡(jiǎn)涓嶅悓綾誨埆鐨勫眰嬈°傛瘡涓被鍒彲浠ラ氳繃灞傛鏈浣庣駭鍒殑 Web 鏈嶅姟琚繘涓姝ュ垝鍒嗘垚 SOA 鐨勫瓙緇勩?/p>
鎮(zhèn)ㄥ彲浠ュ皢搴撶敤浣滃埌 Web 鏈嶅姟搴旂敤紼嬪簭鐨勫姩鎬侀摼鎺ャ傚綋搴旂敤紼嬪簭闇瑕佽闂ā鍧楀寲鐨?SOA 鏃訛紝瀹冨皢鑷繁閾炬帴鍒板簱涓傚綋瀹冧笉鍐嶉渶瑕佹绱㈠埌鐨?SOA 鏃訛紝灝嗕粠搴撲腑閲婃斁鑷繁錛屽綋鎻愰珮閫熷害鍙?qiáng)鎬ц兘鏃惰妭鐪佺鐩樼┖闂淬?/p>
鍦ㄤ笁緇寸殑涓績(jī)錛屾?zhèn)ㄥ彲浠ュ湪涓嶆敼鍙?SOA 鐨勬儏鍐典笅灝嗙幇鏈夌殑涓繪満鏇挎崲鎴愭柊鏍峰紡鎴栧彟涓渚涘簲鍟嗙殑鏍峰紡銆傚彟澶栵紝鎮(zhèn)ㄥ彲浠ラ噸鏂伴厤緗垨鏇存敼 SOA 鐨勪紭鍏堟潈浠ラ傚悎鏂扮殑鎴栧凡鏇存柊鐨勪富鏈虹郴緇熷浜庢洿鏀圭敤鎴峰強(qiáng)緇勭粐鐨勯渶姹傜殑鍝嶅簲銆?/p>
鍦ㄤ笁緇翠腑蹇?jī)涓?zhèn)ㄥ彲浠ュ叡浜殑 SOA 鐨勬暟鐩緷璧栦簬欏圭洰澶嶆潅鎬с佸悎騫墮棶棰樺強(qiáng)涓氬姟嫻佺▼涓殑鍒╁紛銆傚悜鎮(zhèn)ㄩ伩鍏?SOA 鐨勮繃閲忓紑閿涓鏍鳳紝鎮(zhèn)ㄩ渶瑕佺‘淇濆湪寮鍙戠殑鏁翠釜鐢熷懡鍛ㄦ湡涓笉浼?xì)鍦ㄤ笁缁唇I洪棿涓彂鐢熶腑蹇?jī)瓒呰礋鑽风殑闂銆傛?zhèn)ㄥ簲褰撳湪鍛ㄦ湡鐨勬瘡涓椂鍒婚兘娴嬭瘯瓒呰礋鑽枫?/p>
涓婇潰鍒楀嚭鐨勬墍鏈夐泦鎴愭柟寮忓湪浠諱綍浼佷笟涓兘鏈変竴瀹氱▼搴︾殑浣撶幇錛屽敖綆″湪鏌愪簺鎯呭喌涓嬪畠浠彲鑳芥槸綆鍖栫殑錛屾垨鑰呮病鏈夋槑紜湴榪涜瀹氫箟錛涘洜鑰岋紝鍦ㄧ潃鎵嬭璁℃柊鐨勪綋緋葷粨鏋勬鏋舵椂錛屾?zhèn)ㄥ繀椤诲叏闈㈢殑鑰冭檻瀹冧滑銆傜壒瀹氱殑 IT 鐜鍙兘鍙湁寰堝皯鐨勬暟鎹簮綾誨瀷錛屽洜姝わ紝娑堟伅闆嗘垚鍙兘浼?xì)寰埥巰鍗曘傚悓鏍峰湴錛屽簲鐢ㄧ▼搴忚繛鎺ョ殑浣滅敤鍩熷彲鑳戒篃寰堟湁闄愩傝櫧鐒跺姝わ紝濡傛灉甯屾湜妗嗘灦鑳藉闅忕潃浼佷笟鐨勬垚闀垮拰鍙樺寲鎴愬姛鍦扮戶(hù)緇緱浠ヤ繚鎸侊紝鍒欐鏋朵腑鐨勯泦鎴愬姛鑳戒粛鐒跺繀欏葷敱鏈嶅姟鎻愪緵錛岃屼笉鏄敱鐗瑰畾鐨勫簲鐢ㄧ▼搴忔潵瀹屾垚銆?/p>