5 Common Server Setups For Your Web Application

Introduction

When deciding which server architecture to use for your environment, there are many factors to consider, such as performance, scalability, availability, reliability, cost, and ease of management.

Here is a list of commonly used server setups, with a short description of each, including pros and cons. Keep in mind that all of the concepts covered here can be used in various combinations with one another, and that every environment has different requirements, so there is no single, correct configuration.

 Google larry page sergey brin first server

1. Everything On One Server

The entire environment resides on a single server. For a typical web application, that would include the web server, application server, and database server. A common variation of this setup is a LAMP stack, which stands for Linux, Apache, MySQL, and PHP, on a single server.

Use Case: Good for setting up an application quickly, as it is the simplest setup possible, but it offers little in the way of scalability and component isolation.

Everything On a Single Server

Pros:

  • Simple

Cons:

  • Application and database contend for the same server resources (CPU, Memory, I/O, etc.) which, aside from possible poor performance, can make it difficult to determine the source (application or database) of poor performance
  • Not readily horizontally scalable

2. Separate Database Server

The database management system (DBMS) can be separated from the rest of the environment to eliminate the resource contention between the application and the database, and to increase security by removing the database from the DMZ, or public internet.

Use Case: Good for setting up an application quickly, but keeps application and database from fighting over the same system resources.

Separate Database Server

Pros:

  • Application and database tiers do not contend for the same server resources (CPU, Memory, I/O, etc.)
  • You may vertically scale each tier separately, by adding more resources to whichever server needs increased capacity
  • Depending on your setup, it may increase security by removing your database from the DMZ

Cons:

  • Slightly more complex setup than single server
  • Performance issues can arise if the network connection between the two servers is high-latency (i.e. the servers are geographically distant from each other), or the bandwidth is too low for the amount of data being transferred

 

3. Load Balancer (Reverse Proxy)

Load balancers can be added to a server environment to improve performance and reliability by distributing the workload across multiple servers. If one of the servers that is load balanced fails, the other servers will handle the incoming traffic until the failed server becomes healthy again. It can also be used to serve multiple applications through the same domain and port, by using a layer 7 (application layer) reverse proxy.

Examples of software capable of reverse proxy load balancing: HAProxy, Nginx, and Varnish.

Use Case: Useful in an environment that requires scaling by adding more servers, also known as horizontal scaling.

Load Balancer

Pros:

  • Enables horizontal scaling, i.e. environment capacity can be scaled by adding more servers to it
  • Can protect against DDOS attacks by limiting client connections to a sensible amount and frequency

Cons:

  • The load balancer can become a performance bottleneck if it does not have enough resources, or if it is configured poorly
  • Can introduce complexities that require additional consideration, such as where to perform SSL termination and how to handle applications that require sticky sessions

 

4. HTTP Accelerator (Caching Reverse Proxy)

An HTTP accelerator, or caching HTTP reverse proxy, can be used to reduce the time it takes to serve content to a user through a variety of techniques. The main technique employed with an HTTP accelerator is caching responses from a web or application server in memory, so future requests for the same content can be served quickly, with less unnecessary interaction with the web or application servers.

Examples of software capable of HTTP acceleration: Varnish, Squid, Nginx.

Use Case: Useful in an environment with content-heavy dynamic web applications, or with many commonly accessed files.

HTTP Accelerator

Pros:

  • Increase site performance by reducing CPU load on web server, through caching and compression, thereby increasing user capacity
  • Can be used as a reverse proxy load balancer
  • Some caching software can protect against DDOS attacks

Cons:

  • Requires tuning to get best performance out of it
  • If the cache-hit rate is low, it could reduce performance

 

5. Master-Slave Database Replication

One way to improve performance of a database system that performs many reads compared to writes, such as a CMS, is to use master-slave database replication. Master-slave replication requires a master and one or more slave nodes. In this setup, all updates are sent to the master node and reads can be distributed across all nodes.

Use Case: Good for increasing the read performance for the database tier of an application.

Here is an example of a master-slave replication setup, with a single slave node:

Master-Slave Database Replication

