<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>Winners Don&apos;t Lose</title>
        <link>http://www.winnersdontlose.com/</link>
        <description>A gathering of rants, raves, and sometimes useful information.</description>
        <language>en-US</language>
        <copyright>Copyright 2008</copyright>
        <lastBuildDate>Fri, 17 Oct 2008 11:38:23 -0800</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>IT / Sys Admin Resume</title>
            <description><![CDATA[For this entry I thought I'd take a break from the typical SaaS performance/delivery/design entries to something a little different:&nbsp; resume styles for IT / Sys Admins.&nbsp; In the 10+ years I've been in the industry I've had the (dis)pleasure of interviewing something along the lines of 150-200 potential sys admin candidates, along with having to read something like 500 resumes.&nbsp; I fully concede that there are others who have read/interviewed way more than I have, but since my resume gets complimented and imitated fairly often by my friends and colleagues, I thought I'd share how mine is structured.<br /><br />My approach was to keep it simple, with (what I feel to be) the more relevant things up top, and scaling down to the less relevant things.&nbsp; (Note: my resume is at www.eliminated.org/resume.php, feel free to provide any comments or feedback.)<br /><br />----- Resume Layout -----<br /><br />NAME (bigger font than anything else on the page, but not distastefully so)<br />contact info (in smaller font than anything else on the page)<br /><br />Profile<br />I know a lot of people hate these "this is who I am in a nutshell" sections but I feel like this is a good place to give your audience an idea of who you are and where you see yourself going.&nbsp; Anything more than a 2 or 3 sentences becomes a bit much to digest, and if you find yourself needing more than 2 or 3 sentences then maybe it's time to re-think what it is you'd like to get across first.<br /><br />Skills / Knowledge <br />Next to your name and how to get ahold of you, this is the next most important section for a tech resume.&nbsp; By the time a company gets around to interviewing someone for a position they usually have a decent idea of which skills would be required.&nbsp; Providing a brief and easy to read summary of what you know will allow someone to gather this information about you in a very little amount of time.&nbsp; A little sub-categorization is nice here, depending on your focus.&nbsp; For example, don't put "Office 2000/2003" in the same category as "Apache 2.x"- these are significantly different technologies and realistically anyone who cares about one isn't going to care as much about the other.&nbsp; On my resume, you will find the following sections: Operating Systems, Programming Languages, Software, and Services.&nbsp; <br /><br />Recent Experience<br />This section is what most people think of when they think resume.&nbsp; Here, list your -relevant- job experiences, with 2-3 highlights from each job that you believe are indicative of your best/most employable qualities.&nbsp; I would say that 2 or 3 of your most recent relevant jobs should be more than enough for a clear indication of what you are capable of.&nbsp; A lot of times people have way too many jobs in this section, and list way too much about the specifics of what they do.&nbsp; I tend to speak broadly enough that 1) someone with a non-technical background could accurately convey what I do, and 2) shows the scope of what I've done.&nbsp; A good rule of thumb seems to be that if you can't describe it in one sentence, then you need to re-consider what you're trying to say.<br /><br />Education, References, etc.<br />These sections are more there for formality than anything else.&nbsp; If you have college degree, list which college, the year you graduated in, and which degree you have.&nbsp; I've seen resumes that listed the fraternities/clubs that that someone belonged to, and frankly, it's just not all that important in the decision making process.&nbsp; <br /><br />For references, a simple "References available upon request." is more than enough.&nbsp; If a company wants you bad enough they will call you and ask for the data.&nbsp; This is also a good control loop to put around access to your references.&nbsp; These people are (hopefully) people with whom you've made a positive impression; you don't want to lose that because they are now getting spammed because of you.<br /><br />If you need more space to fill, then you could put in anything else you feel might be relevant.&nbsp; For example, I put down that I'm fluent in Mandarin Chinese.&nbsp; This skill isn't something I hope to have to count on for a job, but it shouldn't hurt and really can only help.<br /><br />I think one of the main problems with Sys Admin resumes that I've seen is that SA's typically (or stereotypically) aren't the kind of people who are all that great with marketing themselves.&nbsp; The problem is that in order to get better jobs and to climb that proverbial ladder, you have to convince people who ARE good at marketing themselves that you too are worth it.&nbsp; There are lots of ways most people could market themselves better, but at the end of the day, the first thing a prospective employer will see is your resume, and you should make that a top priority to get in order.<br /><br />I welcome any feedback and suggestions that anyone reading this may have, since I don't work in HR and don't claim to have all the knowledge in their arena.&nbsp; I do believe, however, that you should keep your resume up to date and accurate even while not searching for a new job.&nbsp; <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> ]]></description>
            <link>http://www.winnersdontlose.com/2008/10/it-sys-admin-resume.html</link>
            <guid>http://www.winnersdontlose.com/2008/10/it-sys-admin-resume.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">IT job hunting</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">resume</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">systems administrator</category>
            
            <pubDate>Fri, 17 Oct 2008 11:38:23 -0800</pubDate>
        </item>
        
        <item>
            <title>Sticky sessions and scalability in the .NET CLR</title>
            <description><![CDATA[Scaling websites that deliver static content has sadly become an old trick.&nbsp; Anyone who has ever heard the letters CDN used next to each other can put together an intelligent solution for scaling static content delivery.&nbsp; However, what happens when a web application that requires "sticky sessions" needs to be horizontally scaled?&nbsp; Even Akamai (the only CDN with a dynamic acceleration product) necessarily forwards all of the dynamic requests back to origin.&nbsp; While they do lessen the load on origin servers, the very nature of dynamic applications is such that all the processing needs to be handled by -your- servers.<br /><br />Despite the fact that this entry will focus explicitly on how to do this with .NET applications, the approach to this problem is basically the same, no matter which middleware you use.<br /><br />In essence, when a user signs into an application using sticky sessions, the user is assigned a cookie that identifies the session.&nbsp; The server also needs to know about this, since there are server-side controls, such as session timeouts, etc.&nbsp; In .NET the "session" is known as "state" and the server-side controls are governed by config files scoped by the server (machine.config) or the web app itself (web.config).&nbsp; <br /><br />Microsoft provides a few different ways of managing state.&nbsp; At the highest level, the distinction is drawn between "InProc" (local server memory) or not.&nbsp; The InProc model is a monolithic one, essentially designed for a one server + failover scenario.&nbsp; While this is fine for redundancy, this will not help if your user load overwhelms that single server.&nbsp;&nbsp; <br /><br />If you do not use the InProc model, Microsoft has provided an ASP.NET state server service, which is a service that will store and retrieve state data from any ASP.NET web application.&nbsp; They also provide a handful of registry keys with which to tweak the service.&nbsp; I'm not a big fan of this particular mechanism, since it's very much a "black box" approach.&nbsp; I've found that utilizing the state server is fine most of the time, but when it doesn't work you are more or less reduced to the traditional Windows troubleshooting method (rebooting).<br /><br />An alternative for storing state data out of the memory is SQL Server.&nbsp; You can take any SQL Server instance and create a special state database (the schema for which is publicly available), and then point your web applications to the SQL instance for storing and retrieving state data.&nbsp; This approach is easier to troubleshoot, since you have the full array of SQL tools available, but it is much harder to setup, and is also slower than the InProc or state server models.&nbsp; When I've used this in a production environment I found that it worked a little more reliably than the state server, but there was a very noticeable hit on performance.&nbsp; (Note:&nbsp; the performance impact can probably be minimized with intelligent coding but that sadly was not an option for us at the time.)<br /><br />So far, I've written about InProc, state server, and SQL server as methods of storing and retrieving state data.&nbsp; Another way of scaling your web front-end while ensuring that your end user sessions are not lost is the following:<br /><br />Say I have a web application, available at http://app.company.com.&nbsp; I'd like to scale this hostname such that thousands of simultaneous users will not bring my server down, but I'm also sensitive enough to end user experience such that the unreliabe or slower performance of the state server and SQL Server is not acceptable.&nbsp; Consider the following flow:<br /><br />1) User loads http://app.company.com.<br />2) The webserver for http://app.company.com does an HTTP 302 on the end user agent, and sends them to either http://app1.company.com or http://app2.company.com.<br />3) All further interactions with the end user happens over the hostname http://app1.company.com or http://app2.company.com.<br /><br />In this scenario, we assume that machines app1 and app2 are fully contained instances of the application you are trying to scale.&nbsp; These machines should be configured for InProc.&nbsp; SInce we rewrote the end user's URL in their browser, we can therefore be assured that all following interactions is with app1 or app2 directly.&nbsp; The downside to this approach is the introduction of a very piece of code:&nbsp; the redirector.&nbsp; This code will basically have to round robin through a list of hostnames, and ideally perform some manner of a healthcheck so end users are never sent to a machine that isn't working.&nbsp; Also, while this approach does not scale forever, it does introduce extra layers of scalability which can be used (load balancing to a pair of redirector servers, etc, ad nauseum).<br /><br />While some of the methodologies discussed here are specific to the .NET framework, most MW tiers have the ability to maintain state in something other than local memory.&nbsp; The redirector approach is completely agnostic and should be applicable to most any scenario, but as always, none of the stuff I discuss here is an endorsement of any sort, these are more a synopsis of my experiences in having worked with this stuff for a relatively high volume environment with (what I consider to be) unreasonable demands ;)<br /><br />&nbsp; <br /><br /><br /> ]]></description>
            <link>http://www.winnersdontlose.com/2008/10/sticky-sessions-and-scalabilit-5.html</link>
            <guid>http://www.winnersdontlose.com/2008/10/sticky-sessions-and-scalabilit-5.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">.NET CLR CDN scalability sticky sessions</category>
            
            <pubDate>Wed, 08 Oct 2008 10:50:30 -0800</pubDate>
        </item>
        
        <item>
            <title>DIY Application Acceleration Network</title>
            <description><![CDATA[There is a gaping hole (which is currently being filled) in the CDN market:&nbsp; application acceleration.&nbsp; Application acceleration remains a bit of a holy grail for content delivery networks (CDN), mostly due to the never ending trail of patents and acquisitions in the content delivery industry.&nbsp; Currently Akamai is the only company to have a hosted application acceleration network, aptly named Web Application Accelerator (WAA).&nbsp; <br /><br />Akamai's approach is a generalized caching and forward mechanism layered on top of their SureRoute platform.&nbsp; While this is effective <i>en masse, </i>there is a lot of room for targeted improvement.&nbsp; The knobs and switches provided for WAA are mostly time to live (TTL) settings and other caching options.&nbsp; Those of us wishing to go for a more controlled, targeted application acceleration network were historically left on our own, working through WAN replication, database sharding, and other "good enough" type solutions.&nbsp; Thankfully, application acceleration and end user experience management has become a bit of a hot topic in 2008 and now the big networking companies (F5, Citrix, etc) are all developing product lines aimed at accelerating dynamic applications. A potential sleeper in this race is StrangeLoop (well, for .NET applications&nbsp; anyways [for now?]), whose approach is very easily adaptable for a hosted (CDN) scenario.<br /><br />In order to convey the approach behind this design I will provide some examples of products currently on the market (which is not an endorsement of any sort).<br /><br />This approach requires a separation of presentation and data access.&nbsp; Basically, your front-end webservers (hosting the application you're trying to accelerate) needs to be able to access a data access tier, who in turn makes requests directly to your data store (usually a database).&nbsp; This is a very common approach and allows for back-end operations to be managed independently of the front-end.&nbsp; Typically, messages passed between front- and back-end servers via SOAP or something similar.&nbsp; If we're going to push these over WAN, 128-bit SSL is a minimum (alternatively, you could pipe these requests through an SSH tunnel). .<br /><br />Since the end user's experience deals largely with your front-end servers, a concept called TCP multiplexing or connection pooling decreases end user render time.&nbsp; This feature is available on any layer-7 capable load balancer, like the Citrix NetScaler, or the A10 load balancers.&nbsp; To most effectively utilize a WAN accelerating appliance like the Citrix WANScaler or F5's WANJet, data access requests from presentation servers should also be multiplexed into one persistent connection back to your data access servers (so you only move large amounts of data between the database and data access, which should be physically near each other).<br /><br />If possible, the interfaces used for acceleration to origin should be separate from those serving end user requests.<br /><br />With this approach a company utilizing WAA can reduce their cost of goods sold by only targeting regions where business is conducted.&nbsp; While there is an upfront investment of hardware, ongoing operations should be much cheaper, with a speedier end user experience.<br /><br /> ]]></description>
            <link>http://www.winnersdontlose.com/2008/03/diy-application-acceleration-n.html</link>
            <guid>http://www.winnersdontlose.com/2008/03/diy-application-acceleration-n.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">application acceleration</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">content delivery network</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">end user experience</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">SaaS performance</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">WAN acceleration</category>
            
            <pubDate>Thu, 06 Mar 2008 20:25:48 -0800</pubDate>
        </item>
        
        <item>
            <title>Welcome Technorati</title>
            <description><![CDATA[I am happy to welcome the spiders of Technorati with this post.<br /><a href="http://technorati.com/claim/pevedk6h">Technorati Profile</a><br /><br />]]></description>
            <link>http://www.winnersdontlose.com/2008/03/welcome-technorati.html</link>
            <guid>http://www.winnersdontlose.com/2008/03/welcome-technorati.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">technorati</category>
            
            <pubDate>Sun, 02 Mar 2008 22:42:57 -0800</pubDate>
        </item>
        
        <item>
            <title>How It Works: Static Edge Delivery</title>
            <description><![CDATA[Static content delivery on "edge servers" is something that Akamai, LimeLight, Highwinds, Panther Express, and the like have been selling as the core of their content delivery network (CDN) services.&nbsp; If you read my last post then you're already familiar with the concept of the "edge" and the "origin."&nbsp; For those who didn't, the "edge" is basically where end users access a SaaS-type web application and the "origin" is where the content you want to accelerate lives.<br /><br />Typically, end users, who are considered as being part of the "last mile," experience greater latency and/or packet loss (resulting in poor end user experience) by going beyond the "edge."&nbsp; Without an edge delivery service, end users have to go from the "last mile," to the "edge," to the "middle mile (depending on who you ask and where the end user is)," to the "backbone."&nbsp; <br /><br />Note:&nbsp; Anyone concerned with end user performance should get transit from a major backbone provider in order to deliver the fastest possible to the most networks.&nbsp; Static edge delivery will still shave time off of the overall transaction but the performance benefit is greatest when the origin is on a major backbone, or someone like InterNAP.<br /><br />Most of the above-mentioned services work by having a number of servers strategically located in the major edge networks which cache the static content going out to the end users.&nbsp; If a file is being requested for the first time (from the perspective of the edge server), a request is made back to origin for the file and then transparently sent to the end user.&nbsp; From that point on, the accessed edge server will cache a copy of whatever files were requested for a configurable period of time (cache TTL).<br /><br />In order to not impact end user experience when requesting a file that the edge doesn't have, the origin request is accelerated through what is usually a proprietary network acceleration algorithm.&nbsp; In a nutshell, the CDN companies rely on an algorithm faster than BGP in order to appear seamless.&nbsp; Akamai, for example, utilizes their SureRoute platform as the cornerstone of most of their acceleration services.<br /><br />A typical end user transaction for static content delivered by edge servers looks like the following:<br /><br />- user requests some URL which is accelerated at the edge<br />- the user is directed to the fastest local edge server, as determined by the CDN provider, either via BGP Anycast or DNS redirection<br />- if the edge server in question doesn't have the requested content, the edge server makes a request to origin on an accelerated and/or optimized path<br />- once the edge server has the data requested, it is cached per policy and served to the end user<br /><br />It's worth mentioning before we get any further that hostnames and URLs are what is accelerated, not networks, servers, or anything along those lines.<br /><br />If we assume the user to be in New York and the origin to be in San Francisco, we are able to shave a lot of time off in the transaction.&nbsp; A request spanning the width of this country, on average, takes something on the order of 200ms.&nbsp; That's 100ms spent going from NY to SF and another 100ms spent from SF to NY.&nbsp; While 200ms isn't a big deal for most people, keep in mind this is 200ms <i>for each and every request</i> on the page.&nbsp; So if you host a website with 50 10k images, end users in NY will have to wait a theoretical maximum of 10 seconds just for network latency.&nbsp; (Since we're assuming static content here origin server performance is rarely an issue.)&nbsp; For comparison, routing to the edge of Comcast's residential cable network in SF takes something like 15ms.&nbsp; For the example above, the same 50 objects will take less than a second (~750ms) to download in an edge delivery scenario.&nbsp; There is a slightly longer latency for files being requested for the first time but that should only affect one user once, with all subsequent requests happening at accelerated rates.<br /><br />Please do not consider the CDN references above to be an endorsement of any type.&nbsp; I am only trying to relay information, it is up to you to find the best network to suit your needs.<br /><br /><br />]]></description>
            <link>http://www.winnersdontlose.com/2008/03/how-it-works-static-edge-deliv.html</link>
            <guid>http://www.winnersdontlose.com/2008/03/how-it-works-static-edge-deliv.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">edge acceleration</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">end user experience</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">SaaS performance</category>
            
            <pubDate>Sun, 02 Mar 2008 10:44:45 -0800</pubDate>
        </item>
        
        <item>
            <title>Edge Acceleration Strategies:  Akamai</title>
            <description><![CDATA[I live in a world of end user experience management.&nbsp; The SLA's I have in place with my customers are quantified in milliseconds, and as such we employ a strategy known as edge acceleration.&nbsp; Edge acceleration can mean different things to different people, but those who have a SaaS (Software as a Service) model treat the "edge" as the network physically closest to the end user and the "origin" is where the application(s) is hosted.<br /><br />For web-based applications, the following almost always happens (regardless of industry, form, or function):<br /><br />Steps (necessarily very high-level)<br />1) user pulls up some hostname (app.company.com) in a browser<br />2) user sees a page, usually a login page, accompanied with text and images<br />3) user logs in and proceeds to use the application in any number of ways<br /><br />Since these three steps are effectively universal in SaaS, it is worth our while to analyze these steps in an effort to increase the accessibility of these things from the edge. <br /><br />Analysis<br />1) An end user typing a hostname into the address bar of his browser and clicking "go" triggers a number of events.&nbsp; First, the hostname typed in needs to be resolved to an IP address via DNS.&nbsp; Once the IP is known, our end user connects to the IP requested, and issues HTTP GET's based on the server response (HTML).<br /><br />Leveraging an edge DNS service, such as Akamai's eDNS service, will ensure that a nameserver most accessible to the end user will pick up the request and respond.&nbsp; This is theoretically faster than having ns1.company.com hosted in Silicon Valley with end users in New York.&nbsp; With eDNS, users in New York will have their requests answered by servers which are usually physically much closer, and therefore faster.<br /><br />2) An end user downloading and rendering the login page of a web-based application is probably the easiest part to deal with.&nbsp; Since there's nothing user-specific at this point generally object here are statically cacheable. <br /><br />Leveraging an edge HTTP content delivery service, such as Akamai's EdgeSuite service, tries to make sure the end user will be downloading this static content from a webserver cache somewhere closer than the origin.&nbsp; Static content here typically includes JavaScript, JPG, GIF, PNG, CSS, and text.&nbsp; Edge delivery services also tend to add gzip compression to these files, reducing data transfer and speed to transfer.&nbsp; Files are cached for some configurable time and new files are retrieved from origin by the edge servers when an end user makes a request.<br /><br />This is a well-understood problem and solution, and most CDN's in existence today basically provide this as a baseline service.<br /><br />3)&nbsp; Once a user types in their identifying information and clicks login is where the complexity gets introduced.&nbsp; Usually when a user clicks the login button, there's a database lookup to validate user-supplied credentials, a session is instantiated for the user, amongst other things.&nbsp; In either case, these server-side events require end user interaction with the origin and the edge delivery model above simply cannot handle it.&nbsp; For this, a new trend in CDN technology has developed in the form of dynamic application acceleration.&nbsp; Akamai's service in this arena is called Web Application Accelerator (WAA) and utilizes their SureRoute technology to pass end user traffic back to origin and vice versa.&nbsp; In theory, WAA bypasses the BGP that most providers use by maintaining their own (more optimized) route tables, thereby decreasing the latency an end user experiences.<br /><br />Since this is a relatively new challenge to address en masse, it's understandable that Akamai's solution leaves a lot to be desired.&nbsp; However, their service is significantly faster for almost any type of application, and smaller companies simply don't have the expertise or funds to build their own application acceleration infrastructure.&nbsp; The major online retailers and MMOG operators figured this out years ago and have been building out their own infrastructure, but the cost-prohibitive nature of these undertakings is a large obstacle to overcome.<br /><br />Interesting note:&nbsp; there have been more and more companies competing in the application acceleration space with packaged solutions but I think we're still a bit aways from having your average medium-sized SaaS company deploy these things.<br /><br /><br />]]></description>
            <link>http://www.winnersdontlose.com/2008/02/application-acceleration-strat.html</link>
            <guid>http://www.winnersdontlose.com/2008/02/application-acceleration-strat.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">akamai</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">application acceleration</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">end user experience</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">SaaS</category>
            
            <pubDate>Tue, 26 Feb 2008 10:28:42 -0800</pubDate>
        </item>
        
        <item>
            <title>First post!</title>
            <description><![CDATA[First! <br />]]></description>
            <link>http://www.winnersdontlose.com/2008/01/first-post.html</link>
            <guid>http://www.winnersdontlose.com/2008/01/first-post.html</guid>
            
            
            <pubDate>Tue, 15 Jan 2008 11:17:54 -0800</pubDate>
        </item>
        
    </channel>
</rss>
