Author
McDevOps and DevOps Design Strategy
- by Asher Bond
What is DevOps?
DevOps is the strategic intersection of technical quality assurance, technical operations, and development. In most implementations or attempts to achieve DevOps synergy, Development refers to innovative software engineering, but may also refer to other innovation such as creativity. The DevOps movement got rolling because people with a dedication to productivity became frustrated with tossing packages over the wall of confusion between Development and production operations.

Developers have a stake in the innovation game any time they are hired to be creative, artistic, or re-engineer that which could be improved upon. Those who are paid to do something new often find their interests in conflict with production operations engineers who are paid to operate within a reliable, proven framework. These production operators are members of a highly available infrastructure. DevOps solves this problem by crushing the wall of confusion with the hammer of integration, held by stakeholders in the environment of shared responsibilities. When changes are managed in such a way that there is shared responsibility for concept-proven, tested, quality assurance many benefits emerge. One benefit is that production engineers no longer have to re-hack the developer’s deliverable in a production environment. The production environment becomes adaptive to proven concepts within an ecosystem of collaboration. Collaboration is like competition on steroids, especially in the fields of shared interest where quality is upheld and orchestrated by multiple groups.
Quality assurance can be achieved through collaborative testing. Rolling back to a last known good configuration/implementation is much less necessary when it’s efficient to roll forward to a tested configuration/implementation. This is made possible by technology, of course. Technology is the study, practice, and pursuit of productivity through tools. A technologist seeks to invent tools or teach those around him the way to use a tool or tool-set. In a tightly integrated DevOps core with sustainable gravity, responsibility and tool-sets are shared among authoritative stakeholders in an iterative project. DevOps is much more than just an AGILE cat’s finesse. It’s the Chef’s best. Get Served.
Welcome to McDevOps may I take your order?
McDevOps is the Management of changing DevOps. Configuration management is nothing new or simple, but it becomes artistic without a framework for best practice automation. Here’s why:
Automation can only be profitable in situations where human error introduces significant risk or antiperformance. Antiperformance often exists in situations where a reverse engineer has re-invented a wheel which cannot possibly spin faster. Be advised, however, that it may be considered hasty speculation for a reverse-engineer to paint his or herself out of the Innovation picture in fear of could-be antiperformance. Innovation does indeed require both grit and grid. Let’s not overlook the problem of Semi-automation introducing risk when transparency is lost among service layers. Service-oriented Architecture is not resilient if foundations are simply service level agreements. Solid Service-oriented foundations are built from a lot more grit in the bricks.
Feedback looping, testing, dogfooding, metal and electricity create a fine mix and anything built from it becomes infrastructure, but perhaps only elastic provision can efficiently and effectively automate the process and balance the scale.
The design process never ends, which may seem counter-intuitive to the designer who is unfamiliar with iterative process momentum. Let me assure you that counter-intuition is key to innovation, especially in design practice. Iteration is often the seed of momentum, but many branches require many roots.
Quality may be challenging to control, but design principles make it very possible to contrive. Be aware that in some production environments, a tightly coupled or performance-oriented DevOps core may unfortunately exclude feedback at times, but should create a gravity of production insights from all three inner circles. Collaboration is like competition on steroids. The alternative is advancement along the production curve at the expense of innovative development and best practice designs as deliverables. In order to deliver cutting edge services, a service-oriented architect or Agile DevOps must bleed on the edge.
What framework will be designed as a platform for success in your sphere and how might the wheel spin faster, more efficiently, and more effectively?
Service-Availability: Troubleshooting Google Apps when “Service-unavailable” errors plague Your virtual private Gmail implementation.
- by Asher Bond
If you run into an error that says:
This service is not available
Gmail is not available for yesmyown.com. Learn more about Google products you can use with your-google-apps-account@yesmyown.com.
Did you use this product with a different Google Account? Sign out of your current Google Account and then sign in to the account you want.
Step 1
The typical solution is to make sure that Gmail is enabled under the Organization & Users Menu and under the submenu “services” … you can access this screen directly if you are now logged into your Google Apps account by modifying this URL:
https://www.google.com/a/cpanel/yesmyown.com/Organization#Organization/subtab=1
If you decide to make changes here, don’t forget to save them.
Step 2
The typical solution may not solve a niche problem that happens when you add several domain aliases to the primary google apps account and you haven’t clicked through the “yes I set up my MX records” validation process. If you added more than one domain to your account, you may also want to check under Domain Settings -> Domain Names:
https://www.google.com/a/cpanel/yesmyown.com/DomainSettingsDomains
Make sure that you aren’t missing anything in the domain validation process. You may need to set MX records for alias domains that aren’t the primary domain before you can access Gmail.
Once you have validated everything here, go back to the menu from Step one and disable Gmail, save changes, then re-enable it and save again. Don’t forget to re-enable it, because you will lose email if you leave it disabled for more than 30 days.
See Also:
Google’s Troubleshooting tips
Other reasons service may be unavailable in Google Apps
Personal Computing with Asher Bond: Ubuntu Studio
- by Asher Bond
What makes Ubuntu Studio more relateable than other Linux desktop distributions is that Ubuntu Studio allows for direct, realtime process prioritized access to drivers and peripherals. If low latency is your priority, you should download the Ubuntu Studio 10.10 Maverick Meercat DVD and install it. I decided to mirror both distributions of Ubuntu Studio 10.10. If you are running an intel based typical machine, then you should probably download Ubuntu Studio for 32 bit architecture. Else, if you’re running 64 bit architecture (AMD), then download the AMD64 DVD ISO. Be sure to tell your BIOS to boot from your DVD ROM and be aware that the typical installation method will wipe out anything on your boot drive.
Here’s a screenshot of my semi-opaque black terminal over the default Ubuntu Studio desktop graphic:
Ubuntu Studio can be installed on laptops and it can also be deployed as virtual desktop infrastructure using Eucalyptus to distribute and aggregate compute resources for scale. Let me know if you would like to know more.
You can also install it on a Mac. I’m running on a MacBook Pro 3,1. For more info visit:
https://help.ubuntu.com/community/MacBookPro
Personal Computing Nightmares with Asher Bond: Ubuntu Fiction Based on a True Story
- by Asher Bond