Pros:

  • Improves database read performance by spreading reads across slaves
  • Can improve write performance by using master exclusively for updates (it spends no time serving read requests)

Cons:

  • The application accessing the database must have a mechanism to determine which database nodes it should send update and read requests to
  • Updates to slaves are asynchronous, so there is a chance that their contents could be out of date
  • If the master fails, no updates can be performed on the database until the issue is corrected
  • Does not have built-in failover in case of failure of master node

 

Example: Combining the Concepts

It is possible to load balance the caching servers, in addition to the application servers, and use database replication in a single environment. The purpose of combining these techniques is to reap the benefits of each without introducing too many issues or complexity. Here is an example diagram of what a server environment could look like:

Load Balancer, HTTP Accelerator, and Database Replication Combined

Let’s assume that the load balancer is configured to recognize static requests (like images, css, javascript, etc.) and send those requests directly to the caching servers, and send other requests to the application servers.

Here is a description of what would happen when a user sends a requests dynamic content:

  1. The user requests dynamic content from http://example.com/ (load balancer)
  2. The load balancer sends request to app-backend
  3. app-backend reads from the database and returns requested content to load balancer
  4. The load balancer returns requested data to the user

If the user requests static content:

  1. The load balancer checks cache-backend to see if the requested content is cached (cache-hit) or not (cache-miss)
  2. If cache-hit: return the requested content to the load balancer and jump to Step 7. If cache-miss: the cache server forwards the request to app-backend, through the load balancer
  3. The load balancer forwards the request through to app-backend
  4. app-backend reads from the database then returns requested content to the load balancer
  5. The load balancer forwards the response to cache-backend
  6. cache-backend caches the content then returns it to the load balancer
  7. The load balancer returns requested data to the user

This environment still has two single points of failure (load balancer and master database server), but it provides the all of the other reliability and performance benefits that were described in each section above.

Conclusion

Now that you are familiar with some basic server setups, you should have a good idea of what kind of setup you would use for your own application(s). If you are working on improving your own environment, remember that an iterative process is best to avoid introducing too many complexities too quickly.

Let us know of any setups you recommend or would like to learn more about in the comments below!

Tutorial courtesy: Digital Ocean

Advertisements
How to setup SSH on web server

How To Set Up SSH Keys

About SSH Keys

SSH keys provide a more secure way of logging into a virtual private server with SSH than using a password alone. While a password can eventually be cracked with a brute force attack, SSH keys are nearly impossible to decipher by brute force alone. Generating a key pair provides you with two long string of characters: a public and a private key. You can place the public key on any server, and then unlock it by connecting to it with a client that already has the private key. When the two match up, the system unlocks without the need for a password. You can increase security even more by protecting the private key with a passphrase.

Step One—Create the RSA Key Pair

The first step is to create the key pair on the client machine (there is a good chance that this will just be your computer):

ssh-keygen -t rsa

Step Two—Store the Keys and Passphrase

Once you have entered the Gen Key command, you will get a few more questions:

Enter file in which to save the key (/home/demo/.ssh/id_rsa):

You can press enter here, saving the file to the user home (in this case, my example user is called demo).

Enter passphrase (empty for no passphrase):

It’s up to you whether you want to use a passphrase. Entering a passphrase does have its benefits: the security of a key, no matter how encrypted, still depends on the fact that it is not visible to anyone else. Should a passphrase-protected private key fall into an unauthorized users possession, they will be unable to log in to its associated accounts until they figure out the passphrase, buying the hacked user some extra time. The only downside, of course, to having a passphrase, is then having to type it in each time you use the Key Pair.

The entire key generation process looks like this:

ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/demo/.ssh/id_rsa.
Your public key has been saved in /home/demo/.ssh/id_rsa.pub.
The key fingerprint is:
4a:dd:0a:c6:35:4e:3f:ed:27:38:8c:74:44:4d:93:67 demo@a
The key's randomart image is:
+--[ RSA 2048]----+
|          .oo.   |
|         .  o.E  |
|        + .  o   |
|     . = = .     |
|      = S = .    |
|     o + = +     |
|      . o + o .  |
|           . o   |
|                 |
+-----------------+

