Enterprise Web Apps: The Next Generation
When the bright folks at Zeebox, a killer social TV site, decided to build their website, they naturally turned to cloud services because they are a startup and had to use their money wisely. They also turned to the Scala language and open source community because they had very specific scalability and performance needs, like processing 60+ TV channels (knowing it will grow to thousands in the future) in real time, and juggling the social streams of users from sites like Facebook, Twitter and YouTube.
Social media and other consumer websites like Zeebox have embraced new technology to ensure a positive experience for millions of online users, handle large volumes of complex, unstructured data, and ensure reliability and security in the public cloud. While visionary IT leaders in some more traditional companies have adopted similar technology, the broad mass of enterprise IT has yet to dive in.
With the new year just underway, companies are reassessing their infrastructure needs to accommodate fast-paced changes driven by cloud computing and big data workloads. Developers will face many challenges maintaining the volume of queries and messaging on their websites while keeping underlying frameworks running smoothly for staff, customers and business prospects.
Web Apps: The New Batch
Programmers, armed with the right tools, will likely become the heroes for the next generation of enterprise Web applications and will be instrumental in helping determine whether a company can make or break it in the new market. Those that can't keep up will be left behind. This sentiment is shared by Aaron Levie of Box.net, Mark Benioff of Salesforce.com, and other entrepreneurs who recognize the value of building lightweight, agile and scalable solutions to trump the antiquated solutions of the past.
Since modernization doesn't come without its own set of challenges, I thought it might be useful to take a look at what the big names in the social world have done to assess issues like performance, scalability and reliability.
Perform Like Foursquare
Web application developers of high volume sites face many challenges, but performance tops the list. Consumers now demand blazing computing speeds and uninterrupted service. A wait time of 250 milliseconds can mean the difference between a successful service and a failed one.
For key user operations, such as interactive, real-time slicing and dicing of large data sets, and servicing API calls from other applications, performance is essential. The application needs to perform flawlessly and correctly in order to attract and keep consumers' attention. Similarly, today's enterprises need fast and robust infrastructure to help them make sense of the terabytes of information streaming in. Making sense of business analytics of all types in a timely fashion is essential for businesses to remain current and engaged with their customers.
Scale Like Twitter
When operating services on a massive scale, it's essential to make the most efficient use of hardware assets -- for example, optimizing the use of memory and available processing resources. In practice, this often means considering event-driven and distributed architectures like node.js or the more powerful Scala-based Akka framework, versus previous generation thread-based models like traditional Java Servlets.
Developer productivity represents a different facet of efficiency. Fewer lines of code, made possible by concise languages like Scala and Ruby, and streamlined frameworks like Rails and Play, generally translates to higher productivity for application developers. In fact, the scalability limits of the Ruby language were one of the leading causes of the "Fail Whale" for Twitter. Since adopting Scala, Twitter has scaled somewhere around 1,000 times.
Run Like LinkedIn
Enterprise developers interested in keeping their systems resilient against component failures, including hardware, software and network crashes, can look at LinkedIn as an example. An ever-expanding ecosystem of applications depends on reliable access to user-generated content like LinkedIn's, for instance. As such, the network needs to target "five nines" availability goals that have previously been benchmarks for the telecommunications and electrical power industries.
In the last few years, many new open source technologies have emerged to help Web application developers. Open source projects such as Norbert, now available under the open source Apache license at sna-projects.com, are readily available to Web developers charged with tackling such challenges.
Open source programming languages and frameworks that enable parallel and distributed computing have proved themselves in today's most trafficked websites. These technologies can also help enterprise infrastructure run steadily and smoothly. Below are key considerations to keep in mind when programming for today's multicore paradigm:
- For applications that benefit from highly interactive user experiences, developers should consider breaking data-intensive functionality into asynchronous Web services that can be integrated into the Web-based user interface using REST-style APIs.
- To encourage "efficiency by default" for today's enterprise applications, developers should look to modern frameworks like Akka that incorporate capabilities like event-driven processing, asynchronous I/O and cluster-aware fault tolerance.
- For applications that can truly scale up and scale out, developers should favor languages like Scala that provide first class-support for a functional style of programming, which discourages the use of mutable state and provides higher-level abstractions for dealing with concurrency and parallelism. This allows developers to more easily build applications that scale to hundreds of cores on a single server, and thousands of servers on a network.
Enterprise applications and their supporting infrastructure need to be robust and efficient as more and more business is dependent on huge flows of data. Fundamental advances in technology, many driven by the open source community, are making it possible for today's developers to stay ahead of the scalable computing needs of consumers and businesses.