Martin Odersky is Chairman and Chief Architect of Typesafe and creator of the open source Scala programming language. This post was co-authored by Chris Conrad, an engineering manager who is part of the Search, Network and Analytics team at LinkedIn.
While interacting with social media and other consumer websites has become routine for many of us, ensuring a seamless, positive user experience is still the Holy Grail for web developers. The volume of queries and messaging on websites increases every day, as does the challenge of keeping the underlying infrastructure running smoothly for millions of users.
Below, we’ll highlight key challenges facing web developers of high volume sites, provide examples of how to address these hurdles, and discuss the role of emerging open source platforms as a modern approach to overcoming them.
Three Key Challenges
- Performance: While web application developers of high volume sites face many challenges, performance tops the list. With consumers now demanding 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, performance is essential. The application needs to perform flawlessly and logically in order to attract and keep consumers.
- Efficiency: When operating services on a massive scale, it’s essential to make the most efficient use of hardware assets. For example, optimize the use of memory and available processing resources. In practice, this often means using event-driven and distributed architectures like node.js, versus previous generation thread-based models like traditional Java Servlets. Developer productivity programming languages are further facets of efficiency. Fewer lines of code, made possible by concise languages like Scala and Ruby, generally translates to higher productivity for application developers.
- Reliability: Systems need to remain resilient against component failures, including hardware, software and network crashes. 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.
- For applications that benefit from highly interactive user experiences, like LinkedIn Signal, 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 web-scale applications, developers should look to modern frameworks like Akka and Norbert 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 functional programming, which discourages the use of mutable state. This allows applications to more easily scale hundreds of cores on a single server, and thousands of servers on a network.
- Follow Mashable Dev & Design on Twitter
- Become a Fan on Facebook
- Subscribe to the Dev & Design channel
- Download our free apps for Android, Mac, iPhone and iPad
LinkedIn faces these challenges every day and is always looking to incorporate the most advanced technology to keep its services running smoothly, reliably and efficiently. For example, to support the Signal product introduced last year, LinkedIn created a high performance web service written in Scala. This service is accessed through a REST/JSON-RPC model that enables quick ad hoc data manipulation and fast iteration from the web-based user interface.
For its real-time people search service (with a peak demand exceeding the hundreds of queries per second), LinkedIn uses a scatter-gather approach that distributes search queries in parallel across a large server farm. This approach balances quick response time with efficient use of server resources.
To support reliability, LinkedIn created a cluster management and workload distribution library called Norbert, which it implemented in the open source Scala programming language. It then incorporated open source technologies from the Apache ZooKeeper, Netty and Protocol Buffers projects. Norbert is a key component of several mission-critical applications at LinkedIn, most notably its social graph engine, which fields a high volume of requests per day.
Open Source – Solving Today’s Modern Programming Challenges
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 can be especially helpful in keeping today’s most trafficked websites running steadily and smoothly. Below are key considerations to keep in mind when programming for today’s multicore paradigm:
In summary, web applications and their supporting infrastructure need to be robust and efficient as more of society shifts its everyday interactions online. Fundamental advances in technology, many driven by the open source community, are making it possible for today’s web application developers to stay ahead of the scalable computing needs of consumers.
For more Dev & Design coverage: