 |
IBM WebSphere eXtreme Scale weekly podcast now live
Its the second week now of the IBM WebSphere eXtreme Scale weekly video podcast. This podcast is hosted on YouTube and in iTunes (search for extreme scale in podcasts). We do maybe 4 segments a week where the development team discuss customer questions from the previous week. You can subscribe to the podcast in iTunes to watch. The iTunes episodes are one per week with the video indexed by chapter for easy navigation. Each segment is published on youtube on the IBM eXtreme Scale channel. Let us know on the forums or in comments on youtube which topics you'd like to see.
Categories
: [ datagrid | extreme | podcast | scale ]
Mar 14 2009, 09:10:59 AM EDT
Permalink
|
WVE 6.1.0.3 brings vmware integration
A new service stream of WebSphere Virtual Enterprise was recently shipped - 6.1.0.3. In addition to bug fixes, this service stream also has exciting new features:
- Integration support for VMWare ESX Server 3.5. Application Placement Controller can now make placement decisions with knowledge of how servers and nodes are associated with virtual and physical machines.
- The runtime controllers (Application Request Flow Manager, Application Placement Controller, Work Profiler, etc) understand and support vertically stacked WebSphere nodes on a physical machine.
- Application Request Flow Manager (ARFM) now supports memory overload protection.
You can learn more about whats new in 6103 here:
http://www.ibm.com/developerworks/wikis/display/xdoo/What+is+new+in+this+release
You can download the service stream here:
http://www-01.ibm.com/support/docview.wss?rs=0&uid=swg24018893
Ann Black-Ziegelbein
Sep 02 2008, 07:50:52 AM EDT
Permalink
|
Debugging memory leaks in WebSphere
I recently ran across a problem debugging a memory leak that produced a .PHD heapdump file on IBM's Java5 JVM. The verbose gc output clearly indicated the heap was exhausted, but the PHD file that was created when the OutOfMemoryError occured only showed 68Mb of objects in a 256Mb heap. Where were the missing objects and bytes? As it turns out, there is a bug in the current (as of this writing) PHD dump file writer that can incorrectly report the size of some non-primitive arrays. Luckily, you can workaround this problem by enabling the old style .TXT file heap dump file (if your heap analysis tool, like the excellent Heap Analyzer can accept them).
The JVM option for getting the .TXT format heap dumps is: -Xdump:heap:opts=CLASSIC
This problem should be corrected in IBM Java5 SR7.
Brian Martin
Categories
: [ heap | heapdump | java | leak | memory | phd | websphere ]
Jan 07 2008, 05:26:32 PM EST
Permalink
|
Videos showing using ObjectGrid with ND 6.0.2 and RAD
I've made a set of videos showing how to use an EAR file to package an objectgrid and then deploy it within ND 6.0.2.23 with XD DataGrid on top of it.
You can see the videos here
Nov 30 2007, 03:57:51 PM EST
Permalink
|
Migrating from WebSphere ND to XD (Operations Optimizer)
Recently, I have received several questions on migrating from a WebSphere ND environment to WebSphere XD. WebSphere XD is designed to make this process as easy as possible. XD simply installs on top of your existing WebSphere ND installation and your configuration is preserved. Once you have XD installed, then you gradually start making use of the WebSphere XD features. For example, you can start using the On Demand Router to route to your existing applications and clusters, you can create health policies to monitor the health of your applications, and you can proceed to create service policies to provide differentiated quality of service to your applications. If you want to make use of XD's placement controller to dynamic size and place your application clusters in the cell, then you will need to migrate your ND static clusters to XD static clusters --- this can be done by creating a new dynamic cluster in XD and then change the deployment target for your application from the static cluster to the dynamic cluster.
Brian Martin
Categories
: [ deployment | extended | migration | nd | operations | optimizer | websphere | xd ]
Oct 04 2007, 05:06:15 PM EDT
Permalink
|
ObjectGrid brings XTP and CEP together
ObjectGrid provides a solid foundation for XTP (eXtreme Transaction Processing) application. It also includes a stream SQL based event engine based on the IBM SMILE project. SMILE allows you to correlate events together over a sliding time window and potentially produce an output stream that can itself become the input for a new set of streaming queries.
The combination of ObjectGrid providing a virtualized XTP platform along with SMILE running on top of it allows customers to build linearly scalable event processing applications. As partitions primaries are activated in a JVM, applications can subscribe to a set of events for that partition and use a SMILE engine to correlate them together to produce an output stream. Failover, scale out, scale in all work as described before.
You can read more about ObjectGrids CEP engine in our wiki .
Categories
: [ CEP | ObjectGrid | XTP ]
Aug 27 2007, 06:46:52 PM EDT
Permalink
|
XTP: Pat Helland, Square architectures and distributed transactions evolve
It's becoming more and more clear than conventional tiered architectures have a lot of trouble scaling. Conventional tiering uses a triangular shape. If requests come in from the left then you tend to see multiple tiers moving right until you hit the data source on the right. The tiers are widest in terms of number of processors on the left where the web servers are and then the number drops steadily as we move right closer to the data source. This is why these architectures won't scale indefinitely. People attempt to help scalability by including data source offloading technologies such as caching on the left hand tiers, off loading the data source and allowing it to support more processors in front of it. These triangular architectures will not support XTP (extreme transaction processing).
XTP needs square architectures. A square architecture is one where the right hand side gets wider as the left hand side gets wider. The whole architecture scales from left to right. This is necessary to maintain growing transaction rates with constant transaction times. All resources needed by the system must have a way to scale out.
Products such as ObjectGrid can provide a framework in which to host XTP applications. The applications run using a partitioned model. There is no two phase commit. Transactions span only a single partition. A partition provides a unit of scalable state management for the application. This state includes both relational data as well as messaging based data. ObjectGrid unifies both types to a single data model and API. Messages are data and vice versa, there is no distinction.
If a transaction needs to change data across partitions then it's done in multiple steps. The first step is a transaction on partition A. Partition A sends a message to partition B. This message is sent from A to B using single phase commit. B may receive the same message multiple times and B must be able to handle this. B processes the message asynchronously.
ObjectGrids job is to provide the infrastructure for hosting and placing the partitions, providing fault tolerance and data integrity and supporting the above architecture. The application developers role is to architecture the system as a set of partitions and write the business logic using a one transaction per partition model with messaging hooking up multiple partitions. The developer doesn't need to worry about the infrastructure needed to host the application; this is ObjectGrids job in this.
Pat Helland from Amazon wrote an excellent paper on this type of architecture. ObjectGrid is designed around and embraces this type of architecture when hosting XTP applications. Pat describes keyed entities. Transactions cannot span entities. Logical transactions spanning entities happen instead with a series of independent entity scoped transactions connected using idempotent messaging. This approach expressed in ObjectGrid terms has an entity equal to a partition. An entity is an object graph with a hashable root object. Applications route messages to the root object using a hashing approach. ObjectGrid provides relational management for the entities and a messaging mechanism for communication between partitions.
As companies move to a real time rather than a batch enterprise architecture then we'll see XTP start to spread from telco and financial companies today to more and more enterprises as they try to make their business models real time. This is necessary for companies to stay competitive. Waiting for batch jobs to complete etc was fine several years ago but won't help them be competitive moving forward. No one wants to wait. Everybody wants everything immediately. Conventional triangular architectures will not cope as companies move to this model. The front end of these applications will use square architectures and XTP patterns and middleware.
There will still be conventional back-ends for reporting hosting on data ware houses, at least until XTP data stores evolve to support distributed reporting etc. These back-ends will basically be asynchronous replicas of a subset of the state in the XTP system.
To summarize, as we move towards real time enterprises, XTP will start to take hold and applications will need to be designed around new architectures as described here in order to scale effectively, middleware will need to evolve to support these new architectures. These types of architecture and exactly why we’re building ObjectGrid.
Categories
: [ ObjectGrid | XTP ]
Aug 25 2007, 09:09:54 AM EDT
Permalink
|
XD 6.1 Narrated Presentation
We have posted a narrated flash presentation that explains the functions and features present in XD 6.1 at a high level. Check it out here: XD Flash Presentation
Jun 07 2007, 09:21:01 AM EDT
Permalink
|
Messaging only APIs need to go, JPA needs to step up
I just did a blog entry on why I think this is so. It's at my personal blog
Categories
: [ JMS | JPA | ObjectGrid ]
Apr 02 2007, 12:12:26 PM EDT
Permalink
|
Compute Grid versus DataGrids
Compute grids are the typical grid computing task most people are familiar with so far. DataGrids are a relatively recent entry. Whats the difference between the two? Well, there are certainly many similarities. Both can use thousands of processors to perform a job but this is where the differences end. This isn't really one versus another, it's about which one is appropriate for the problem to be solved.
Compute grid characteristics
A compute job is typically stateless. The job is split in to many parallel steps which are dispatched to a set of machines for processing. The jobs produce some form out output that may be aggregated. Typically, the time taken to fetch the data needed by a step is a very small relative to how long the data takes to be 'processed'. The various internet grid computing initiatives are excellent examples of this type of job. A step can usually be placed on any server with access to any resources needed by the job, affinity isn't typically needed. The process running the job step may be launched for each step (better isolation) or shared between subsequent steps (limited value unless starting the process is very expensive, i.e. an application server).
DataGrid characteristics
A data grid is similar but here the computation cost relative to data fetch cost is different. Fetching the data takes longer than the time to process the entry. So, a datagrid is fast because it has the data already loaded in the memory of a grid of servers. These servers may use replication to make this data 'persistent'. The data is usually automatically partitioned and placed on the servers comprising the grid. As servers are added and removed, the data may be redistributed to balance the data over the available servers in the grid.
The data is partitioned across the servers. Each piece of data/partition is hosted by one or more servers. The job logic is available within the container hosting the data. When a client submits a job for a particular piece of data then the job can be routed to a server/container with the data needed for the job and the result returned. Another model is that the job may require processing data matching a query/filter/predicate. Here, the job is multicast to all partitions. Each partition runs the query, and processes the results and returns them to the client. Either way, the client receives a list of results for the set of keys requested. This job may be run in parallel on all machines hosting relevant partitions.
Another pattern is the aggregation or reduction pattern (popularized by google). Here, the job consists of selecting a subset or all of the data and applying a predicate to it to reduce it to a single result. An example might be, calculate the sum of all entries, find the minimum value, find the best matching hotel property or the best matching web page. Each partition can run the predicate, and apply the predicate to all matching data. The reduced results from each partition and then aggregated again to provide to grid-wide result and this is returned to the client.
Both patterns are useful and both can utilize the power of the grid to process the data at extremely high speeds.
Compute grid or data grid, it depends..
So which one do you use. Clearly it depends on the cost of accessing the data versus processing the data. Longer processing times relative to data fetch costs mean a compute grid is more appropriate and vice versa. While not first in these spaces, WebSphere XD is clearly aiming at supporting both types of grids in farms of thousands of servers. ObjectGrid supports and will support DataGrids and Business grid supports compute grid type work loads. XD will be able to manage both types of job along with OLTP workloads and balance assigning resources to the tasks based on business priorities.
Categories
: [ business | compute | grid | objectgrid | xd ]
Dec 14 2006, 03:47:34 PM EST
Permalink
|
Leveled provisioning architectures, keys to success
WebSphere XD is an example of a provisioner. It takes a set of machines, a set of applications, performance service level agreements for those applications and it then tries to meet those rules by provisioning the applications on the fixed set of resources, the boxes, assigned to the application. Whats interesting here is the pattern that it uses and which all products like it also use. The basic pattern is to measure the current performance and then make a change if the current performance isn't meeting the SLAs. The levels at which this is done however are ways to characterize products.
Level 1, thread/request provisioning
Here, a router or proxy or even a thread pool within an application server can make changes. This is the least costly way to meet goals and it has the fastest reaction time. The proxy will have a queue of outstanding requests and a set of targets that can accept those requests. It will first classify the requests in to something like high, medium and low priority. It will do something like a weighted round robin over the requests to ensure that the response times are met for the high priority requests. This could possibly starve out lower priority requests if need be. But, if a class of requests is not meeting the goal then improving its response time by starving the lesser goals is a really cheap way to meet the goal. The cost is simple adjusting weights on the dispatcher which is a very cheap action to take. What happens when you still can't meet the SLA and you have completely starved the lesser classes? Time to move up the provisioning tiers.
Level 2, application placement
Here, we know that an application (AppA) which services a particular request class cannot meet its goals. The placement controller looks at the set of nodes currently available and will change the mix of applications to have more of the AppA application running in the node group. This provides more CPUs for the application which should allow it to better meet its SLA. If this isn't enough then we may add more than one extra CPU to the mix. Obviously, this is more expensive than Level 1. We're stopping and starting JVMs here and this can take between one to two minutes before the JVM starts and then the JIT starts running and maybe after a few thousand requests can been processed by the new JVMs then it'll be up to speed. The reaction time of level 2 compared to level 1 is pretty significant. Changing weights in memory is millions of times cheaper than starting a JVM.
But, again, what happens when we have used all the machines to run AppA and we still can't meet the SLAs. Time to kick up to the next provisioning tier.
Level 3. Machine provisioning
We get here when the set of machines given to XD cannot meet the goals. We now need to integrate XD with products such as Tivilo Intelligent orchestrator(TIO) or Tivoli Provisioning Manager (TPM). These products can manage multiple farms of machines. Lets say farm A runs a Data Synapse compute farm. Farm B runs XD. Suppose TIO was told that farm B is more important than A. So, when XD says it cannot meet the goals then it tells TIO of this problem. TIO then makes it's decision to pull a machine from Farm A and give it to Farm B. This can be quite complicated. The Farm A intel box might be running Solaris and XD may be required to run on SUSE 10. TIO has to tear down the box and install SUSE and XD and then add the box to the XD node group. Obviously, this can take a while, maybe 30-45 minutes before the action has any impact on the performance of farm B. Virtualized hardware can help here significantly with the latency. If the box was running VMWare or XEN then we could tell XEN/VMWare to simply stop running the Solaris Data Synapse virtual machine and then start a pre build XD virtual machine. The operating system would take maybe five minutes to boot and then maybe another 5 minutes of XD to start running so ten minutes. The virtual machines would also significantly simplify configuring the TIO/TPM simply because the number of configurations is greatly reduced, i.e. we're running virtual hardware now so we only need one operating system image.
Summary
Obviously, provisioning is a fractal type architecture. It's the same sort of thing from a high level going on at each level but the details are different. What should be clear is that as we move up the levels, the ability of the system to react slows down. Level 1, we can handle pretty quickly, update a weight in memory and increase response. Level 2, we move out to two or more minute times before the change starts to help out. Level 3, we could be at as much as 45 minutes.
WebSphere XD is an example of a level 1 and 2 provisioner. TIO and TPM are level 3 provisioners.
Customer success with this technology depends on realizing these kinds of scenarios and understanding the chain of events. If you have applications that need to respond to 10x load increases within a second then you better stick with level 1. Level 2 and 3 will not be able to respond fast enough for that kind of goal. Conversely, if you have applications where load slowly ramps up over 15 minutes then a level 2 system will probably work well for you. Next, if you know on a certain day that your load doubles then a level 3 system can help automate that nicely by automatically changing the farm machine ratios using a simple calendar.
Categories
: [ provisioning | virtualization | websphere | xd ]
Oct 23 2006, 11:00:20 AM EDT
Permalink
|
Virtualization, whats its good for and its limitations
I've written a trio of blog entries lately on the benefits of hardware virtualization, the limitations of hardware virtualization in terms of their application and the last one on the value and benefits of governance in an organization. You can read them at the links below:
Categories
: [ governance | hardware | virtualization ]
Oct 16 2006, 03:50:21 PM EDT
Permalink
|
Scripting ObjectGrid with Jython (and wsadmin)
On Friday, Billy described using the Groovy console as a scripting environment for kicking the tires with ObjectGrid. Perhaps even easier, you can use the wsadmin scripting tool with WebSphere (and the Jython language to do the same thing).
Steps
1) Copy the wsobjectgrid.jar into your WAS_HOME/lib (this is already present if you installed XD)
2) Launch wsadmin
wsadmin.sh -conntype none -lang jython
3) Interact with the objectgrid (perhaps the most important part is the the "from com.ibm.websphere.objectgrid import *" to get the objectgrid classes into the Jython environment). Here is a sample typescript where I followed part of Billy's example in the Jython wsadmin shell:
WASX7031I: For help, enter: "print Help.help()"
wsadmin>from com.ibm.websphere.objectgrid import *
wsadmin>og = ObjectGridManagerFactory.getObjectGridManager().createObjectGrid()
wsadmin>print og.getName()
E60D5B77-010D-4000-E000-D74909433EF9
wsadmin>og.defineMap("map")
com.ibm.ws.objectgrid.map.BaseMap@35c035c
wsadmin>print og.getName()
E60D5B77-010D-4000-E000-D74909433EF9
wsadmin>sess = og.getSession()
wsadmin>map = sess.getMap("map")
wsadmin>map.insert("1","A")
wsadmin>map.insert("2","A")
wsadmin>print map.get("1")
A
-Brian
Categories
: [ jython | objectgrid | wsadmin ]
Sep 25 2006, 01:46:13 PM EDT
Permalink
|
|
 |
| S | M | T | W | T | F | S | | | | | 1 | 2 | 3 | 4 | | 5 | 6 | 7 | 8 | 9 | 10 | 11 | | 12 | 13 | 14 | 15 | 16 | 17 | 18 | | 19 | 20 | 21 | 22 | 23 | 24 | 25 | | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | | | | | Today |
|