The public key is now located in /home/demo/.ssh/id_rsa.pub The private key (identification) is now located in /home/demo/.ssh/id_rsa

Step Three—Copy the Public Key

Once the key pair is generated, it’s time to place the public key on the virtual server that we want to use.

You can copy the public key into the new machine’s authorized_keys file with the ssh-copy-id command. Make sure to replace the example username and IP address below.

ssh-copy-id user@123.45.56.78

Alternatively, you can paste in the keys using SSH:

cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

No matter which command you chose, you should see something like:

The authenticity of host '12.34.56.78 (12.34.56.78)' can't be established.
RSA key fingerprint is b1:2d:33:67:ce:35:4d:5f:f3:a8:cd:c0:c4:48:86:12.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '12.34.56.78' (RSA) to the list of known hosts.
user@12.34.56.78's password: 
Now try logging into the machine, with "ssh 'user@12.34.56.78'", and check in:

  ~/.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Now you can go ahead and log into user@12.34.56.78 and you will not be prompted for a password. However, if you set a passphrase, you will be asked to enter the passphrase at that time (and whenever else you log in in the future).

Optional Step Four—Disable the Password for Root Login

Once you have copied your SSH keys unto your server and ensured that you can log in with the SSH keys alone, you can go ahead and restrict the root login to only be permitted via SSH keys.

In order to do this, open up the SSH config file:

sudo nano /etc/ssh/sshd_config

Within that file, find the line that includes PermitRootLogin and modify it to ensure that users can only connect with their SSH key:

PermitRootLogin without-password

Put the changes into effect:

reload ssh

Tutorial courtesy: Digital Ocean

Canvas animation timeframe keyframe

9 Mind-Blowing Canvas Demos

The <canvas> element has been a revelation for the visual experts among our ranks.  Canvas provides the means for incredible and efficient animations with the added bonus of no Flash; these developers can flash their awesome JavaScript skills instead.  Here are nine unbelievable canvas demos that will make your jaw drop!

Hospy.co

1.  Zen Photon Garden

The Zen Photon Garden demo is the epitome of mind-blowing.  This epic canvas demo allows for drawing on the canvas with reactive light streams, allowing the user to see the end product of their new line will be.  Even better, this demo allows you to save and load output.

Canvas Demo

2.  Tear-able Cloth

The Tear-able Cloth demo has set the web alight over the past few months and for good reason.  This demo is the smoothest you’ll see and considering the task it accomplishes and the how little code is involved, it will take your breath away.  There’s more to it than simple pulling and physics — the animation and needing to account for pulling hard enough to elegantly animate a tear makes this demo even more amazing.  A perfect illustration of canvas’ capabilities.

2014-10-10 12_54_43-9 Mind-Blowing Canvas Demos

3.  Particles

It’s hard describe this demo outside of “ftw”.  This demo animates color, position, connection lines, and opacity, all the while animating smooth as a baby’s….it’s really smooth.  Marvel at this beast.

2014-10-10 12_55_45-9 Mind-Blowing Canvas Demos

4.  Motion Graphic Typeface

I wish I could describe how this effect is done but I can’t.  I see that each letter is comprised of different image data, but that’s about it.  What I can say is this animation is absolutely mind-blowing, as letters animate into place and the aspect at which you see the text depends on your mouse position.  Shocking.

2014-10-10 12_56_37-9 Mind-Blowing Canvas Demosasd

5.  Motion Graphic Typeface II

As if the first wasn’t impressive enough, the second MGT demo is one worthy of a Pulitzer Prize. I’d give up my second, third, and eighth-born to be this clever.  Not only does the text animate but there’s an incredible colored blur that’s part of the animation.  This demo is truly a sight to behold.

2014-10-10 12_54_43-9 Mind-Blowing Canvas Demos

6.  Gestures + Reveal.JS

Now only did this demo blow my mind, but it also blew my CPU.  This exercise uses your device’s camera and microphone to move a cube of data based on gestures.  If you have a MacBook Pro, you shouldn’t die before trying this out.  Start the demo and flail your arms about — you’ll se the demo content move about and then start believing in spirits.

7.  Free Rider 2