This is Personal Computing with Asher Bond… Where Asher Bond takes computing personally.
Unbelieveably, Netflix is not yet able to provide streaming support… or even unlocked ACCESS for Ubuntu (the most relateable, extensible, and personal computing platform available) due to their arrangements with content providers. How does it work? I’m not sure exactly, but I’m guessing that the Netflix web servers look inside the http headers sent by the customer’s web browser. Compliant, honest web browsers tell the truth about what operating system they run on… but operating systems shouldn’t really matter in a web world, should they? I wonder if there is a good reason why Netflix blocked Ubuntu.
Ahaaaah… Here’s the problem… Linux can’t officially run Silverlight until moonlight is released and Silverlight is required by Netflix. I always wondered what Silverlight did.
About a year ago (roughly Nov 2009) JR Conlin @ Netflix wrote:
…Unfortunately, while there’s no restriction on what platform you can run our API on, there are various restrictions placed upon us by the content providers which limit what platforms we’re able to stream content to… (source: Netflix API Forum)
Don’t believe me? Here’s a screenshot sent in by Evie Ubuntis.
Ubuntu is a free operating system that is freely updated and freely maintained. People can download it, install it, and run it (and other applications inside of it) free of charge… Seems strange that Netflix’ content providers want to pull the plug on Ubuntu. Good luck content providers. Ubuntu, out of the box, is the cat that will continue getting out of the bag. If curiosity kills the cat, it will be happy that cats have nine lives.
I had a support inquiry that lead to this… me writing an imaginary scenario based on my strange imagination:
A Person Computing:
Your new Ubuntu software is worthless and it’s a pain in the )(*@#$&*@# …. I can’t even load Knotfix. No one uses this *&$)(@#$@. No wonder no one’s ever heard of it.
A Linux Person Computing:
The web browser detects your operating system and refuses to continue. How does it know? Send me a screenshot of the error.
Time goes by…
A Linux Person Computing:
You have got to be kidding me, you mean they blocked it??? Did Knotfix’s own partner network push Knotfix to block Ubuntu? It can’t be. I must be absurdly missing something. Let me look it up in a Gogul search Mogul. Yeah, according to the Gogul authorities, Ubuntu Persons Computing don’t seem too happy about Knotfix only working with Wondowses and UstabeFreeBSD UX Elite Ultra Wildcat Latest Edition Pro.
A Person Computing:
I hate this Ubuntu stuff… send me back in time when we had Wondowses and everything just worked the same every time… I don’t need you! I can get my fixit-boyfriend who works at the local best-bought geek farm to help me if I use Wondowses. He usually helps me through my auto-updates that I don’t do. Why do you tech guys have to keep updating the efffffing software!?!? If it ain’t broke don’t fix it. Anyway Willis the best-bought Wondowses retailer says Ubuntu has interoperability issues. Ubuntu is stupid! No wonder you geeks have so many issues. You back end people are so uninteroperable.
A Linux Person Computing:
If 100% of the fastest computers in the world run Linux, then why should I have to sell it? Don’t you want better, newer, more interoperable, more extensible, more customizable software? Don’t I have something for everyone? Especially if it’s free?
Person Computing:
If it’s so great, then why haven’t I heard of it. I watch TV all the time. If you have something for everyone, then what the efffff does that mean to a non-technical slave-driver like me? Willis the best-bought Wondowses retailer says that Ubuntu has driver problems. Is that because Ubuntu isn’t smart enough to work with my elusive hardware?
A Linux Person Computing:
You don’t want me to go into why you’ve never heard of it. As a side note, the cloud is a pretty volatile computing platform at the moment. Ubuntu works great to power piles and piles of nebulocity that I use to provide infrastructure, platform, and other software services. Ubuntu can virtualize virtually any OS environment. Linux is good enough for the pros and the amateurs, too bad it’s not good enough for you.
Person Computing:
STFU.
A Linux Person Computing:
Of course, let me go back into to my secure shell where I have a better chance at getting some work done.
Person Computing:
Since, obviously you don’t know much about computers, I think I’m going to reinstall Windowses over this Ubuntu mess. I’ll call you for help when I need someone to help me with the re-installation and malware removals.
Benchmarking Nginx in the cloud
- by Asher Bond
Summary
11,969 http requests handled @ 84 nanoseconds across 100 concurrent connections? Yeah. Here’s what happened:
root@ip-10-161-82-11:/var/www/nginx-default# ab -n 1000000 -c100 http://localhost:80/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient) Completed 100000 requests Completed 200000 requests Completed 300000 requests Completed 400000 requests Completed 500000 requests Completed 600000 requests Completed 700000 requests Completed 800000 requests Completed 900000 requests Completed 1000000 requests Finished 1000000 requests Server Software: nginx/0.7.65 Server Hostname: localhost Server Port: 80 Document Path: / Document Length: 34989 bytes Concurrency Level: 100 Time taken for tests: 83.544 seconds Complete requests: 1000000 Failed requests: 0 Write errors: 0 Total transferred: 35202867880 bytes HTML transferred: 34989862555 bytes Requests per second: 11969.72 [#/sec] (mean) Time per request: 8.354 [ms] (mean) Time per request: 0.084 [ms] (mean, across all concurrent requests) Transfer rate: 411492.58 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 2 0.2 2 5 Processing: 2 7 0.7 6 15 Waiting: 1 2 0.5 2 12 Total: 5 8 0.7 8 17 WARNING: The median and mean for the processing time are not within a normal deviation These results are probably not that reliable. Percentage of the requests served within a certain time (ms) 50% 8 66% 9 75% 9 80% 9 90% 9 95% 9 98% 9 99% 10 100% 17 (longest request) root@ip-10-161-82-11:/var/www/nginx-default# w 08:28:26 up 25 min, 1 user, load average: 0.63, 0.23, 0.08 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 c-69-181-58-125. 08:21 0.00s 0.01s 0.00s w root@ip-10-161-82-11:/var/www/nginx-default# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 23 model name : Intel(R) Xeon(R) CPU E5430 @ 2.66GHz stepping : 10 cpu MHz : 2659.998 cache size : 6144 KB physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 3 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority bogomips : 5322.20 clflush size : 64 cache_alignment : 64 address sizes : 38 bits physical, 48 bits virtual power management: processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 23 model name : Intel(R) Xeon(R) CPU E5430 @ 2.66GHz stepping : 10 cpu MHz : 2659.998 cache size : 6144 KB physical id : 1 siblings : 1 core id : 0 cpu cores : 1 apicid : 1 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority bogomips : 5322.20 clflush size : 64 cache_alignment : 64 address sizes : 38 bits physical, 48 bits virtual power management: processor : 2 vendor_id : GenuineIntel cpu family : 6 model : 23 model name : Intel(R) Xeon(R) CPU E5430 @ 2.66GHz stepping : 10 cpu MHz : 2659.998 cache size : 6144 KB physical id : 2 siblings : 1 core id : 0 cpu cores : 1 apicid : 2 initial apicid : 2 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority bogomips : 5322.20 clflush size : 64 cache_alignment : 64 address sizes : 38 bits physical, 48 bits virtual power management: processor : 3 vendor_id : GenuineIntel cpu family : 6 model : 23 model name : Intel(R) Xeon(R) CPU E5430 @ 2.66GHz stepping : 10 cpu MHz : 2659.998 cache size : 6144 KB physical id : 3 siblings : 1 core id : 0 cpu cores : 1 apicid : 3 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority bogomips : 5322.20 clflush size : 64 cache_alignment : 64 address sizes : 38 bits physical, 48 bits virtual power management: root@ip-10-161-82-11:/var/www/nginx-default# cat /proc/meminfo MemTotal: 15752364 kB MemFree: 14964352 kB Buffers: 22708 kB Cached: 216504 kB SwapCached: 0 kB Active: 134052 kB Inactive: 110996 kB Active(anon): 6000 kB Inactive(anon): 0 kB Active(file): 128052 kB Inactive(file): 110996 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 36 kB Writeback: 0 kB AnonPages: 5860 kB Mapped: 5052 kB Shmem: 164 kB Slab: 28876 kB SReclaimable: 12480 kB SUnreclaim: 16396 kB KernelStack: 872 kB PageTables: 0 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 7876180 kB Committed_AS: 47812 kB VmallocTotal: 34359738367 kB VmallocUsed: 5988 kB VmallocChunk: 34359732359 kB DirectMap4k: 15728640 kB DirectMap2M: 0 kB
Here’s a larger configuration running the latest stable version of nginx:
root@ip-10-166-162-224:/var/www# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 26 model name : Intel(R) Xeon(R) CPU X5550 @ 2.67GHz stepping : 5 cpu MHz : 2666.760 cache size : 8192 KB physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 17 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm tpr_shadow vnmi flexpriority ept vpid bogomips : 5335.92 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 26 model name : Intel(R) Xeon(R) CPU X5550 @ 2.67GHz stepping : 5 cpu MHz : 2666.760 cache size : 8192 KB physical id : 1 siblings : 1 core id : 0 cpu cores : 1 apicid : 1 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm tpr_shadow vnmi flexpriority ept vpid bogomips : 5335.92 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: processor : 2 vendor_id : GenuineIntel cpu family : 6 model : 26 model name : Intel(R) Xeon(R) CPU X5550 @ 2.67GHz stepping : 5 cpu MHz : 2666.760 cache size : 8192 KB physical id : 2 siblings : 1 core id : 0 cpu cores : 1 apicid : 2 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm tpr_shadow vnmi flexpriority ept vpid bogomips : 5335.92 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: processor : 3 vendor_id : GenuineIntel cpu family : 6 model : 26 model name : Intel(R) Xeon(R) CPU X5550 @ 2.67GHz stepping : 5 cpu MHz : 2666.760 cache size : 8192 KB physical id : 3 siblings : 1 core id : 0 cpu cores : 1 apicid : 3 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm tpr_shadow vnmi flexpriority ept vpid bogomips : 5335.92 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: processor : 4 vendor_id : GenuineIntel cpu family : 6 model : 26 model name : Intel(R) Xeon(R) CPU X5550 @ 2.67GHz stepping : 5 cpu MHz : 2666.760 cache size : 8192 KB physical id : 4 siblings : 1 core id : 0 cpu cores : 1 apicid : 4 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm tpr_shadow vnmi flexpriority ept vpid bogomips : 5335.92 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: processor : 5 vendor_id : GenuineIntel cpu family : 6 model : 26 model name : Intel(R) Xeon(R) CPU X5550 @ 2.67GHz stepping : 5 cpu MHz : 2666.760 cache size : 8192 KB physical id : 5 siblings : 1 core id : 0 cpu cores : 1 apicid : 5 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm tpr_shadow vnmi flexpriority ept vpid bogomips : 5335.92 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: processor : 6 vendor_id : GenuineIntel cpu family : 6 model : 26 model name : Intel(R) Xeon(R) CPU X5550 @ 2.67GHz stepping : 5 cpu MHz : 2666.760 cache size : 8192 KB physical id : 6 siblings : 1 core id : 0 cpu cores : 1 apicid : 6 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm tpr_shadow vnmi flexpriority ept vpid bogomips : 5335.92 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: processor : 7 vendor_id : GenuineIntel cpu family : 6 model : 26 model name : Intel(R) Xeon(R) CPU X5550 @ 2.67GHz stepping : 5 cpu MHz : 2666.760 cache size : 8192 KB physical id : 7 siblings : 1 core id : 0 cpu cores : 1 apicid : 7 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm tpr_shadow vnmi flexpriority ept vpid bogomips : 5335.92 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: root@ip-10-166-162-224:/var/www# cat /proc/meminfo MemTotal: 71700024 kB MemFree: 69213656 kB Buffers: 9736 kB Cached: 214992 kB SwapCached: 0 kB Active: 116788 kB Inactive: 116540 kB Active(anon): 8628 kB Inactive(anon): 152 kB Active(file): 108160 kB Inactive(file): 116388 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 8628 kB Mapped: 5756 kB Shmem: 172 kB Slab: 31148 kB SReclaimable: 21044 kB SUnreclaim: 10104 kB KernelStack: 1480 kB PageTables: 0 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 35850012 kB Committed_AS: 62120 kB VmallocTotal: 34359738367 kB VmallocUsed: 6100 kB VmallocChunk: 34359732247 kB DirectMap4k: 71680000 kB DirectMap2M: 0 kB root@ip-10-166-162-224:/var/www# ls -la index.html -rw-r--r-- 1 root root 281180 2010-10-16 09:02 index.html root@ip-10-166-162-224:/var/www# ab -n 1000000 -c100 http://localhost:80/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient) Completed 100000 requests Completed 200000 requests Completed 300000 requests Completed 400000 requests Completed 500000 requests Completed 600000 requests Completed 700000 requests Completed 800000 requests Completed 900000 requests Completed 1000000 requests Finished 1000000 requests Server Software: nginx/0.8.52 Server Hostname: localhost Server Port: 80 Document Path: / Document Length: 281180 bytes Concurrency Level: 100 Time taken for tests: 232.069 seconds Complete requests: 1000000 Failed requests: 0 Write errors: 0 Total transferred: 281395406970 bytes HTML transferred: 281181405900 bytes Requests per second: 4309.07 [#/sec] (mean) Time per request: 23.207 [ms] (mean) Time per request: 0.232 [ms] (mean, across all concurrent requests) Transfer rate: 1184132.86 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 0.2 1 3 Processing: 8 22 0.6 22 65 Waiting: 0 1 0.5 1 46 Total: 9 23 0.6 23 65 Percentage of the requests served within a certain time (ms) 50% 23 66% 23 75% 24 80% 24 90% 24 95% 24 98% 24 99% 24 100% 65 (longest request)
Here’s my smallest cloud instance running apache (tested from an m1.xlarge running in the same availability zone). The results are different because this is a network test involving two nodes. More latency is expected. Actually, there are a lot of differences in this next sample. 2 concurrent connections is much different than 100. The html page being distributed by the Apache http server here is similar to the one from the last sample.
This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking asherbond.com (be patient) Completed 10000 requests Completed 20000 requests Completed 30000 requests Completed 40000 requests Completed 50000 requests Completed 60000 requests Completed 70000 requests Completed 80000 requests Completed 90000 requests Completed 100000 requests Finished 100000 requests Server Software: Apache Server Hostname: asherbond.com Server Port: 80 Document Path: /blog Document Length: 234 bytes Concurrency Level: 2 Time taken for tests: 135.299 seconds Complete requests: 100000 Failed requests: 0 Write errors: 0 Non-2xx responses: 100000 Total transferred: 46700000 bytes HTML transferred: 23400000 bytes Requests per second: 739.11 [#/sec] (mean) Time per request: 2.706 [ms] (mean) Time per request: 1.353 [ms] (mean, across all concurrent requests) Transfer rate: 337.07 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 1 1 9.5 1 3002 Processing: 1 1 0.4 1 33 Waiting: 1 1 0.4 1 32 Total: 2 3 9.5 3 3003 Percentage of the requests served within a certain time (ms) 50% 3 66% 3 75% 3 80% 3 90% 3 95% 4 98% 4 99% 5 100% 3003 (longest request)
Considerations
- This is not a comparative analysis, but rather a generally uncontrolled experiment to collect system performance data from the cloud.
- Service-oriented Architecture is volatile when the supporting service layers are volatile.
- Compute infrastructure services (even EC2 m1.* and especially t1.micro) may be volatile depending on network health and demands at a given time.
- Benchmarking a local loop-back may give understated performance results on computers with lower IO bandwidth.
- Benchmarking a local loop-back may give overstated performance when service traverses networks suffering from high latency between client and server nodes.
- Some networks, virtual, and paravirutal compute environments limit the amount of concurrent connections during high (or even moderate) utilization.
- 100 concurrent connections isn’t very many, especially for Amazon Web Services.
- It would be interesting to see how many requests could be handled with 1000 concurrent connections.
Conclusions
- Bigger may have the potential of being better, but requires additional performance tuning for a specific application in order to take advantage of the compute capabilities of an 8 processor configuration.
- Sometimes the purpose of data collection reveals itself after such data becomes information.
- Sometimes it’s fun to show what a machine is capable of, whether you’re revving the engine on a dyno or just riding through some neighborhoods…
Introducing Scalable Cloud Response Architecture Platform Elasticity Revitalization Services (SCRAPERS)
- by Asher Bond
Just when you thought your app was in “the cloud” … someone showed you that you’re still on a VPS. Everything’s in the box…. DBMS, some scripting framework your web guy likes, maybe some plugins and things. You’ve got a lamp server running on there, some python stuff… ruby on rails, ruby off the rails, and your ex cube-farm neighbor Jim’s whole crazy train of UI experiments. MySQL’s SuSQL? Whos’ SQL is that? Want to throw more compute power at the problem? OK! Service-oriented operators are standing by!
System Requirements:
- Linux…
- or.. Unix if you prefer
- not running a non *nix based operating system
Senseless promotional point system options:
- +10 cloud points if you’re a Debian/Ubuntu user.
- +20 cloud points if you compile your own kernels.
- +30 cloud points if you’re from California.
- +40 cloud points if you’re from The Bay.
- +100 cloud points if you managed to rack up 100 cloud points just now.
Other Requirements
- Beta Participation with a tolerance for betavailability.
- SCRAPERS is a release candidate, so is your app, probably… anyway.
What happens inside the SCRAPER CLOUD…
- Normally what happens in the cloud stays in the cloud, but I will tell you anyway…
- Your server, VPS, appliance or application (let’s call it an app) is placed into a Scalable Cloud Response Architecture Platform Elasticator (SCRAPE).
- Once inside the SCRAPE, your app is replicated and privately analyzed by a service-orientation analyzer engine (SOAE)… well… it’s more like a scraper bike peddled by a service-oriented architect.
- Scalability is achieved by dividing your app into persistent data and elastic process service-layers that are provisioned by an Economy of Autoscale Elasticator Engine (EoAEE!!!!!!!).
- Your app will continue to get comfortable in the SCRAPE, reaching more efficiency as time goes on.
- Once your app has been service-oriented, your app will have learned to autoscale as needed and is ejected into the production cloud environment.
- Any SCRAPE’d app is compatible with Amazon Machine Images as well as Ubuntu Enterprise Cloud and Eucalyptus.
Promotional Service Rates for qualified apps (beta)
- $1.60 per hour per SCRAPE standard (supports most midsized developing and production apps)
- $3.30 per hour per SCRAPE VIP GOLD (livin’ large for famous apps)
- additional compute nodes “pedants” can optionally be purchased as needed for $0.025 per hour (according to the optimized load average plan)
- Network bandwidth and additional IPs: MARKET
Ask about premium pricing here.
sizeup.sh for cleaning house… I mean cloud.
- by Asher Bond
In a previous post, I described an experimental method of mounting S3 as a virtual file system within a cloud instance. I’m still in the process of doing spring cleaning… although fall is basically here… but anyway cleanliness is generally overrated until it comes to the idea of getting web files organized properly in the cloud. So before I take a shower this morning I think I’ll finish moving some static content into content distribution networked storage bit buckets.
#!/bin/bash
# Asher Bond 2010
# http://www.asherbond.com/blog/2010/09/23/sizeup-sh-for-cleaning-house-i-mean-cloud/
# sizeup.sh [dir]
# sizes up the present working directory or some other directory
# by summarizing the directories inside. I use this script to
# make sure my cloud compute instances are storing files properly
# in walrus and s3 filesystems or google storage instead of cluttering
# the compute instance's internal file systems
if [ "$#" -gt 0 ] ; then
cd $1;
fi
find . -maxdepth 1 -type d -exec du -hs {} \;
A Content Distribution Network is often more efficient than one point of delivery such as a single or centralized web server / VPS.
Please note this is risky business down here…
Here’s how a thrill seeker could try to move a whole bunch of stuff into a cdn real fast:
sizeup.sh
# oh wow what’s up here? that one is like fulla mp3s and videos
s3-mount.sh cdn.somedomain.com /mnt/cdn.somedomain.com
mv /var/some-directory/some-big-podcast-2010* /mnt/cdn.somedomain.com
echo “hey web master dude I just moved all ur files into the cdn, so update ur links.” | wall
# oh no I’m still the web master…
tar -cvf backup-in-case-my-links-dont-get-updated.tar /var/some-web-site
gzip *.tar
umount fuse
s3-mount.sh backups.somedomain.com /mnt/backups.somedomain.com
mv backup-in-case-my-links-dont-get-updated.tar.gz /mnt/backups.somedomain.com
cd /var/some-web-site
find . -type f -exec perl -p -i -e ‘s/some-old-links/some-new-cdn-links/g’ {} \;
# whoa i hope that worked… LOL!
Experimenting with Backups: From EC2 (or any networked unix box) to S3
- by Asher Bond
If you’re wondering if there’s a difference between backups in the Service-oriented Cloud and backups that the rest of the world is familiar with… well… there are 5 key differences mostly stemming from the fact that cloud backups are service-based (surprise-surprise)… but the rest of the world is probably not familiar with backing things up anyway, so let’s continue.
In SOA, a “cloud backup” is done by taking a snapshot outside the virtual device being backed up. It’s not really new. This can be done using XEN, Veritas, Amazon Elastic Block Storage snapshots, etc, etc…
Some people don’t like the idea of backing up an entire instance with it’s binaries, log files, and duplicate data. I believe that redundancy is useful if not necessary for reliable backups, so I take the big snapshots once per day or so, but I also back up smaller files more frequently for added roll-back-ability or whatever you want to call it. Here’s how I back up scripts from cloud appliances to my S3 bit buckets. Remember that a backup is only as good as your ability to restore it and automatic backups should be tested often. You might also want to periodically delete old backups that you don’t need, but this is optional and could be hasty. Redundancy can help ensure better data integrity for backups, but it’s at the cost of disk space and some network bandwidth… and you have to keep backups safe!
#!/bin/bash
# Asher Bond 2010
# http://www.asherbond.com/blog/2010/09/15/service-oriented-backups-from-ec2-to-s3/
# backup-scripts.sh
# backup scripts every hour
# slightly tested on Debian Lenny
# put this in your /etc/cron.hourly
# no trailing slashes
local_backup_dir='/var/backups';
remote_backup_dir='/mnt/backups.asherbond.com';
# script directories to recursively back up
script_dirs='/etc'
# learn the date in rfc-3339 format
date=`date --rfc-3339=seconds | cut -d: -f1 | tr ' ' '-'`;
hostname=`hostname`;
file_prefix="$hostname-backup-scripts-";
# files look like: myhostname-backup-scripts-YYYY-MM-DD-HH.tar.gz when they're done
filename="$file_prefix$date.tar";
cd $local_backup_dir
# delete any local backups older than 7 days
echo "Deleting backups older than 7 days..."
find . -type f -ctime +7 -name "$file_prefix*.tar.gz" -exec rm -f {} \;
echo "Archiving files..."
tar -cvf $filename $script_dirs
gzip $filename
# mount s3 backup bit bucket using FUSE
# http://www.asherbond.com/blog/2010/09/14/mount-an-amazon-s3-bit-bucket-as-a-drive-in-unix-using-fuse/
/etc/asher-bond-cloud/s3-mount.sh backups.asherbond.com
# copy to remote bit bucket
echo "Copying backup to Amazon S3 bit bucket..."
cp $filename.gz $remote_backup_dir
# unmount fuse when done
echo "Dismounting from S3, what a trusty workhorse..."
sleep 30 && umount fuse
echo "FIN."
The output will look something like this:
Archiving Files…
/etc/
/etc/mysql/
/etc/mysql/debian.cnf
/etc/mysql/my.cnf
/etc/asher-bond-cloud/
/etc/asher-bond-cloud/loadavg.py
/etc/asher-bond-cloud/backup-scripts.sh
/etc/asher-bond-cloud/s3-mount.sh
/etc/etc/etc/etc/lol
Deleting backups older than 7 days…
Copying backup to Amazon S3 bit bucket…
Getting object list from S3 …
Validating cache …
Setup complete
Dismounting from S3, what a trusty workhorse.
Fin.
It’s a long way down if your head is in the CLOUD.
- Asher Bond
Mount an Amazon S3 bit bucket as a drive in unix using FUSE
- by Asher Bond
You can put this in your startup scripts, but I just run mine when I want to upload files to S3 for content distribution or for backup. A couple of my backup scripts invoke this script, then umount fuse when they’re done backing things up to s3. It hasn’t fully been tested yet, but let me know how it works out. Remember to store your AWS credentials in a safe place where only trusted people can read them. It’s also a good idea to expire and rotate them frequently.
#!/bin/bash
# Asher Bond 2010
# http://www.asherbond.com/blog/2010/09/14/mount-an-amazon-s3-bit-bucket-as-a-drive-in-unix-using-fuse/
#
# USAGE: s3-mount.sh bucket-name [/mnt/point/optional/if/different]
#
# mount s3 using s3-simple-fuse
# This is released under GPL
# you might need to:
# See http://code.google.com/p/s3-simple-fuse/ for s3-simple-fuse
# apt-get install python-fuse
# apt-get install python-dateutil
# apt-get install python-boto
# if you don't specify a mount point it just assumes /mnt/bit-bucket-name
function s3-mount ()
{
if [ "$#" == 1 ] ; then
# allow for custom /mnt/points
mnt="/mnt/$1"
else mnt="$2"
fi
# keep this safe
aws_access_key_id='AKUIAS7YOURMOM8XUTA4GA'
aws_secret_access_key='sa09idontask2hsdfkjh34tnotrealna5p8'
mkdir $mnt
s3-simple-fuse $mnt -o AWS_ACCESS_KEY_ID=$aws_access_key_id,AWS_SECRET_ACCESS_KEY=$aws_secret_access_key,bucket=$1
}
s3-mount $1 $2
# to-do: mount google storage
# http://code.google.com/apis/storage/
#function google-storage-mount ()
#{
#}
Coming Soon: MaxCDN integration extensions for Magento.
- by Asher Bond
MaxCDN is a commercial Content Delivery Network (a.k.a Content Distribution Network) used by highly trafficked web sites including @Mashable.
It costs roughly $40 per month to host one Terabyte of data (that comes out to 1000 gigabytes if you’re a tech noob). Take a look at the edge locations. Having a CDN with servers in these locations probably makes sense if you are looking to distribute content to people in North America. The extension will streamline your Magento content and deliver it redundantly from at least 10 edge servers. It may also preclude the need for you to find a custom caching solution, depending how your Magento commerce solution was designed.
They’ve already released the integration software for WordPress, but here is an announcement of what you should expect to see when you can integrate CDN by configuring a single plugin per Magento deployment. Remember that you can sometimes operate multiple stores under one Magento deployment.
Let me know if you are interested in custom designed cloudsourcing, performance testing, or optimization of your application for more elastic scale and geographic efficiency.



