Frederik Juchart wrote: > Hi Thomas, > > Thank you very much for your answer and detailed feedback. > I agree that it is a very bad idea to have the client dictate the > routing (as in now obsolete WS-Routing standard) as this introduces > all of the problems and scalability issues described in your submission. > That is why I plan to introduce a new routing header which is inserted > by the client and only says something like "i want this message to be > treated according to routing process A" (actually it only contains the > URI of the process). > Process A must already have been defined in an external BPEL-process - > yes I would like to define routing information as bpel processes. So > each intermediary may inspect the client inserted header which > contains the URI and correlation id of a specific bpel process. That > way each intermediary can query the bpel process on what is next to be > done with the message. The process answers to these questions with the > URI of an intermediary and the namespace of the header to be processed > next. That makes it possible to route a message in a well defined way > without the client knowing the details of the routing. > > As I am complete new to synapse: Is something like that possible? > Could you give me some hints as to where to look further? That is if > you don't think that I am absolutely crazy if I use BPEL as a simple > routing table... ;) hi Fred,
the only problem with it that i can see is that if the mechanism is generic it would be possible to hijack clients and make them into zombie that are controlled by BPEL overlord to direct WS-* (DeathStar?) based DOS attacks ... which would be interesting ;-) > > Of course I am aware that introducing a central bpel process for > routing purposes is critical in itself as there is no guarantee on > this service being reachable from anywhere on the network. it does not have to be central: if client uses WS-Addressing (or just playing with DNS) the actual address of a BPEL router can be determined by an intermediary (for looking on WS-Addressing headers for lower level routing and/or resolving DNS address to multiple IP addresses and trying them in round robin fashion etc ...) > This would be something an administrator would have to assure prior to > installing the extension ;) And that might be a security issue on its > own *sigh* it could be bad especially if the logic for routing is capable of expressing enough for generating more than one message to send (your aggregation service below?) without need to send a message to BPEL controller (one message could trigger an avalanche of messages ...) > It might very well be that defining routing as bpel process is like > using a sledge-hammer to crack a nut - but it makes routing very > flexible and might some day even make simultaneous processing of a > message at multiple intermediaries possible (that is if one can come > up with some sort of aggregation service). But that is still far far > away... > > As to "who controls the decision process": > I agree that these policies should not be controlled by the client but > the service layer. > Yet I think that even if you move the decision making away from the > client it would still be necessary to have the client insert the > required headers. So you can decide within the service layer when to > invoke a specific service but not the parameters of that service. Or > am I completely wrong here? you could also create clients that have "cookies" that capture in an opaque way bpel state (just a long number maybe with crypto and timestamped to make sure client can not manipulate it) and it is passed to routing controller for routing the message in a bigger conversation. still i wonder what is exactly the use case for it? is it compelling enough? how does it compare to other ways of doing the same? best, alek > > [EMAIL PROTECTED] wrote: >> >> Frederick, >> It seems that it is not a matter of whether it can be done, but >> whether it should be done. As far as I can tell from what you have >> submitted, the intermediaries must be able to a) process the headers >> at all, ie we must have some kind of paradigm implemented where the >> headers are recognizable, and b) The intermediaries must contain >> logic necessary to be able to process the multiple headers, in >> varying order, according to a changing set of criteria. This we have >> established. My problem is that you are saying that the criteria is >> being established by a client application who is detailing to the >> service provider how a message is to be processed. This should not >> happen for many reasons. 1) It is a major security breach because you >> expose the entirety of you intermediary services to the outside world >> which is offering a buffet of information to potential intruders. 2) >> The client application thickens considerably in that now dynamic >> changes over time must be accounted for at this remote layer. 3) If >> it comes to pass that we must implement a custom processing scheme at >> the intermediary layer, it is best to isolate this programming and >> make it applicable to other clients, many of which may not yet exist. >> When you couple this client and this intermediary, you essentially >> bar expansion on both sides of the river. >> It comes down to who commands the processing sequence. >> Service providers and supporting intermediaries dictate the >> sequence in which processing should occur and the current aim is to >> move away from any dependence on the client in this decision-making >> process because it defeats the concept of the Enterprise Service Bus >> altogether to house this understanding outside the service provider >> layer and its immediate supporting applications. This actually is a >> throwback to the whole interface concept in C++, CORBA, and later >> java, I want to expose an interface but telling the client the >> details regarding my application causes problems. If I begin telling >> clients how to route mesages, where does it end? How do I add useful >> capabilities to my service provider layer without breaking the >> coupling between client and server. In my humble opinion, I think >> that what you should be focusing on here is declarative coupling >> between service providers and dynamic routing of messages after they >> enter some type of intermediary gateway which is charged with the >> responsibility of message routing based on a policy. So we A) isolate >> the clients according to whatever WSDL has been published, but the >> client is blind to everything but the essential requirements. b) We >> implement a gateway intermediary that accepts the client invocation >> and applies a policy. even if this triggers a header rewrite, which >> is fine as long as it is stripped when going outside of a secure >> paradigm, C) implement supporting intermediaries that route according >> to the policy established. >> Thus, the intermediaries route based on the invocation, and the >> policy applies to the invocation alone. Consider, you said you may >> want to log, verify, and de-encrypt, or perform some other useful >> action, do we do this on the client, or on the invocation itself? If >> a client says do this, how do I implement the policy and be secure, >> and if I implement the policy to ensure verification or de-encryption >> for example, then I don't need the client to specify anything for me. >> All in all, it seems the same steps must be applied in either case so >> eliminating the client dependency is the correct move in terms of >> design. >> The usual response here is what about differentiation of clients, ie- >> one client requires said security while another does not. In this >> case, it makes no sense to deal with the header issue either because >> the coming standards for WSI interoperability and highly detailed >> WSDLs will eventually mandate seperate operation signatures and port >> urls, which will then use URL rewriting to realign on the back end >> when invoking the same service. So, we seem to be agreed here that >> you have to develop custom intermediaries. However, in this revised >> case, you move the responsibility from the client to the first >> intermediary and end up with a much more scaleable application. I >> think if you look at some of the more mainstream ESB based products >> you will see this multi-step protocols trying to establish this >> paradigm. Particular examples are SOA appiances such as datapower and >> reactivity, and the more scaleable ESB products such as BEA and >> websphere. If I am completely wrong here, please forgive me, everyone >> misfires. I just spend some time trying to get a grip on the client >> layer design issues and the scaleability problems of your description >> and have to wonder if perhaps there was a more eloquent way to solve >> this very important issue. >> -Thomas >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > -- The best way to predict the future is to invent it - Alan Kay --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]