You can’t cover the awesomeness of canvas without including at least one game.  Canvas is arguably the future of HTML5 gaming, as Firefox OS will soon demonstrate.  This brilliant but simple bike game shows that canvas is ready for prime time!

Canvas Demo

8.  30,000 Particles

The 30k Particles demo incorporates some really awesome stuff:  circular shapes (radius), animated exploding and returning particles, and mouse listeners to allow the user to control the explosions.  An excellent example of interactivity and logic.

9.  HTML5 Video Destruction

I must pay homage to one of the first truly eye-catching canvas demos I saw — an explodable canvas video.  You click the video and pieces explode, yet the video keeps playing its segment/position during the explosion while it returns to its original position.  An inspiring demo to to all of us.

Canvas Demo

PHP Twitter Application tutorial

Creating Twitter Apps in PHP

In this post we will look into accessing Twitter REST API in PHP. This can be useful if you need to post Tweets from your PHP application or anaylze, search Tweets. In the following examples we will use the twitter-api-php PHP wrapper for Twitter v1.1 API. Although there are a few wrappers around, this one I like for its simplicity.

Installation

If you use composer, here’s what you need to add to your composer.json file to have TwitterAPIExchange.php (Twitter PHP wrapper) automatically imported into your vendor’s folder:

{
    "require": {
        "j7mbo/twitter-api-php": "dev-master"
    }
}

You’ll then need to run ‘composer install’.

If you don’t use composer, just download the zip from git and include TwitterAPIExchange.php in your application path.

Registering your Twitter app

Before writing any code, you will first need to create a Twitter app and register it onhttps://apps.twitter.com/. You will be greeted with the following screen. (The following screenshot shows you an existing app. If this is your first app than the page will be blank).

twitter-app-1

Click on the ‘Create New App’ button and enter the required details in the fields provided. Leave the ‘Callback URL’ field blank for now. Once the app is created, click on the app name and note down the various access and security tokens, we will be needing these later. Change your Access Level to ‘Read and Write’. ‘Read Only’ access does not allow you to update, add or delete Tweets. If your purpose is to only read tweet data, it is safer to set the Access Level to ‘Read Only’.

Note that you will need to regenerate the access tokens if you change the Access Levels anytime and modify the same in your PHP code.

twitter-app-2

Accessing the Twitter API from PHP

Now that you have created and registered a Twitter app, we can now use PHP to acccess the API. First include the ‘TwitterAPIExchange.php’ class and set various security tokens collected earlier.

require_once('TwitterAPIExchange.php');
 
$settings = array(
    'oauth_access_token' => "YOUR_ACCESS_TOKEN",
    'oauth_access_token_secret' => "YOUR_ACCESS_TOKEN_SECRET",
    'consumer_key' => "YOUR_CONSUMER_KEY",
    'consumer_secret' => "YOUR_CONSUMER_SECRET"
);

For this example we will be using the ‘https://api.twitter.com/1.1/statuses/user_timeline.json‘ resource url. This returns a collection of the most recent Tweets posted by the user indicated by the screen_name or user_id parameters. This particular method is one of the dozens of various methods available to access and modify Twitter data; others can be found here.

A complete GET request method is shown below. Here we are requesting the recent 3 tweets for the user ‘johndoe123’.

$url = "https://api.twitter.com/1.1/statuses/user_timeline.json";
$requestMethod = "GET";
$getfield = '?screen_name=johndoe123&count=3';

Once we specify the request methods and fields, we can call Twitter.

$twitter = new TwitterAPIExchange($settings);
 
$response = $twitter->setGetfield($getfield)
                    ->buildOauth($url, $requestMethod)
                    ->performRequest();

The complete code is shown below.

<?php
 
require_once('TwitterAPIExchange.php');
 
$settings = array(
    'oauth_access_token' => "YOUR_ACCESS_TOKEN",
    'oauth_access_token_secret' => "YOUR_ACCESS_TOKEN_SECRET",
    'consumer_key' => "YOUR_CONSUMER_KEY",
    'consumer_secret' => "YOUR_CONSUMER_SECRET"
);
 
