IMO this is the wrong approach :-). I'd prefer to put energy into developing an excellent API to do selective tracing ... and let DAS do its job. Now you need ot run a job to re-distribute the data before you can do anything either.
On Wed, Feb 24, 2016 at 7:35 PM, Supun Sethunga <sup...@wso2.com> wrote: > Hi Sanjiva, > > In the current approach also, we do have mediator level information. > Though ESB publishes aggregated info to DAS, using a relational provider > implemented in DAS, we split the aggregated info in to mediator-level info > while retrieving for analyzes. (basically, when we load the published data > to spark inside DAS, it sees all the data as events published per mediator, > not as aggregated events). So a user can view the overall message tracing > (for a flow), as well as can drill down up to a mediator level, in the UI. > > But yes, the drawback is, one have to turn on tracing for the whole proxy, > rather than the mediator itself, if they want to trace a mediator. > > Regards, > Supun > > On Wed, Feb 24, 2016 at 6:52 PM, Sanjiva Weerawarana <sanj...@wso2.com> > wrote: > >> IMO we're worrying about the wrong thing. >> >> No one will ever WANT to trace 1000 TPS unless its tracing for audit >> purposes. If its for tuning/debugging then what we need is APIs that will >> let people dynamically turn on traciny VERY selectively. >> >> I prefer if we log per mediator because then we can do whatever kinds of >> aggregation / analysis we want. For example, maybe what we have is an issue >> with one mediator- then you need to instruct the ESB to trace all calls >> coming to that one mediator so that we can analyze its aggregate behavior. >> The approach that has been suggested takes a one dimensional view (a >> sequence of mediators) of what one might want to analyze. >> >> Sanjiva. >> >> On Wed, Feb 24, 2016 at 2:48 PM, Supun Sethunga <sup...@wso2.com> wrote: >> >>> Hi Sanjiva, >>> >>> Yes we are indeed using a stream definition and publishing the events >>> using Thrift. >>> >>> But in doing so, there were two approaches we considered: >>> >>> 1. ESB publishing a single event per mediator in a message flow. >>> 2. ESB publishing a single event per message flow (rather than for >>> each mediator in the message flow). >>> >>> With the perf tests we ran, approach #2 proved to be better than #1 in >>> terms of performance. The format we have discussed above in the thread, is >>> the structure of the payload of a wso2event, which contains >>> aggregated information of mediators. (i.e: how to put all >>> the information of all mediators in a message flow, in to a single event). >>> This way we can also get rid of duplicating information as well. (for eg; >>> mediators like 'log' and 'property' does not change the xml payload for a >>> single message flow.) >>> >>> Regards, >>> Supun >>> >>> On Wed, Feb 24, 2016 at 11:25 AM, Sanjiva Weerawarana <sanj...@wso2.com> >>> wrote: >>> >>>> Why are we inventing a new event format for this? Why not use a stream >>>> definition and publish using Thrift? >>>> >>>> Sorry if I'm missing something here. >>>> >>>> On Fri, Feb 19, 2016 at 11:44 AM, Supun Sethunga <sup...@wso2.com> >>>> wrote: >>>> >>>>> HI, >>>>> >>>>> Ran some more performance tests to contrast between publishing >>>>> Aggregated events Vs Multiple single events, and follow are the results: >>>>> >>>>> *Results:* >>>>> >>>>> No of concurrent publishers (to DAS): 10 >>>>> Back-end DB: MySQL >>>>> >>>>> Single Events Aggregated Events* Single Events Aggregated Events* >>>>> No of events: 160,000 10,000 1,600,000 100,000 >>>>> Event payload size: 1.9 KB 21.6 KB 1.9 KB 21.6 KB >>>>> Time Consumed** (mm:ss): 1:55 0:30 19:46 4:31 >>>>> >>>>> *An aggregated event contains payloads of 16 single events. >>>>> **Time consumed = time to complete all DB transactions. >>>>> >>>>> Please note that these times were monitored while DB trace logs were >>>>> on. So that too have some effect on the performance in overall. >>>>> >>>>> Regards, >>>>> Supun >>>>> >>>>> On Wed, Feb 17, 2016 at 5:37 PM, Viraj Senevirathne <vir...@wso2.com> >>>>> wrote: >>>>> >>>>>> Hi All, >>>>>> >>>>>> We got a simple sample payload for a actual message flow (attached). >>>>>> >>>>>> This have about 16 mediators. The payload file size is ~27.4kB. With >>>>>> different payload size and large number of mediators in the flow , single >>>>>> payload size can get even bigger. So if ESB is serving 1000 request per >>>>>> second, ESB will transfer payloads to DAS with data rate ~27Mb/s. With >>>>>> large payload sizes and large number of mediators in the flow this data >>>>>> rate can be go up very high. >>>>>> >>>>>> As strings have high repeatably compression works well wtih them. >>>>>> After compressing above payload its size ~2kB. (93% reduction from >>>>>> original >>>>>> size). >>>>>> >>>>>> Large Json File with 1.3MB was reduced to 14.3kB after compression. >>>>>> >>>>>> Therefore will it be possible to send compressed json string to DAS >>>>>> instead of uncompressed one. Then DAS can decompress the file and use the >>>>>> actual json payload. >>>>>> >>>>>> I think this will reduce the data rate drastically and ease data >>>>>> communication. >>>>>> >>>>>> Will it be possible to define new type like "commpressedJSON" to >>>>>> achive this? WDYT about this idea? >>>>>> >>>>>> Thank You, >>>>>> >>>>>> On Wed, Feb 17, 2016 at 9:38 AM, Supun Sethunga <sup...@wso2.com> >>>>>> wrote: >>>>>> >>>>>>> Hi Dushan, >>>>>>> >>>>>>> Supun, according to the stream definition ""children": 1," what it >>>>>>>> represents ? >>>>>>> >>>>>>> >>>>>>> Here, each event basically represent a mediator/proxy. So "children" >>>>>>> represents the child mediator(s) in the message flow. This info is used >>>>>>> to >>>>>>> draw the message flow diagram. >>>>>>> >>>>>>> For eg, if we consider the first event in the array, "children":1 >>>>>>> means event at index 1 is the first mediator after Test Proxy. and >>>>>>> so on. >>>>>>> Sorry, the values I have put for the "children" in second and third >>>>>>> events are misleading. They should be "children":2 and "children":null, >>>>>>> respectively. So, null means its the end of the message flow. >>>>>>> >>>>>>> Regards, >>>>>>> Supun >>>>>>> >>>>>>> On Wed, Feb 17, 2016 at 2:34 AM, Dushan Abeyruwan <dus...@wso2.com> >>>>>>> wrote: >>>>>>> >>>>>>>> Hi >>>>>>>> >>>>>>>> - If we publish events from each mediator then, we can >>>>>>>> certainly group each event from unique parentID can't we? (I mean >>>>>>>> this >>>>>>>> would allow us to prepare a aggregated view per incoming message >>>>>>>> and >>>>>>>> visualize different stages of each message representation and other >>>>>>>> meta >>>>>>>> information, think of complex mediation) >>>>>>>> - Can't we record payload as according to Content-Type, >>>>>>>> therefore, shall we get rid of SOAP way of representing? >>>>>>>> - If we have non-content aware mediation flow with >>>>>>>> "application/json", can we find the way to get json string rather >>>>>>>> rather >>>>>>>> explicitly build i.e "org.apache.synapse.commons.json.Constants. >>>>>>>> JSON_STRING" >>>>>>>> - Supun, according to the stream definition ""children": 1," >>>>>>>> what it represents ? >>>>>>>> >>>>>>>> >>>>>>>> On Mon, Feb 15, 2016 at 9:15 PM, Supun Sethunga <sup...@wso2.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Hi Dunith, Gihan, >>>>>>>>> >>>>>>>>> As per the offline chat had with Buddhima and Viraj, follow is a >>>>>>>>> sample payload to be published from ESB to DAS. Do we need any other >>>>>>>>> information for the plots/tables in dashboard? >>>>>>>>> >>>>>>>>> Here we added a new field "entryPoint" to indicate inside which >>>>>>>>> Proxy/API did the mediator get executed. So that it would be easy to >>>>>>>>> drill >>>>>>>>> down from proxy view to mediator view. Please add if there is any >>>>>>>>> other >>>>>>>>> similar field that would be needed for drill-downs, if we have missed >>>>>>>>> any. >>>>>>>>> >>>>>>>>> { >>>>>>>>> "events": [{ >>>>>>>>> "compotentType": "ProxyService", >>>>>>>>> "compotentId": "Test Proxy", >>>>>>>>> "startTime": 1455531027, >>>>>>>>> "endTime": 1455531041, >>>>>>>>> "duration": 3.321, >>>>>>>>> "beforePayload": null, >>>>>>>>> "afterPayload": null, >>>>>>>>> "contextPropertyMap": >>>>>>>>> "{\"MESSAGE_FLOW_ID\":\"urn_uuid_e4251abb-8ff5-433b-8dcb-24f251c3e30d\"}", >>>>>>>>> "transportPropertyMap": >>>>>>>>> "{\"Content-Type\":\"application\/soap+xml; charset=UTF-8; >>>>>>>>> action=\"urn:renewLicense\"\",\"Host\":\"localhost\"}", >>>>>>>>> "children": 1, >>>>>>>>> "entryPoint": "Test Proxy" >>>>>>>>> }, { >>>>>>>>> "compotentType": "Mediator", >>>>>>>>> "compotentId": "mediator_1", >>>>>>>>> "startTime": 1455531041, >>>>>>>>> "endTime": 1455531052, >>>>>>>>> "duration": 3.321, >>>>>>>>> "beforePayload": null, >>>>>>>>> "afterPayload": null, >>>>>>>>> "contextPropertyMap": >>>>>>>>> "{\"MESSAGE_FLOW_ID\":\"urn_uuid_e4251abb-8ff5-433b-8dcb-24f251c3e30d\"}", >>>>>>>>> "transportPropertyMap": >>>>>>>>> "{\"Content-Type\":\"application\/soap+xml; charset=UTF-8; >>>>>>>>> action=\"urn:renewLicense\"\",\"Host\":\"localhost\"}", >>>>>>>>> "children": 0, >>>>>>>>> "entryPoint": "Test Proxy" >>>>>>>>> }, { >>>>>>>>> "compotentType": "Mediator", >>>>>>>>> "compotentId": "mediator_2", >>>>>>>>> "startTime": 1455531052, >>>>>>>>> "endTime": 1455531074, >>>>>>>>> "duration": 3.321, >>>>>>>>> "beforePayload": null, >>>>>>>>> "afterPayload": null, >>>>>>>>> "contextPropertyMap": null, >>>>>>>>> "transportPropertyMap": null, >>>>>>>>> "children": 0, >>>>>>>>> "entryPoint": "Test Proxy" >>>>>>>>> }], >>>>>>>>> >>>>>>>>> "payloads": [{ >>>>>>>>> "payload": "<?xml version=\"1.0\" >>>>>>>>> encoding=\"utf-8\"?><soapenv:Envelope xmlns:soapenv=\" >>>>>>>>> http://www.w3.org/2003/05/soap-envelope\"><soapenv:Body><sam:getCertificateID >>>>>>>>> xmlns:sam=\"http://sample.esb.org >>>>>>>>> \"><sam:vehicleNumber>123456</sam:vehicleNumber></sam:getCertificateID></soapenv:Body></soapenv:Envelope>", >>>>>>>>> "events": [{ >>>>>>>>> "eventIndex": 0, >>>>>>>>> "attributes": "beforePayload" >>>>>>>>> }, { >>>>>>>>> "eventIndex": 0, >>>>>>>>> "attributes": "afterPayload" >>>>>>>>> }, { >>>>>>>>> "eventIndex": 1, >>>>>>>>> "attributes": "beforePayload" >>>>>>>>> }] >>>>>>>>> }, { >>>>>>>>> "payload": "<?xml version=\"1.0\" >>>>>>>>> encoding=\"utf-8\"?><soapenv:Envelope xmlns:soapenv=\" >>>>>>>>> http://www.w3.org/2003/05/soap-envelope\"><soapenv:Body><sam:getCertificateID >>>>>>>>> xmlns:sam=\"http://sample.esb.org >>>>>>>>> \"><sam:vehicleNumber>123123</sam:vehicleNumber><sam:vehicleType>car</sam:vehicleType></sam:getCertificateID></soapenv:Body></soapenv:Envelope>", >>>>>>>>> "events": [{ >>>>>>>>> "eventIndex": 1, >>>>>>>>> "attributes": "afterPayload" >>>>>>>>> }, { >>>>>>>>> "eventIndex": 2, >>>>>>>>> "attributes": "beforePayload" >>>>>>>>> }, { >>>>>>>>> "eventIndex": 2, >>>>>>>>> "attributes": "afterPayload" >>>>>>>>> }] >>>>>>>>> }] >>>>>>>>> } >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> Supun >>>>>>>>> >>>>>>>>> On Wed, Feb 10, 2016 at 11:57 AM, Supun Sethunga <sup...@wso2.com> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Hi Sinthuja, >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> IMHO we could solve this issue as having conversions. Basically >>>>>>>>>>> we could use $payloads:payload1 to reference the elements as a >>>>>>>>>>> convention. >>>>>>>>>>> If the element starts with '$' then it's the reference, not the >>>>>>>>>>> actual >>>>>>>>>>> payload. In that case if there is a new element introduced, let's >>>>>>>>>>> say foo >>>>>>>>>>> and you need to access the property property1, then it will have the >>>>>>>>>>> reference as $foo:property1. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Yes, that's possible as well. But again, if the value for the >>>>>>>>>> property, say 'foo', has an actual value starting with some special >>>>>>>>>> character.. (in this case '$'), we may run in to ambiguity. (true, >>>>>>>>>> the >>>>>>>>>> chances are pretty less, but still possible). >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Also this json event format is being sent as event payload in >>>>>>>>>>> wso2 event, and wso2 event is being published by the data publisher >>>>>>>>>>> right? >>>>>>>>>>> Correct me if i'm wrong. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Yes. >>>>>>>>>> >>>>>>>>>> Thanks, >>>>>>>>>> Supun >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Wed, Feb 10, 2016 at 11:35 AM, Sinthuja Ragendran < >>>>>>>>>> sinth...@wso2.com> wrote: >>>>>>>>>> >>>>>>>>>>> Hi Supun, >>>>>>>>>>> >>>>>>>>>>> Also this json event format is being sent as event payload in >>>>>>>>>>> wso2 event, and wso2 event is being published by the data publisher >>>>>>>>>>> right? >>>>>>>>>>> Correct me if i'm wrong. >>>>>>>>>>> >>>>>>>>>>> Thanks, >>>>>>>>>>> Sinthuja. >>>>>>>>>>> >>>>>>>>>>> On Wed, Feb 10, 2016 at 11:26 AM, Sinthuja Ragendran < >>>>>>>>>>> sinth...@wso2.com> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi Supun, >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Wed, Feb 10, 2016 at 11:14 AM, Supun Sethunga < >>>>>>>>>>>> sup...@wso2.com> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Hi Sinthuja, >>>>>>>>>>>>> >>>>>>>>>>>>> Agree on the possibility of simplifying the json. We also >>>>>>>>>>>>> discussed on the same matter yesterday, but the complication came >>>>>>>>>>>>> up was, >>>>>>>>>>>>> by an event in the "events" list, payload could be >>>>>>>>>>>>> either referenced, or defined in-line.(made as it is, so that it >>>>>>>>>>>>> can be >>>>>>>>>>>>> generalized for other fields as well if needed, other than >>>>>>>>>>>>> payloads.). >>>>>>>>>>>>> >>>>>>>>>>>> In such a case, if we had defined as 'payload': '*payload1**', >>>>>>>>>>>>> *we would not know if its the actual payload, or a reference >>>>>>>>>>>>> to the payload in the "payloads" section. >>>>>>>>>>>>> >>>>>>>>>>>>> With the suggested format, DAS will only go and map the >>>>>>>>>>>>> payload if its null. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> IMHO we could solve this issue as having conversions. Basically >>>>>>>>>>>> we could use $payloads:payload1 to reference the elements as a >>>>>>>>>>>> convention. >>>>>>>>>>>> If the element starts with '$' then it's the reference, not the >>>>>>>>>>>> actual >>>>>>>>>>>> payload. In that case if there is a new element introduced, let's >>>>>>>>>>>> say foo >>>>>>>>>>>> and you need to access the property property1, then it will have >>>>>>>>>>>> the >>>>>>>>>>>> reference as $foo:property1. >>>>>>>>>>>> >>>>>>>>>>>> Thanks, >>>>>>>>>>>> Sinthuja. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> Regards, >>>>>>>>>>>>> Supun >>>>>>>>>>>>> >>>>>>>>>>>>> On Wed, Feb 10, 2016 at 10:52 AM, Sinthuja Ragendran < >>>>>>>>>>>>> sinth...@wso2.com> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Hi Supun, >>>>>>>>>>>>>> >>>>>>>>>>>>>> I think we could simplify the json message bit more. Instead >>>>>>>>>>>>>> of 'null' for the payload attributes in the events section, you >>>>>>>>>>>>>> could use >>>>>>>>>>>>>> the actual payload name directly if there is a payload for that >>>>>>>>>>>>>> event. And >>>>>>>>>>>>>> in that case, we could eliminate the 'events' section from the >>>>>>>>>>>>>> 'payloads' >>>>>>>>>>>>>> section. For the given example, it could be altered as below. >>>>>>>>>>>>>> >>>>>>>>>>>>>> { >>>>>>>>>>>>>> 'events': [{ >>>>>>>>>>>>>> 'messageId': 'aaa', >>>>>>>>>>>>>> 'componentId': '111', >>>>>>>>>>>>>> 'payload': '*payload1*', >>>>>>>>>>>>>> 'componentName': 'Proxy:TestProxy', >>>>>>>>>>>>>> 'output-payload':null >>>>>>>>>>>>>> }, { >>>>>>>>>>>>>> 'messageId': 'bbb', >>>>>>>>>>>>>> 'componentId': '222', >>>>>>>>>>>>>> 'componentName': 'Proxy:TestProxy', >>>>>>>>>>>>>> 'payload': '*payload1*', >>>>>>>>>>>>>> 'output-payload':null >>>>>>>>>>>>>> }, { >>>>>>>>>>>>>> 'messageId': 'ccc', >>>>>>>>>>>>>> 'componentId': '789', >>>>>>>>>>>>>> 'payload': '*payload2*', >>>>>>>>>>>>>> 'componentName': 'Proxy:TestProxy', >>>>>>>>>>>>>> 'output-payload':'*payload2*' >>>>>>>>>>>>>> }], >>>>>>>>>>>>>> >>>>>>>>>>>>>> 'payloads': { >>>>>>>>>>>>>> '*payload1*': 'xml-payload-1', >>>>>>>>>>>>>> '*payload2*': 'xml-payload-2', >>>>>>>>>>>>>> } >>>>>>>>>>>>>> } >>>>>>>>>>>>>> >>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>> Sinthuja. >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Wed, Feb 10, 2016 at 10:18 AM, Supun Sethunga < >>>>>>>>>>>>>> sup...@wso2.com> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Hi Budhdhima/Viraj, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> As per the discussion we had yesterday, follow is the format >>>>>>>>>>>>>>> of the json contains aggregated event details, to be sent to >>>>>>>>>>>>>>> DAS. (you may >>>>>>>>>>>>>>> change the attribute names of events). >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> To explain it further, "events" contains the details about >>>>>>>>>>>>>>> each event sent by each mediator. Payload may or may not be >>>>>>>>>>>>>>> populated. >>>>>>>>>>>>>>> "Payloads" section contains unique payloads and the mapping to >>>>>>>>>>>>>>> the events >>>>>>>>>>>>>>> their fields. (eg: 'xml-payload-2' maps to the 'payload' and >>>>>>>>>>>>>>> 'output-payload' fields of the 3rd event). >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> { >>>>>>>>>>>>>>> 'events': [{ >>>>>>>>>>>>>>> 'messageId': 'aaa', >>>>>>>>>>>>>>> 'componentId': '111', >>>>>>>>>>>>>>> 'payload': null, >>>>>>>>>>>>>>> >>>>>>>>>>>>>> 'componentName': 'Proxy:TestProxy', >>>>>>>>>>>>>>> 'output-payload':null >>>>>>>>>>>>>>> }, { >>>>>>>>>>>>>>> 'messageId': 'bbb', >>>>>>>>>>>>>>> 'componentId': '222', >>>>>>>>>>>>>>> 'componentName': 'Proxy:TestProxy', >>>>>>>>>>>>>>> 'payload': null, >>>>>>>>>>>>>>> 'output-payload':null >>>>>>>>>>>>>>> }, { >>>>>>>>>>>>>>> 'messageId': 'ccc', >>>>>>>>>>>>>>> 'componentId': '789', >>>>>>>>>>>>>>> 'payload': null, >>>>>>>>>>>>>>> 'componentName': 'Proxy:TestProxy', >>>>>>>>>>>>>>> 'output-payload':null >>>>>>>>>>>>>>> }], >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> 'payloads': [{ >>>>>>>>>>>>>>> 'payload': 'xml-payload-1', >>>>>>>>>>>>>>> 'events': [{ >>>>>>>>>>>>>>> 'eventIndex': 0, >>>>>>>>>>>>>>> 'attributes':['payload'] >>>>>>>>>>>>>>> }, { >>>>>>>>>>>>>>> 'eventIndex': 1, >>>>>>>>>>>>>>> 'attributes':['payload'] >>>>>>>>>>>>>>> }] >>>>>>>>>>>>>>> }, { >>>>>>>>>>>>>>> 'payload': 'xml-payload-2', >>>>>>>>>>>>>>> 'events': [{ >>>>>>>>>>>>>>> 'eventIndex': 2, >>>>>>>>>>>>>>> 'attributes':['payload','output-payload'] >>>>>>>>>>>>>>> }] >>>>>>>>>>>>>>> }] >>>>>>>>>>>>>>> } >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Please let us know any further clarifications is needed, or >>>>>>>>>>>>>>> if there's anything to be modified/improved. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>> Supun >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Tue, Feb 9, 2016 at 11:05 AM, Isuru Udana < >>>>>>>>>>>>>>> isu...@wso2.com> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Hi Kasun, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On Tue, Feb 9, 2016 at 10:10 AM, Kasun Indrasiri < >>>>>>>>>>>>>>>> ka...@wso2.com> wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> I think for trancing use case we need to publish events >>>>>>>>>>>>>>>>> one by one from each mediator (we can't aggregate all such >>>>>>>>>>>>>>>>> events as it >>>>>>>>>>>>>>>>> also contains the message payload) >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> I think we can still do that with some extra effort. >>>>>>>>>>>>>>>> Most of the mediators in a sequence flow does not alter the >>>>>>>>>>>>>>>> message payload. We can store the payload only for the >>>>>>>>>>>>>>>> mediators which >>>>>>>>>>>>>>>> alter the message payload. And for others, we can put a >>>>>>>>>>>>>>>> reference to the >>>>>>>>>>>>>>>> previous entry. By doing that we can save the memory to a >>>>>>>>>>>>>>>> great extent. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Thanks. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> ---------- Forwarded message ---------- >>>>>>>>>>>>>>>>> From: Supun Sethunga <sup...@wso2.com> >>>>>>>>>>>>>>>>> Date: Mon, Feb 8, 2016 at 2:54 PM >>>>>>>>>>>>>>>>> Subject: Re: ESB Analytics Mediation Event Publishing >>>>>>>>>>>>>>>>> Mechanism >>>>>>>>>>>>>>>>> To: Anjana Fernando <anj...@wso2.com> >>>>>>>>>>>>>>>>> Cc: "engineering-gr...@wso2.com" < >>>>>>>>>>>>>>>>> engineering-gr...@wso2.com>, Srinath Perera < >>>>>>>>>>>>>>>>> srin...@wso2.com>, Sanjiva Weerawarana <sanj...@wso2.com>, >>>>>>>>>>>>>>>>> Kasun Indrasiri <ka...@wso2.com>, Isuru Udana < >>>>>>>>>>>>>>>>> isu...@wso2.com> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Hi all, >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Ran some simple performance tests against the new >>>>>>>>>>>>>>>>> relational provider, in comparison with the existing one. >>>>>>>>>>>>>>>>> Follow are the >>>>>>>>>>>>>>>>> results: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> *Records in Backend DB Table*: *1,054,057* >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> *Conversion:* >>>>>>>>>>>>>>>>> Spark Table >>>>>>>>>>>>>>>>> id a b c >>>>>>>>>>>>>>>>> Backend DB Table 1 xxx yyy zzz >>>>>>>>>>>>>>>>> id data 1 ppp qqq rrr >>>>>>>>>>>>>>>>> 1 >>>>>>>>>>>>>>>>> [{'a':'aaa','b':'bbb','c':'ccc'},{'a':'xxx','b':'yyy','c':'zzz'},{'a':'ppp','b':'qqq','c':'rrr'}] >>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>> To --> 1 aaa bbb ccc >>>>>>>>>>>>>>>>> 2 >>>>>>>>>>>>>>>>> [{'a':'aaa','b':'bbb','c':'ccc'},{'a':'xxx','b':'yyy','c':'zzz'},{'a':'ppp','b':'qqq','c':'rrr'}] >>>>>>>>>>>>>>>>> 2 xxx yyy zzz >>>>>>>>>>>>>>>>> 2 aaa bbb ccc >>>>>>>>>>>>>>>>> 2 ppp qqq rrr >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> *Avg Time for Query Execution:* >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Querry >>>>>>>>>>>>>>>>> Execution time (~ sec) >>>>>>>>>>>>>>>>> Existing Analytics Relation Provider New (ESB) Analytics >>>>>>>>>>>>>>>>> Relation Provider* * New relational provider split a >>>>>>>>>>>>>>>>> single row to multiple rows. Hence the number of rows in the >>>>>>>>>>>>>>>>> table >>>>>>>>>>>>>>>>> equivalent to 3 times (as each row is split to 3 rows) as the >>>>>>>>>>>>>>>>> original >>>>>>>>>>>>>>>>> table. >>>>>>>>>>>>>>>>> SELECT COUNT(*) FROM <Table>; 13 16 >>>>>>>>>>>>>>>>> SELECT * FROM <Table> ORDER BY id ASC; 13 16 >>>>>>>>>>>>>>>>> SELECT * FROM <Table> WHERE id=98435; 13 16 >>>>>>>>>>>>>>>>> SELECT id,a,first(b),first(c) FROM <Table> GROUP BY id,a >>>>>>>>>>>>>>>>> ORDER BY id ASC; 18 26 >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Regards, >>>>>>>>>>>>>>>>> Supun >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On Wed, Feb 3, 2016 at 3:36 PM, Supun Sethunga < >>>>>>>>>>>>>>>>> sup...@wso2.com> wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Hi all, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> I have started working on implementing a new "relation" / >>>>>>>>>>>>>>>>>> "relation provider", to serve the above requirement. >>>>>>>>>>>>>>>>>> This basically is a modified version of the existing "Carbon >>>>>>>>>>>>>>>>>> Analytics" >>>>>>>>>>>>>>>>>> relation provider. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Here I have assumed that the encapsulated data for a >>>>>>>>>>>>>>>>>> single execution flow are stored in a single row, and >>>>>>>>>>>>>>>>>> the data about the mediators invoked during the flow are >>>>>>>>>>>>>>>>>> stored in a known >>>>>>>>>>>>>>>>>> column of each row (say "data"), as an array (say a json >>>>>>>>>>>>>>>>>> array). When each >>>>>>>>>>>>>>>>>> row is read in to spark, this relational provider create >>>>>>>>>>>>>>>>>> separate rows for >>>>>>>>>>>>>>>>>> each of the element in the array stored in "data" column. I >>>>>>>>>>>>>>>>>> have tested >>>>>>>>>>>>>>>>>> this with some mocked data, and works as expected. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Need to test with the real data/data-formats, and modify >>>>>>>>>>>>>>>>>> the mapping accordingly. Will update the thread with the >>>>>>>>>>>>>>>>>> details. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Regards, >>>>>>>>>>>>>>>>>> Supun >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> On Tue, Feb 2, 2016 at 2:36 AM, Anjana Fernando < >>>>>>>>>>>>>>>>>> anj...@wso2.com> wrote: >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> In a meeting I'd with Kasun and the ESB team, I got to >>>>>>>>>>>>>>>>>>> know that, for their tracing mechanism, they were >>>>>>>>>>>>>>>>>>> instructed to publish one >>>>>>>>>>>>>>>>>>> event for each of the mediator invocations, where, earlier >>>>>>>>>>>>>>>>>>> they had an >>>>>>>>>>>>>>>>>>> approach, they publish one event, which encapsulated data >>>>>>>>>>>>>>>>>>> of a whole >>>>>>>>>>>>>>>>>>> execution flow. I would actually like to support the latter >>>>>>>>>>>>>>>>>>> approach, >>>>>>>>>>>>>>>>>>> mainly due to performance / resource requirements. And also >>>>>>>>>>>>>>>>>>> considering the >>>>>>>>>>>>>>>>>>> fact, this is a feature that could be enabled in >>>>>>>>>>>>>>>>>>> production. So simply, if >>>>>>>>>>>>>>>>>>> we do one event per mediator, this does not scale that >>>>>>>>>>>>>>>>>>> well. For example, >>>>>>>>>>>>>>>>>>> if the ESB is doing 1k TPS, for a sequence that has 20 >>>>>>>>>>>>>>>>>>> mediators, that is >>>>>>>>>>>>>>>>>>> 20k TPS for analytics traffic. Combine that with a possible >>>>>>>>>>>>>>>>>>> ESB cluster >>>>>>>>>>>>>>>>>>> hitting a DAS cluster with a single backend database, this >>>>>>>>>>>>>>>>>>> maybe too many >>>>>>>>>>>>>>>>>>> rows per second written to the database. Where the main >>>>>>>>>>>>>>>>>>> problem here is, >>>>>>>>>>>>>>>>>>> one event is, a single row/record in the backend database >>>>>>>>>>>>>>>>>>> in DAS, so it may >>>>>>>>>>>>>>>>>>> come to a state, where the frequency of row creations by >>>>>>>>>>>>>>>>>>> events coming from >>>>>>>>>>>>>>>>>>> ESBs cannot be sustained. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> If we create a single event from the 20 mediators, then >>>>>>>>>>>>>>>>>>> it is just 1k TPS for DAS event receivers and the database >>>>>>>>>>>>>>>>>>> too, event >>>>>>>>>>>>>>>>>>> though the message size is bigger. It is not necessarily >>>>>>>>>>>>>>>>>>> same performance, >>>>>>>>>>>>>>>>>>> if you publish lots of small events to publishing bigger >>>>>>>>>>>>>>>>>>> events. Throughput >>>>>>>>>>>>>>>>>>> wise, comparatively bigger events will win (even though if >>>>>>>>>>>>>>>>>>> we consider >>>>>>>>>>>>>>>>>>> that, small operations will be batched in transport level >>>>>>>>>>>>>>>>>>> etc.. still one >>>>>>>>>>>>>>>>>>> event = one database row). So I would suggest, we try out a >>>>>>>>>>>>>>>>>>> single sequence >>>>>>>>>>>>>>>>>>> flow = single event, approach, and from the Spark >>>>>>>>>>>>>>>>>>> processing side, we >>>>>>>>>>>>>>>>>>> consider one of these big rows as multiple rows in Spark. I >>>>>>>>>>>>>>>>>>> was first >>>>>>>>>>>>>>>>>>> thinking, if UDFs can help in splitting a single column to >>>>>>>>>>>>>>>>>>> multiple rows, >>>>>>>>>>>>>>>>>>> and that is not possible, and also, a bit troublesome, >>>>>>>>>>>>>>>>>>> considering we have >>>>>>>>>>>>>>>>>>> to delete the original data table after we concerted it >>>>>>>>>>>>>>>>>>> using a script, and >>>>>>>>>>>>>>>>>>> not forgetting, we actually have to schedule and run a >>>>>>>>>>>>>>>>>>> separate script to >>>>>>>>>>>>>>>>>>> do this post-processing. So a much cleaner way to do this >>>>>>>>>>>>>>>>>>> would be, to >>>>>>>>>>>>>>>>>>> create a new "relation provider" in Spark (which is like a >>>>>>>>>>>>>>>>>>> data adapter for >>>>>>>>>>>>>>>>>>> their DataFrames), and in our relation provider, when we >>>>>>>>>>>>>>>>>>> are reading rows, >>>>>>>>>>>>>>>>>>> we convert a single row's column to multiple rows and >>>>>>>>>>>>>>>>>>> return that for >>>>>>>>>>>>>>>>>>> processing. So Spark will not know, physically it was a >>>>>>>>>>>>>>>>>>> single row from the >>>>>>>>>>>>>>>>>>> data layer, and it can summarize the data and all as usual >>>>>>>>>>>>>>>>>>> and write to the >>>>>>>>>>>>>>>>>>> target summary tables. [1] is our existing implementation >>>>>>>>>>>>>>>>>>> of Spark relation >>>>>>>>>>>>>>>>>>> provider, which directly maps to our DAS analytics tables, >>>>>>>>>>>>>>>>>>> we can create >>>>>>>>>>>>>>>>>>> the new one extending / based on it. So I suggest we try >>>>>>>>>>>>>>>>>>> out this approach >>>>>>>>>>>>>>>>>>> and see, if everyone is okay with it. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> [1] >>>>>>>>>>>>>>>>>>> https://github.com/wso2/carbon-analytics/blob/master/components/analytics-processors/org.wso2.carbon.analytics.spark.core/src/main/java/org/wso2/carbon/analytics/spark/core/sources/AnalyticsRelationProvider.java >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Cheers, >>>>>>>>>>>>>>>>>>> Anjana. >>>>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>>>> *Anjana Fernando* >>>>>>>>>>>>>>>>>>> Senior Technical Lead >>>>>>>>>>>>>>>>>>> WSO2 Inc. | http://wso2.com >>>>>>>>>>>>>>>>>>> lean . enterprise . middleware >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>>>> You received this message because you are subscribed to >>>>>>>>>>>>>>>>>>> the Google Groups "WSO2 Engineering Group" group. >>>>>>>>>>>>>>>>>>> To unsubscribe from this group and stop receiving emails >>>>>>>>>>>>>>>>>>> from it, send an email to >>>>>>>>>>>>>>>>>>> engineering-group+unsubscr...@wso2.com. >>>>>>>>>>>>>>>>>>> For more options, visit >>>>>>>>>>>>>>>>>>> https://groups.google.com/a/wso2.com/d/optout. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>>> *Supun Sethunga* >>>>>>>>>>>>>>>>>> Software Engineer >>>>>>>>>>>>>>>>>> WSO2, Inc. >>>>>>>>>>>>>>>>>> http://wso2.com/ >>>>>>>>>>>>>>>>>> lean | enterprise | middleware >>>>>>>>>>>>>>>>>> Mobile : +94 716546324 >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>> *Supun Sethunga* >>>>>>>>>>>>>>>>> Software Engineer >>>>>>>>>>>>>>>>> WSO2, Inc. >>>>>>>>>>>>>>>>> http://wso2.com/ >>>>>>>>>>>>>>>>> lean | enterprise | middleware >>>>>>>>>>>>>>>>> Mobile : +94 716546324 >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>> Kasun Indrasiri >>>>>>>>>>>>>>>>> Software Architect >>>>>>>>>>>>>>>>> WSO2, Inc.; http://wso2.com >>>>>>>>>>>>>>>>> lean.enterprise.middleware >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> cell: +94 77 556 5206 >>>>>>>>>>>>>>>>> Blog : http://kasunpanorama.blogspot.com/ >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>> *Isuru Udana* >>>>>>>>>>>>>>>> Associate Technical Lead >>>>>>>>>>>>>>>> WSO2 Inc.; http://wso2.com >>>>>>>>>>>>>>>> email: isu...@wso2.com cell: +94 77 3791887 >>>>>>>>>>>>>>>> blog: http://mytecheye.blogspot.com/ >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>> *Supun Sethunga* >>>>>>>>>>>>>>> Software Engineer >>>>>>>>>>>>>>> WSO2, Inc. >>>>>>>>>>>>>>> http://wso2.com/ >>>>>>>>>>>>>>> lean | enterprise | middleware >>>>>>>>>>>>>>> Mobile : +94 716546324 >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>>>> Architecture mailing list >>>>>>>>>>>>>>> Architecture@wso2.org >>>>>>>>>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> *Sinthuja Rajendran* >>>>>>>>>>>>>> Associate Technical Lead >>>>>>>>>>>>>> WSO2, Inc.:http://wso2.com >>>>>>>>>>>>>> >>>>>>>>>>>>>> Blog: http://sinthu-rajan.blogspot.com/ >>>>>>>>>>>>>> Mobile: +94774273955 >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>>> Architecture mailing list >>>>>>>>>>>>>> Architecture@wso2.org >>>>>>>>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> *Supun Sethunga* >>>>>>>>>>>>> Software Engineer >>>>>>>>>>>>> WSO2, Inc. >>>>>>>>>>>>> http://wso2.com/ >>>>>>>>>>>>> lean | enterprise | middleware >>>>>>>>>>>>> Mobile : +94 716546324 >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> *Sinthuja Rajendran* >>>>>>>>>>>> Associate Technical Lead >>>>>>>>>>>> WSO2, Inc.:http://wso2.com >>>>>>>>>>>> >>>>>>>>>>>> Blog: http://sinthu-rajan.blogspot.com/ >>>>>>>>>>>> Mobile: +94774273955 >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> *Sinthuja Rajendran* >>>>>>>>>>> Associate Technical Lead >>>>>>>>>>> WSO2, Inc.:http://wso2.com >>>>>>>>>>> >>>>>>>>>>> Blog: http://sinthu-rajan.blogspot.com/ >>>>>>>>>>> Mobile: +94774273955 >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> *Supun Sethunga* >>>>>>>>>> Software Engineer >>>>>>>>>> WSO2, Inc. >>>>>>>>>> http://wso2.com/ >>>>>>>>>> lean | enterprise | middleware >>>>>>>>>> Mobile : +94 716546324 >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> *Supun Sethunga* >>>>>>>>> Software Engineer >>>>>>>>> WSO2, Inc. >>>>>>>>> http://wso2.com/ >>>>>>>>> lean | enterprise | middleware >>>>>>>>> Mobile : +94 716546324 >>>>>>>>> >>>>>>>>> _______________________________________________ >>>>>>>>> Architecture mailing list >>>>>>>>> Architecture@wso2.org >>>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Dushan Abeyruwan | Technical Lead >>>>>>>> >>>>>>>> PMC Member Apache Synpase >>>>>>>> WSO2 Inc. http://wso2.com/ >>>>>>>> Blog:*http://www.dushantech.com/ <http://www.dushantech.com/>* >>>>>>>> Mobile:(001)408-791-9312 >>>>>>>> >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> Architecture mailing list >>>>>>>> Architecture@wso2.org >>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> *Supun Sethunga* >>>>>>> Software Engineer >>>>>>> WSO2, Inc. >>>>>>> http://wso2.com/ >>>>>>> lean | enterprise | middleware >>>>>>> Mobile : +94 716546324 >>>>>>> >>>>>>> _______________________________________________ >>>>>>> Architecture mailing list >>>>>>> Architecture@wso2.org >>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Viraj Senevirathne >>>>>> Software Engineer; WSO2, Inc. >>>>>> >>>>>> Mobile : +94 71 958 0269 >>>>>> Email : vir...@wso2.com >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> *Supun Sethunga* >>>>> Software Engineer >>>>> WSO2, Inc. >>>>> http://wso2.com/ >>>>> lean | enterprise | middleware >>>>> Mobile : +94 716546324 >>>>> >>>>> _______________________________________________ >>>>> Architecture mailing list >>>>> Architecture@wso2.org >>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture >>>>> >>>>> >>>> >>>> >>>> -- >>>> Sanjiva Weerawarana, Ph.D. >>>> Founder, CEO & Chief Architect; WSO2, Inc.; http://wso2.com/ >>>> email: sanj...@wso2.com; office: (+1 650 745 4499 | +94 11 214 5345) >>>> x5700; cell: +94 77 787 6880 | +1 408 466 5099; voip: +1 650 265 8311 >>>> blog: http://sanjiva.weerawarana.org/; twitter: @sanjiva >>>> Lean . Enterprise . Middleware >>>> >>>> _______________________________________________ >>>> Architecture mailing list >>>> Architecture@wso2.org >>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture >>>> >>>> >>> >>> >>> -- >>> *Supun Sethunga* >>> Software Engineer >>> WSO2, Inc. >>> http://wso2.com/ >>> lean | enterprise | middleware >>> Mobile : +94 716546324 >>> >> >> >> >> -- >> Sanjiva Weerawarana, Ph.D. >> Founder, CEO & Chief Architect; WSO2, Inc.; http://wso2.com/ >> email: sanj...@wso2.com; office: (+1 650 745 4499 | +94 11 214 5345) >> x5700; cell: +94 77 787 6880 | +1 408 466 5099; voip: +1 650 265 8311 >> blog: http://sanjiva.weerawarana.org/; twitter: @sanjiva >> Lean . Enterprise . Middleware >> > > > > -- > *Supun Sethunga* > Software Engineer > WSO2, Inc. > http://wso2.com/ > lean | enterprise | middleware > Mobile : +94 716546324 > -- Sanjiva Weerawarana, Ph.D. Founder, CEO & Chief Architect; WSO2, Inc.; http://wso2.com/ email: sanj...@wso2.com; office: (+1 650 745 4499 | +94 11 214 5345) x5700; cell: +94 77 787 6880 | +1 408 466 5099; voip: +1 650 265 8311 blog: http://sanjiva.weerawarana.org/; twitter: @sanjiva Lean . Enterprise . Middleware
_______________________________________________ Architecture mailing list Architecture@wso2.org https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture