An Overview of the Ice Platform
The Ice Approach: Flexible and Simple
Ice provides a communication solution that is simple to understand and easy to program with. Yet, despite its simplicity, Ice is flexible enough to accommodate even the most demanding and mission-critical applications.
Ice was designed and implemented by industry experts with many years of distributed computing experience. ZeroC's class-leading technology is flexible, easy to use, robust, and provides superior performance and scalability.
Ice allows you to write your distributed applications in C++, Java, C# (and other .NET languages, such as Visual Basic), Python, Ruby, PHP, and ActionScript. With Ice Touch, your application can include Objective-C components that run on the iPhone, iPad, and iPod touch, while Ice for Java can also be used to build Ice applications for Android. Ice-E allows you to deploy C++ components on resource-constrained devices running Gumsticks or Windows Mobile Professional. (Ice-E applications must be written in C++.) This makes Ice the platform of choice for heteregeneous distributed systems that span multiple operating systems and programming languages.
Ice provides a set of APIs that emphasize simplicity and ease of use. All APIs are thread-safe and exception-safe, and the C++ APIs make it very difficult to leak or corrupt memory. This shortens development time, decreases testing effort, and reduces time to market.
The APIs for the various programming languages (apart from a very small number of exceptions) are identical: for example, if you know the API for Java, you also know the API for C++ and C# (and any other supported programming language). For systems written in more than one language, this reduces the learning curve and allows reuse of design patterns and implementation techniques.
Ice is much more than just a remote procedure call mechanism. For example, Ice supports synchronous as well as asynchronous calls, co-exists with firewalls due to its support for bidirectional connections, allows messages to be batched for efficiency, and permits sophisticated control of threads and resource allocation. See Ice Features for more detailed information.
Fault Tolerance and Load Balancing
Ice allows you to create systems that are fault tolerant. Multiple instances of a server can be deployed on different machines, with transparent fail-over if a machine crashes or is disconnected from the network. This not only makes applications resilient against failures, but also increases performance because Ice allows you to balance the load of a distributed system over several servers. Once a system takes advantage of load balancing, it is easy to scale it to higher loads simply by adding more servers.
Performance and Scalability
Ice was designed from the ground up for applications that require the utmost in performance and scalability. At the network level, Ice uses an efficient binary protocol that minimizes bandwidth consumption. Ice uses little CPU and memory, and its highly efficient internal data structures do not impose arbitrary size limitations. This allows applications to scale to tens of thousands of clients with ease.
Ice is fast. So fast that, as a rule, it imposes no discernable overhead on a distributed application. Data can be transmitted at whatever speed is supported by the network, so Ice does not create any performance bottleneck. Our Performance and Scalability white paper provides a comparison with other popular distributed computing solutions.
Realistic Feature Set
Ice was developed to meet the demands of real-world distributed systems and it incorporates extensive customer feedback. Ice provides realistic features that are actually useful (as opposed to theorectical features that were considered possibly useful by a committee).
For realistic distributed systems, even the most sophisticated remote procedure call mechanism is useless without additional infrastructure. Ice provides a rich set of services, such as event distribution, firewall traversal with authentication and filtering, automatic persistence, automatic application deployment and monitoring, and automatic software distribution and patching. All services can be replicated for fault tolerance, so they do not introduce a single point of failure. Use of these services greatly reduces development time because they eliminate the need to create distribution infrastructure as part of application development. Our Ice Services page provides an overview of the different services.
Ice is inherently secure and suitable for use over insecure public networks. Traffic can be encrypted with SSL, and a variety of authentication mechanisms ensure that only authorized clients can access a system. Ice can work with existing firewalls: a single port is sufficient to provide secure access for an unlimited number of clients to an unlimited number of servers.
You can use Ice to integrate a distributed system with the web. Ice for Java allows you to run an Ice client as an applet inside a browser, and Ice for PHP makes it easy to populate web content with data collected from back-end servers. In addition, Ice for Silverlight allows you to run Ice clients directly in a browser.
First-Class Documentation and Support
ZeroC prides itself on the industry-leading quality of its documentation and API reference. The documentation is arranged into topics by language mapping and programing task, so you can easily locate a section of interest. The indexed and searchable text is available online and as a download suitable for off-line viewing or printing. The documentation includes many code examples that illustrate how to implement different features, making it easy for programmers to learn implementation techniques and acquire know-how. Beyond tutorial and reference material, the documentation covers many non-trivial topics that are relevant for real-world application development.
ZeroC offers world-class support options with guaranteed response and problem resolution times. Support is provided by the same engineers who develop Ice, in a prompt and unbureaucratic manner, so you get help directly from our experts when you need it. ZeroC also offers professional training and consulting services that help you get a development project up to speed as quickly as possible.
Ice is a solution with an established track record for many mission-critical applications, ranging from battlefield simulations to real-time stock trading systems. Our customer page shows a selection of companies that use Ice.
Ice is also popular with many open source projects, among them Asterisk SCF (a high-performance, scalable, fault-tolerant communications framework), ORCA (a robotics component framework), Mumble (a voice chat system), and OMERO (a biological image management system).
Ice is currently available as the following products:
Our product for mainstream platforms, such as Windows and Linux. Ice supports a wide variety of programming languages and includes all Ice services.
Ice-E is an implementation of Ice for resource-constrained systems, with support for C++ and embedded operating systems (Windows CE, Linux). Ice-E does not include any services. However, Ice-E applications can use most of the services provided by Ice, so mobile devices can be seamlessly integrated into a distributed system.
Our product for the iPhone and iPod touch. Ice Touch includes an Objective-C mapping, supports iPhone OS, and provides full access to the Cocoa framework for developing graphical applications for Mac OS X.