$url = "https://api.twitter.com/1.1/statuses/user_timeline.json";
$requestMethod = "GET";
$getfield = '?screen_name=johndoe123&count=3';
 
$twitter = new TwitterAPIExchange($settings);
 
$response = $twitter->setGetfield($getfield)
                    ->buildOauth($url, $requestMethod)
                    ->performRequest();
 
print_r($response);

Executing the above code will return the recent 3 tweets for the given user in JSON format. You can specify the number of tweets to return using the ‘count parameter. The maximum that can be returned is 200.

$getfield = '?screen_name=johndoe123&count=3';

Note that all GET fields for this method are optional. Not specifying any GET parameters will return 20 recent tweets for the current user, i.e the user with the given access tokens. You can query without the GET parameters as shown below.

$url = "https://api.twitter.com/1.1/statuses/user_timeline.json";
$requestMethod = "GET";
 
$twitter = new TwitterAPIExchange($settings);
 
$response = $twitter->buildOauth($url, $requestMethod)
                    ->performRequest();
 
print_r($response);

Also, the response is returned in JSON, so will need to decode the JSON first before working further.

$tweets = json_decode($response);
print_r($tweets);

The tweet is stored in the ‘text’ field of the response, so we can enumerate all returned tweets with the following. Various other fields can be accessed in similiar manner.

$tweets = json_decode($response);
 
foreach($tweets as $tweet)
{
    echo $tweet->text . PHP_EOL;
}

Posting a new Tweet

Posting a new Tweet can be done with the following code, which uses a POST method instead of a GET. The initial code remains the same.

<?php
 
$url = "https://api.twitter.com/1.1/statuses/update.json";
 
$requestMethod = 'POST'; 
 
$postfields = array(
    'status' => 'Testing Twitter app'
);
 
$twitter = new TwitterAPIExchange($settings);
 
$response = $twitter->buildOauth($url, $requestMethod)
                   ->setPostfields($postfields)
                   ->performRequest();
 
print_r($response);

There are additoinal parameter you can use, the details for which are given here.

Searching for Tweets

Searching for Tweets based on a query is as easy as the above examples. Here in the following example we query for the ‘laravel’ keyword and ask o return 10 statuses.

$url = "https://api.twitter.com/1.1/search/tweets.json";
 
$requestMethod = "GET";
 
$getfield = '?q=laravel&count=10';
 
$twitter = new TwitterAPIExchange($settings);
$response = $twitter->setGetfield($getfield)
                    ->buildOauth($url, $requestMethod)
                    ->performRequest();
 
$tweets = json_decode($response);
 
foreach($tweets->statuses as $tweet)
{
    echo $tweet->text . PHP_EOL;
}

API rate limits

One important point to consider when creating your app is of rate limiting. Twitter limits the rate at which you query using their API. For example search will be rate limited at 180 queries per 15 minute window. More information can be found here.

Important Note

If the above examples do not work you will have to make a small change in ‘TwitterAPIExchange.php’. The curl processing part (around line 192) requires the line ‘CURLOPT_SSL_VERIFYPEER => false,’ to be added. So the curl part in the file should read the following.

        $options = array( 
            CURLOPT_HTTPHEADER => $header,
            CURLOPT_HEADER => false,
            CURLOPT_URL => $this->url,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_TIMEOUT => 10,
        );

 

Windows 10, #Windows10 conference

Everything You Need To Know About The New Windows 10 from Microsoft

As expected Microsoft MSFT -0.17% has formally announced the new version of Windows. As no-one expected it will be called ‘Windows 10’ not Windows 9. Why? Because Microsoft claims it represents such a significant leap over Windows 8 that calling it Windows 9 would not do it justice.

I can hear your groans now, but in Microsoft’s defence Windows 10 has some major (and long awaited) improvements. Here are the highlights:

One OS To Rule Them All

Architecturally the biggest news is that Windows 10 is being designed to run across all device form factors. That means desktops, laptops, tablets, phablets and smartphones.

“Windows 10 will run on the broadest amount of devices. A tailored experience for each device,” said Terry Myerson, Microsoft Executive VP of Operating Systems. “There will be one way to write a universal application, one store, one way for apps to be discovered purchased and updated across all of these devices.”

