|
|
Optimize with a SATA RAID Storage Solution
Range of capacities as low as $1250 per TB. Ideal if you currently rely on servers/disks/JBODs
Page 3 of 7
NetKernel solves several of these problems. In many ways, it came to the solutions indirectly. The project, which began at HP Labs in the UK, originally aimed to help solve the impending mismatch between software and hardware. Shared-state object-based systems and other conventional techniques do not scale to take advantage of extra CPUs and cores. The NetKernel work was eventually spun off into a company called 1060 Research, Ltd. NetKernel is available through a dual (open source and commercial) license.
Others have tried to solve the hardware/software mismatch in various ways. Ericsson's Erlang is a language and runtime environment that forces developers to write functional software that scales. The ejabberd XMPP server from ProcessOne is an example of a modern, scalable system built in this manner. Clojure, Haskell, Scala, and F# are other increasingly popular languages that try to solve this (and other) problems with cool, modern features.
Another approach to taking better advantage of spare computational horsepower is to create an infrastructure that virtualizes the request and schedules it elsewhere. This tactic is cutely known as cloud computing these days, but the ideas have been around for decades as old-school time-sharing systems, SETI@Home, the Great Internet Mersenne Prime Search (GIMPS), distributed.net, Parabon Computation, Popular Power, grid computing, and so on.
Although each of these approaches works, and can work well, you often have to commit to the vision prematurely. To embrace Erlang, you must embrace its syntax and idiosyncrasies. There are certainly ways to integrate, say, Erlang and Java, but the bindings are brittle and often point-to-point. The cloud approach is also a useful and usable way of building flexible, scalable systems, but the infrastructure can easily overshadow smaller uses. It is the kind of thing you want to use if it is a good fit, but that may not always be obvious right away. Deciding after the fact could be a costly and expensive change.
Neither the language approach nor the cloud approach solves the caching issues, because they don't let you to identify uniquely both behavior and the result of calling that behavior. Some modern languages support a technique called memoization, but it is usually specific to a particular calculation, not a general strategy.
NetKernel combines many of these ideas by supporting a URI-based, functional model that might resolve locally or might involve distributed requests across multiple servers completely transparently to the client. Internally it uses a microkernel and runs on the JVM so it is easy to build solutions using languages that are already comfortable to you. You can adopt new languages as needed (as long as they run on the JVM) and take full advantage of any extra cores or CPUs your hardware has available. This all sounds too good to be true, but it really isn't.
Modern object-oriented-based systems might abstract over a persistence layer by using an interface like this one: