CASTrader I was a single program in VB.NET. CASTrader II will be a distributed computing system in VB.NET. It became apparent to me that distributed computing will solve a lot of problems, such as:
- Code complexity - CASTrader I is getting complex and unwieldy.
- Continuous operation - CASTrader II will run 24/7, so some fault tolerance is needed and distributed computing provides a means to do it.
- Modification - CASTrader will receive continuous improvement. It's much easier to modify a piece at a time rather than a whole system for each little change.
- Power - It's pretty clear to me CASTrader will need to run on more than one computer, because it will eventually consume all the processor cycles it can get. (I may borrow spare processor cycles from friends, family, and who knows?)
- Modularity - I can add new features (traders) without stopping the system.
I've never made a big distributed system before, but I think I know the basics. Some challenges will be making the system robust in the event of failure of a program or entire computer. Another related challenge will be figuring out how fine of pieces to slice the program up into. Should I make a run parallel dark markets for purposes of robustness? For CASTrader II, things will likely be simple, because I can add things like that later. The important thing is to get it up and running and optimize/bulletproof it later. That said, I'll write the code with these potential additions in mind.
I don't know if VB.NET is the best choice for developing such a system, but it's what I know. I'm an old FORTRAN programmer who used to program on big iron like the IBM 3090, which was IBM's fastest "super" computer at the time and cost several million dollars. Somehow, I never learned C/C++, but I'm glad at least some people don't think it's all it's cracked up to be. From what I understand, VB is about as fast as C++ on the .NET platform. I'd like to try something off the wall like OCaml, which is supposed to be very fast, but I don't have the time to learn it. With the distributed programming model, there's no reason I can't add components programmed in many languages later. Besides, .NET has two excellent features I'll use extensively:
- .Net Remoting - an easy way to let programs interact, and hopefully it's fast, or my plans are somewhat screwed. It's an excellent concept, though - you can work directly with the object of another program, so there is no need to write a messaging protocol. It's made possible by...
- Object Serialization - Finally, a way to save and restore data easily without writing the I/O code to do it in a language I use. I'd be hard-pressed to ever switch to a language that does not support this feature. Since CASTrader will use many objects that need to have their state saved, I don't have to write the custom state-saving code for every @#$%@#& object I create. It's an ingenious and major time-saving invention.
Since I (finally) learned object oriented programming a few years ago, the only thing that I'm aware of that I'd like to have is multiple inheritance in VB, although there are some workarounds.
It's going to be fun developing CASTrader II, and I'm looking forward to having a distributed computing system working 24/7 to hopefuly extract money from the markets.
Judging from your list of requirements, you might want to consider Erlang instead of VB.Net. Distributed operation, modularity, and 24/7 uptime are Erlang strengths.
Posted by: Kimberley Burchett | April 25, 2007 at 08:11 AM
Thanks for the tip, Kimberley, I'll add Erlang to my list!
Posted by: Alan J | April 29, 2007 at 09:54 PM
Java EE can do everything .NET can, and more... on almost any platform.
Posted by: Bailey | July 21, 2008 at 03:46 PM