Microsoft didn’t break down when we might see a Windows 10 smartphone and how that would impact/absorb Windows Phone (or even elaborate on the future for Windows Phone) but it does offer to clear insight into Microsoft’s long term road map.

Update: Microsoft has now confirmed ‘Windows 10′ will also be the next major version of Windows Phone. What devices get the upgrade and how Microsoft will handle it remains to be seen. 

Windows 10 Start Menu

The Start Menu Is Back

The cat has been out the bag for some time, but Microsoft has finally confirmed the Start Menu will return. The leaks were spot on and it will combine both aspects of the classic Windows 7 start menu with apps from the Metro/Modern UI. Searching within the Start Menu will now perform a web search as well.

Crucially its layout can be customised so apps can be removed or resized and the flexibility and personalisation potential of the Start Menu should win back fans disillusioned about its removal in Windows 8.

Windows 10 use on a tablet

Better Touch/Keyboard And Mouse Integration

Microsoft has taken criticism seriously about the jarring nature of moving between touch and the keyboard and mouse elements of Windows 8.

Microsoft is calling the new approach ‘Continuum’ and it is an umbrella term for a better merger between to different input methods. Continuum will be able to automatically switch between modes by detecting on how users interact with their device. It also carries over to design aspects like the new Start Menu, windowed apps within the desktop and so forth.

“We’re trying to be thoughtful about a UI that goes across all devices,” explained Joe Belfiore, Corporate Vice President of the Operating Systems Group at Microsoft.

He admits Continuum remains a work in progress with refinements to things like the Charms Bar (yes it is still there) set to be an ongoing process through the life of the public beta and right up to release (more on that later).

Windows 10 Virtual Desktops

Virtual Desktops

Another leaked feature Microsoft confirmed today was virtual desktops. Microsoft didn’t give the feature an official name at this stage, but it works much like the long used multiple desktops on Linux and Exposé on Mac OS X.

The view can be triggered with a new ‘task view’ button which both allows users to launch a new virtual desktop and jump between them. Interestingly the taskbar can be customised to look different/relevant to each desktop allowing a simple leap from work to home modes, for example.

Microsoft said all open programs in the virtual desktops will continue to run in the background, which makes for some interesting memory management challenges but also greatly increases the potential productivity of Windows as well as de-cluttering the desktop space.

Pricing / Availability

It has been much speculated that Windows 10 may be given away free to upgraders or involve a nominal fee, but Microsoft revealed no information about this in either the presentation or Q&A afterwards.

What we did learn is a technical preview of Windows 10 will be made available to users later this week (Microsoft is stressing it is only for advanced users and developers at this stage) and that an official release would not follow until ‘later in 2015’. This suggests the OS is not as far along as many expected and Microsoft is keen to develop it in conjunction with user feedback.

Windows 10 Start Menu search

What Will Still Don’t Know: A Lot

Perhaps what is almost as interesting as what was revealed about Windows 10 is what Microsoft kept to itself.

In addition to no news on pricing, Microsoft also didn’t touch on performance (install size and minimum hardware requirements), Cortana integration (the voice assistant in Windows Phone 8.1), give a solid release time frame or go into any detail on how Windows 10 will handle scaling on high resolution screens – crucial given 4k monitors and super high resolution laptops are quickly gaining momentum.

On the flip side what we did see is a more open Microsoft. A company, perhaps shaken by the decidedly mixed reaction to Windows 8 (however fair or unfair), that is now keen to try and mix the best aspects of Windows 7 and Windows 8 into a more user friendly experience. This means releasing early builds, issuing rapid fire updates and developing in conjunction with ongoing user feedback.

Windows 10 Product Family (image credit: Microsoft)

Is choosing the ‘Windows 10’ moniker a step too far though? “It’s a name that resonated best with what we’ll deliver,” explained Myerson.

Many would argue the struggles of Windows Phone and Windows 8 have put Microsoft into a terminal decline, but tonight’s announcement – while thin on details – suggests there is still life in the old dog yet.

Windows product family, windows 10 launch

Microsoft’s next OS is Windows 10, will ship later in 2015

Instead of announcing the next version of its iconic operating system in front of a massive crowd of thousands, Microsoft chose an intimate venue with 50 or so reporters to launch the new Windows, which it’s calling Windows 10. The company looks at the new number (yes, it skipped a number) as an indication of the direction it’s taking with the OS; Microsoft says it’ll be “the most comprehensive platform ever,” featuring a full range of products that’ll be placed under the Windows 10 umbrella as part of “one tailored experience.” That means it will support everything from the “Internet of Things” to enterprise servers. Microsoft’s Joe Belfiore showed off an early beta version of the new Windows on stage, which looks very much like the leaked screenshots we saw not too long ago; Belfiore says that they wanted to bring the familiarity of Windows 7 and combine it with the functionality of Windows 8.

Windows 10 new Start screen

Windows 10 will run across an incredibly broad set of devices – from the Internet of Things, to servers in enterprise datacenters worldwide. Some of these devices have 4 inch screens – some have 80 inch screens – and some don’t have screens at all. Some of these devices you hold in your hand, others are ten feet away. Some of these devices you primarily use touch/pen, others mouse/keyboard, others controller/gesture – and some devices can switch between input types.

When you put all that together, the end result looks a lot like Windows 7. That’s intentional. Microsoft’s Joe Belfiore pointed to the millions of customers still using Windows 7, and said the company wants to make their transition to Windows 10 much more comfortable than the unfamiliar leap to Windows 8 two years ago. “We want all these Windows 7 users to have the sentiment that yesterday they were driving a first-generation Prius, and now with Windows 10 it’s like a Tesla.”

“Windows 10 will deliver the right experience on the right device at the right time,” said Microsoft’s Terry Myerson. “Windows 10 will run on the broadest types of devices ever.” You can expect a unique user interface depending on what you’re running Windows on; images shown at the event line up with leaks that have surfaced in recent weeks. It’s basically a combination of Windows 7 and 8 that borrows design elements from each of Microsoft’s two most recent operating systems.


The new Windows 10 start menu.

The “Metro” start screen and Microsoft’s traditional Start Menu have been combined; no longer is the screen one huge grid of tiles for desktop users. “The tiles and icons that are shown are a blend of classic apps and new universal apps,” Belfiore said. But Live Tiles are still here and can be resized to a user’s preference. More than anything else, Microsoft is working to make everything feel way more cohesive. “In Windows 8 when users launched a modern app, it sort of had a different environment,” Belfiore said. “We don’t want that duality. We want users on PCs with mice and keyboards to have their familiar UI.”

There’s a new universal search in the start menu that pulls in results from the web, and Microsoft is also talking up its “task view,” which helps users master Windows’ multitasking features. It looks fairly similar to Expose in OS X and allows users to set up different desktops for work, home, and other usage scenarios, switching apps between them at will. Up to four apps can now be snapped on screen, which also should ramp up Windows 10’s multitasking power. Microsoft outright admitted this isn’t entirely an earth-shattering addition. But it is intended to speed up your productivity across the entire operating system. “It illustrates for Windows we have to address a breadth of users,” Belfiore said, moving on to show a big improvement to the command prompt: it now supports paste.


Windows 10’s Task View.

But Microsoft isn’t abandoning touch input. Belfiore said the Charms bar from Windows 8 has been carried over to Windows 10 with improvements of its own. “We want to support those Windows 8 users who have touch machines and getting a lot of benefit out of them.” For convertible devices like the Lenovo Yoga 2 Pro, Microsoft is adding a new Continuum mode that aims to make the frequent switch between tablet mode and laptop mode more seamless. “What you get is a device that operates with the simplicity of a tablet, but morphs itself back to the familiar PC experience,” said Belfiore.

Microsoft will launch a Windows 10 “Insider Program” beginning tomorrow, which will give its most enthusiastic and vocal users a chance to try out and help shape the new OS before the general public gets it. Windows 10 will launch to consumers everywhere in late 2015. And today was only the beginning; Microsoft says it will unveil much more about the new consumer features of Windows 10 early next year.