Adrienne Wicklund

Adrienne Wicklund

Account Consultant

Hours

9AM - 5PM
Mon - Fri

I'm here to answer your questions.

Let me know if you need any help.

CLICK HERE TO CHAT No thanks
(866) 817-2811
200 Gbps+ BGP Network
7,903% 3-yr growth
Two time Inc. 500
2010 Inc. 500: 58
2011 Inc. 500: 25
100% Uptime Guarantee
9,000+ Servers

Singlehop Blog

SingleHop and the EFF Team Up!

If you saw our website on Internet Blackout Day or read Sam Bowling’s excellent blog post on SOPA/PIPA, you know that Singlehop is not afraid to take a public stance to protect the Internet. We love what we do, we’d like to continue doing it, and this is impossible without an Internet where we can all find each other — something SOPA/PIPA would compromise.

Actually, we frequently do stuff to make the world a better place. We donate to local charities and support awesome organizations. But we love it most of all when what we do and what the world needs from us overlap.

Recently, we loaned some of our awesome hardware to the EFF to help with their SSL Observatory project. This was a perfect match for us, because we could support a great cause which is important to us, and do that by doing what we’re best at — providing blazing fast servers and an excellent network. Running on Singlehop hardware, the observatory will scan the entire Internet and gather data on every website that’s protected by SSL security, looking for vulnerabilities or fake certificates. The EFF will be publishing all of the data gathered and, if there are any problems, will alert website operators and certificate vendors to get those problems fixed.

SSL is a vital technology which secures everything from your e-mail to your credit card numbers — without it, our business, and the businesses of many of our customers, would not be possible. We are happy to help keep the technology secure. We think that the results of this scan will be important news — don’t be surprised if you hear about Singlehop on your favorite tech news site in the next few months.

Support the EFF!


The Value of Virtualization

 

You’re probably familiar with many arguments for virtualizing your systems. Virtualization can make your systems more secure, by reducing the number of applications and users on a single machine. It can make it easier to scale, utilizes your resources more efficiently, reduces costs, is faster to set up, and shields you from hardware failures, providing you with better uptime. VMs have another advantages over conventional servers, though, which is less commonly listed but still pretty important: they’re automatically instrumented.

Let me explain what I mean. Lets say you’re having some problems running your website on a traditional server. Your traffic has gone up, and now you are having outages during peak times. You speak to your tech support staff, and the admins agree that there’s a problem — but they’re not exactly sure what the cause is.

Usually at this point, the admins will start ‘keeping an eye’ on the system in question. This often means being logged in and running top or vmstats. If the problem recurs, hopefully the admins will catch it, and the output from the monitoring software will give them hints as to what went wrong. If the admin is not around when the problem happens, though, they might not get the data they need, and then the process will have to start all over again.

Another solution is to start monitoring the server using a monitoring program like Cacti or Ganglia. This is a little more reliable than manual monitoring because the software won’t get bored or distracted and miss the fault event. But monitoring software has its own problems. It is often a hassle to setup. It requires punching holes in your firewall, making your server less secure. It takes up resources on an already precarious machine, possibly making downtime more likely. And if the problem affects the network, the remote monitoring machine might not be able to communicate with the trouble server to get any useful data at the exact time when the data is needed.

This is where virtualization comes to the rescue. The hypervisor — the software which makes virtualization possible — already has a lot of statistics about the virtual machine. Our Cascade cloud platform automatically gathers such statistics for every VM, storing the data in approximately five-minute increments in our own internal logging database. The data gathering happens in the context of the node, not the VM, meaning that the VM will not see a performance impact from the monitoring. Also, the fact that every VM is already monitored means that if a fault occurs, you won’t have to wait for a second fault to figure out what went wrong. The data to analyze the original fault might already be there.

Let me give you a concrete example. Just today, we had a problem with a customer’s VM; his PHP site went offline and the VM required a reboot to bring the site back online. The admins had a hunch that the VM was overloaded and couldn’t handle the traffic, but they didn’t know what resource was running low.

Here are some graphs generated by our internal system, Manage, which allowed our admins to get to the bottom of the problem. First, lets start with a graph of network bandwidth for the VM:

 

This graph illustrates the problem precisely. Around 8:50 PM, the VM stopped serving requests, or the amount of data served dropped precipitously. When admins logged in, they saw this in the kernel logs:

Oct 31 20:58:03 vm1 kernel: INFO: task php:41632 blocked for more than 120 seconds.

But why did this happen? Maybe the CPU usage for the VM was too high? Well, we can answer this question using our CPU graphs, which display CPU usage data for both the VM as a whole on its node and for each virtual CPU inside the VM:

Sure enough, the VM is pretty busy. It is making good use of all of its virtual CPUs, and its overall load on its node is often over 100%. However, the VM has 4 VCPUs, which means that if CPU were the limiting resource, the load would be as high as 400%. It looks like each VCPU is only being about 25% utilized. Also, the fault occurred at 8:50 PM, and we don’t see a CPU spike around that time. In fact, CPU usage for some of the virtual CPUs appears to drop around 8:50 — VCPU 0, at least, had nothing much to do during the outage.

So what could be the problem? For an answer, lets turn to yet another batch of data we are able to get from the hypervisor: disk statistics

 

The VM is not a particularly major user of disk IO — mostly steady writes consistent with saving log activity, with a few read spikes which might indicate someone searching through the file system or perhaps a scheduled backup. But here’s something interesting: right around the time the VM experienced its failure, swap file usage skyrocketed. Now we know exactly why the VM failed: it ran out of memory, and swap was too slow to fulfill the heavy traffic requests the VM demanded.

Getting data like this on a regular, traditional server would have required complex monitoring software, a steady stream of network traffic, a whole another monitoring server and skilled labor to set the whole thing up. On a Cascade VM, you get this kind of data for free, automatically. You won’t see these exact same graphs in LEAP, our customer portal, as these are generated for our internal interfaces only. But the data behind these graphs is also available to LEAP, which will generate much prettier, more usable visualizations, which permit you to easily drill down and explore what’s happening with your virtual machine.

The conclusion to this story is that we increased the amount of memory available to the VM from 4 GB to 8 GB. This required just a quick reboot of the VM, with none of the downtime or stress required for pulling a physical server out of the racks and opening it up. This solved the customer’s problems, with better performance and no outages. So here is yet another way virtualization with Cascade and LEAP makes your life easier.


IaaS & Cloud Technology

SingleHop’s IaaS Cloud: Why Re-invent the Wheel?

Infrastructure as a Service clouds have been a hot topic over the last few years.  Amazon’s EC2, the most well-known example, has become almost a household name, at least in really nerdy households. Why are these clouds so popular? Well, it really comes down to some clever software.

With IaaS, you try to think of the common tasks you’d ask an expensive and overworked systems administrator to do. Then, you write some software that takes care of those tasks and provides the end-user of the computing resources with an interface to that software — a pretty UI, or just some API calls. The end result is that these common operations become faster, cheaper, and more reliable than using human system admins. IaaS software also enables on-demand billing. This is something that’s not really possible with traditional servers, because having a human go and set up your machine adds a high initial transaction cost. When you have software doing this instead, it becomes practical to provision and bill for capacity in short time spans.

This software is the IaaS platform, and everyone who is running an IaaS cloud has one.  This is such a lucrative field that a whole bunch of projects are trying to make one of these platforms. The number of offerings out there is staggering. Amazon’s AWS, which is not open-source, is kind of the gold standard against which all other platforms are measured. Then there’s Eucalyptus, which is an open implementation of AWS, and Nebula, and is used in scientific computing clouds. There’s OpenStack, which aims to be an off-the-shelf platform for datacenter operators. Redhat has CloudForms, Xen has Citrix Project Olympus, VMWare has vCloud, Microsoft has … well, I don’t know, but probably something that involves the word ‘hyper’.

Here at SingleHop, I’ve been heading up the effort to develop our own IaaS platform, which we call Cascade. You might wonder, if all of these different IaaS platforms are already out there, and if they all do pretty much the same thing, why did we develop our own? In a word: integration.

SingleHop was already an industry leader in datacenter automation before we launched Cascade. We wanted to be able to leverage all our existing automation tools to create our cloud. So, we now deploy cloud nodes using the exact same system that deploys vanilla dedicated servers for our clients, and we keep track of both kinds of servers in the same place. We have a common internal UI for servers and VMs, which makes it easier for the sys admins who answer your support tickets to help you. SingleHop also has very powerful network automation tools, and we’ve been able to leverage those tools to provide the same networking options to VMs as we do to vanilla servers.  This includes dedicated vlans, HSRP for high availability, shared firewall, DDoS protection and IPEnsure for keeping subnets out of spam RBLs.

Finally, at the highest levels of integration, we’ve been able to create the LEAP3 solutions center. This system, which allows you to create solutions using a mix of dedicated and virtualized resources, is only possible because of the tight integration inside SingleHop.

Of course, we recognize some of the drawbacks in creating a proprietary system, too. Our platform is not open-source, and it would make no sense to open-source it given how tied into our own setup it is. This means that we’re the only ones making changes to it; but we already do a great job supporting almost any operation you’d like to perform on your cloud or VM, including some that nobody else supports (like flexible disk resizing.)  Also, our new Dropzone API, while powerful, is proprietary to Cascade, which is a barrier to entry. But we’re committed to releasing industry-standard API bindings to our Cloud, including AWS and OpenStack, so this problem will be going away shortly.

We did a lot of hard work in creating our IaaS platform. But we think that work was justified in light of the benefits our platform confers on you, the customer.  I’m excited about what we’ve accomplished, and I hope it meets your needs for a dedicated, hybrid, or virtualized computing environment.

 

 


Evaluating Cascade Performance, Part I: CPU and RAM

It has been more than three months since we launched Cascade, SingleHop’s IaaS cloud platform.
The reliability and durability of the platform has come a long way since then.
As a result, I’ve had more time recently to focus on optimizing the performance of the virtual machines (VMs) running in the cloud.

For most applications, performance depends on three variables:

-Raw CPU and memory

-Network throughput and latency

-Storage throughput and IOPS

In this first post of a three-part series, I’m going to cover the first of these — raw CPU and memory performance.
I’m going to discuss testing methodology and then show you some benchmarks.
In subsequent posts, I’m going to cover network and storage/disk performance.

How to measure CPU performance

CPU is probably the easiest system attribute to benchmark.
All you need is a simple, self-contained number-crunching task to keep the CPU busy.
For this test, I used the cpu benchmarking mode of SysBench.
This test computes prime numbers up to a specific size.
SysBench has the advantage of being in the Debian repositories, so you can easily reproduce it on your own Debian machine without downloading, compiling or installing any additional software.

The main metric here is the time it takes to complete the test.
The less time it takes to compute the prime numbers, the better the performance of the CPU.

Comparing Node Performance to VM performance

Our goal is to ascertain whether and how much overhead the hypervisor, in our case KVM, has on the CPU performance of VMs.
To do this, I compared the CPU performance results directly on the node with the results from a VM running on the same node.

Setup

All of the tests for this and subsequent posts are done on a fairly standard, mid-range X3360 server.

  • Intel(R) Xeon(R) CPU X3360 4 cores @ 2.83GHz each
  • Super Micro X7SBL-LN2 motherboard
  • 8192 MB DDR2 RAM
  • 64-bit Debian Linux running kernel 2.6.38

The VM used in this section has the following properties:

  • qemu-kvm-0.14.0
  • 8192 MB Assigned RAM, 4 vCPUs (-m 8192 -smp 4,sockets=1,cores=4,threads=1)
  • 64-bit Debian Linux running kernel 2.6.32-5

I ran all the tests using the following command line:

sysbench --test=cpu --cpu-max-prime=50000 --num-threads=N run

There are four cores on this CPU, which to linux appear to just be four separate CPUs.
In Cascade, we always create VMs with as many CPUs as the node appears to have, so the VMs will also appear to have four separate CPUs.
By varying N, the number of threads started by sysbench, we can test the performance of all the cores in parallel.
By starting more than four threads, we can see the effects of CPU contention.

Results

1 Thread 2 Threads 4 Threads 6 Threads
Setup Total Time (s) Percentile Total Time (s) Percentile Total Time (s) Percentile
Node, single-user mode 85.3706 1.00 42.6902 1.00 21.3610 1.00 21.3474 1.00
Node, normal bootup 85.3440 1.00 42.6977 0.999 21.4187 0.997 21.3956 0.997
VM, single-user mode 85.6905 .996 42.8638 .996 21.6127 .988 21.5839 .989
VM, normal bootup 85.7055 .996 42.8538 .996 21.6071 .987 21.5850 .989

As you can see, KVM imposes virtually no overhead on purely CPU-bound tasks.

Impact of CPU Priority Setting

We provide a simple parameter to let you control the CPU priority of VMs.
This parameter is called “CPU Priority”, and it is, roughly, a proportional allocation setting.
A VM with a priority value twice as high as another VM should recieve twice as much CPU time.
I wanted to verify that this setting works as expected.

Setup

For this test, I wanted to verify that the control works as expected.
I created two VMs — pr100.singlehop.net, with priority set to 100, and pr50.singlehop.net, with priority set to 50.
Each VM had 3 GB of RAM assigned.
On each vm, I created a file called ~/test.sh containing the following:

#!/bin/bash
sysbench --test=cpu --cpu-max-prime=50000 --num-threads=N run >> /root/tests/priority.results 2>&1

I then started the CPU test on the two VMs simultaneously.
I did this by making sure the clocks of the VMs were synced up to the same NTP server, and then using the at daemon like so:

at 18:00 -f ~/test.sh

I varied N, the number of threads, from run to run to get the results below.

Results

pr100.singlehop.net Time (s) pr50.singlehop.net Time (s) Ratio of pr100 to pr50
1 Thread 85.9227 85.7653 1.00
4 Thread 32.9604 43.5084 .756
6 Thread 32.3740 43.1772 .750

You can see, the priority setting works exactly as expected.
With a single thread in each VM, there is no CPU contention, and so both VMs finish at the same time.
With four threads in each VM, pr100 initially gets twice the CPU time of pr50, and so finishes first.
After pr100 is done, pr50 still has half of the test to go, but the second half goes twice as fast since there is no longer any CPU contention.
It thus takes pr50 25% more time to run the test.

With 6 threads, the situation is identical.
This further indicates that CPU contention inside the VM is handled efficiently by the hypervisor.

Memory Performance

The other core component of the system we might wish to test is the memory.
The question is, “Is there overhead or performance penality to using memory from inside a VM compared to using it directly on the system?”
We can answer this question using sysbench’s memory testing mode, which simply reads or writes the specified amount of data to RAM.

Here, too, we might want to try using multiple threads.
Sysbench splits the total amount of data to be read/written between the threads and attempts to execute it in parallel.

Setup

The setup for this test was the same as for the CPU test, with a single running VM with all the node’s memory assigned.
I ran the test using the following commands:

sysbench --test=memory --memory-total-size=150GB --memory-scope=local --num-threads=N --memory-oper=X run

The value for X is one of the two operation modes — READ or WRITE — and I tried each of them.
I varied the number of threads, N, to see what effect this has.

Results

READ WRITE
1 Thread 4 Threads 12 Threads 1 Thread 4 Threads 12 Threads
Setup Bandwidth (MB/sec) Time (s) Percentage Bandwidth (MB/sec) Time (s) Percentage Bandwidth (MB/sec) Time (s) Percentage Bandwidth (MB/sec) Time (s) Percentage Bandwidth (MB/sec) Time (s) Percentage Bandwidth (MB/sec) Time (s) Percentage
Node, single-user mode 3107.59 49.4274 1.00 1497.71 102.5563 1.00 1341.90 114.4644 1.00 2321.50 66.1642 1.00 1412.96 108.7083 1.00 1331.96 115.3192 1.00
Node, normal bootup 3080.58 49.8607 .991 1418.44 108.2880 .947 1334.18 115.1265 .994 2318.60 66.2469 .999 1406.69 109.1923 .996 1181.07 130.0510 .887
VM, normal bootup 1179.12 130.2671 .379 1258.69 122.0312 .840 1224.09 125.4806 .912 1045.70 146.8874 .450 1233.83 124.4908 .873 1261.16 121.7928 .947

Here, we see the first signs that running a VM might impose some performance overhead.
The memory bandwidth for a single-threaded VM task is about on-par with what a multi-threaded task gets on the node.
This result is difficult to explain without going into a lot of details about the Linux memory subsystem.

Performance looks much better when comparing multi-threaded performance between the node and the VM.
There is only about a 10% penalty with 4 threads, and performance on the VM looks better than performance from the node at 12 threads.
This is because the error in the measurements is beginning to overwhelm the resolution of this test.

There is almost no real-world application which has a single thread trying to monopolize memory access.
In a busy webserver or DB machine, hundreds of threads are competing for memory access at all times.
The performance overhead from KVM appears exactly like a few extra threads in the fray — significant if there is only one thread of real work, but irrelevant in real-world applications.

Conclusion

As the numbers above demonstrate, in the raw memory/CPU space KVM has almost no overhead.
Moreover, the system we’ve set up to throttle CPU between VMs functions effectively.

Things will become less clear-cut in the next two instalments of this series, on network and disk performance.
Until then, rest assured that if you want your cloud to do a lot of number-crunching, you can’t do much better than Cascade.


Uptime Nostalgia

When I first started here at SingleHop, over two years ago, one of my first tasks was to overhaul our aging DNS system. We had been creaking along using zone files, but their number was quickly growing out of control. Also, we rely heavily on automation here, and using scripts to automatically edit files can be quite error-prone.

So, back in April of 2008, we migrated to BIND-DLZ and moved all of our DNS records into MySQL databases. I released a DNS zone parsing script you can use to do the same thing in May.

This system has been incredibly stable. After a few initial kinks, we haven’t even had to think about our authoritative DNS servers at all. During our recent internal DB overhaul, however, we discovered that the version of MySQL hosting the DNS records was too old, and it couldn’t be updated because our DNS servers were still running CentOS 4.8. We were gonna have to migrate to an entirely new operating system, and to do that with the least downtime required setting up new servers.

Today, we finished setting up the new DNS servers and switching our infrastructure over to using them. When it came time to decommission our old nameservers, I decided to see just how long they had been running:

[root@ns1 ~]# uptime
16:55:01 up 593 days, 03:12, 2 users, load average: 0.11, 0.06, 0.04
---
[root@ns2 ~]# uptime
16:53:45 up 626 days, 10:40, 3 users, load average: 0.10, 0.08, 0.09

Like many unix nerds, I tend to get obsessed with uptime. For instance, my own personal server has been up for 99 days, and even my laptop hasn’t rebooted in over a month. So it was not without a heavy heart that I destroyed the epic 626-day uptime on ns2 when I shut it down today.

These long-running servers got me to thinking: how many of our other internal servers have been running for a really long time? It turns out, having servers that run for years isn’t unusual here at SingleHop. For instance, here is the uptime from our Quick Reaction monitoring server: 20:50:11 up 578 days, 1:30, 2 users, load average: 1.06, 1.25, 1.36; our customer database server: 20:33:42 up 647 days, 17:35, 1 user, load average: 0.29, 0.53, 0.63; the singlehop.com web server: 20:53:00 up 317 days, 12:40, 4 users, load average: 0.05, 0.07, 0.07.

However, the champion among all the servers I checked today is one of our oldest backup servers:

backup02:~# uptime
 20:44:48 up 899 days,  6:41,  1 user,  load average: 0.05, 0.02, 0.07

Considering that SingleHop is not even three years old, a two-and-a-half-year uptime is pretty impressive indeed.

All of this is possible thanks to the magic of Linux. Software updates happen automatically, and the computer does not need to be rebooted to take advantage of them — only the affected applications need be restarted. And, thanks to our KSplice service, we don’t even have to reboot our servers to do kernel updates! We can just keep our infrastructure humming without a care, for years at a time!

So, what’s YOUR longest-running server? Share your story on SingleHop’s community forum: http://community.singlehop.com/general-discussion-introduce-yourself/403-what-your-longest-running-server-we-just-reluctantly-rebooted-899-one.html#post2409


Help is out there!

I work on the Internet. This means both that I help to construct a small (but rapidly growing!) portion of the Internet through the sale of dedicated servers, and also that the Internet is, literally, my office. As amazing as our Chicago office is, I don’t actually spend a whole lot of time there.

The Internet is an amazing place to work. Some people (like, say, your plumber) have almost no resources to help them with their job — if they have no idea how to stop that leak, they just have to figure it out themselves. This is why you may sometimes end up with a badly-flooded kitchen. Others have a small pool of officemates or coworkers who can help them out when they get stuck. But working online is like having a billion buddies whom I can ask for help whenever I’m unsure about something. And, since SingleHop has only two developers (me and Luke) I end up working on such a broad range of fields that I’m frequently stuck.

Of course, asking for help on the Internet can be a dicey proposition. Sure, back in the glory days of the internet, your question might be getting answered by someone who knows what he’s talking about. But these days, googling for help might land you on a poorly-formatted, pop-up-opening, long-dead spam ring where you’ll be tricked into clicking on ads and won’t come any closer to getting your question answered.

But it doesn’t have to be this way. I’d like to tell you about an amazing tool I’ve recently become a fan of for resolving my technical questions. This tool is StackOverflow. You post a question and, within minutes, someone responds trying to help you out. The best part about SO is it’s reputation system. You can tell at a glance whether the person answering your question has been judged qualified by other users, and thus how much faith to put in their answer. And the reputation system is addictive! Because you get badges and additional moderation powers the higher your reputation, I’ve frequently found myself answering questions and then compulsively reloading my profile to see if my peers have judged my answer worthy of an upvote.

If you’re not a developer, there’s hope for you, too. A sister site called ServerFault will help you with your system administration questions. You’ll miss out on talking to our excellent admin staff, but it’s a great way to learn more about maintaining your own systems. There’s even a site specifically for your desktop-support-type questions — SuperUser.

I think these sites will greatly improve your quality of life, your code, and maybe even your business, marriage, or dog’s behavior. But, I’m not just telling you about them for your own good. The network effect dictates that the more people ask questions and post answers on these services, the better they become. So, go check it out. That way, we’ll both benefit.


IPensure for Spam Control

If there is one thing every internet user agrees on, it has to be this: SPAM sucks. We have come a long way in the past few years – we now have sophisticated spam blocking software, authentication technologies like SPF, even hardware spam filters like the Mail Foundry we use here at SingleHop to provide spam filtering services for our client’s mail servers.

One method of keeping SPAM under control on the internet is to keep track of SPAM recieved and then prohibit the author of the SPAM to send further mail to your system. This method, called a blacklist, sounds simple in theory but has a number of non-trivial implementations in practice. Blacklisting an address might work for a short time, but addresses are easy to come by, and domains only slightly more difficult to obtain. The next step would be to blacklist the IP address the SPAM originated from. Since there is a limited number of IP addresses, and their allocation is managed rather tightly, banning an address from ever sending mail to your system is actually a pretty good way to keep up your signal-to-noise ratio.

If you decided to keep your own blacklist of addresses, it might take you awhile to get wise to the spammer hosts online. Luckily, there are existing systems to publish lists of offending addresses and make it easy for mail software to reject mail from those addresses. For instance, the DNSBL system, invented by Paul Vixie (of vixie-cron fame) as part of his MAPS system, allows mail servers to look up offending addresses using the DNS system. If you are a large email provider like Hotmail and Outblaze, you could quickly build your own lists of spammers, and in fact these providers maintain their own internal blacklists.

All of this infrastructure sounds great for end users trying to keep their inbox clear. But it is a huge bother for service providers like us. Like most hosting companies and dedicated server providers, our terms of service and spam policy prohibit sending spam. But occasionally, clients use their machines to send unsolicited mail anyway, or host their ‘spamvertised’ websites with us. Occasionally, also, client’s machines are hacked and used to send SPAM. As a result of the SPAM originating from our network, portions of our IP Address space are sometimes placed on blacklists. If we are lucky, only the addresses used to send spam are blacklisted. Often, the entire customer subnet is blocked. In particularly egregious instances, entire class C subnets have been blacklisted!

This is a potential problem for you, our clients. When you buy IP addresses from us, you don’t want to find out that huge segments of the internet won’t accept mail from you! And we don’t want that either – our job is to make your server with us can do all the tasks you require of it.

As a result, we have spent, and continue to spend, a lot of man-hours dealing with blacklistings of our IP space. We are in constant communication with well-known DNSBL providers like Spamhaus and email providers like Outblaze, removing blacklistings, improving our policies and keeping our networks clean. Recently, however, I have created software tools which make the job more manageable for us and more reliable for you. Here are some of the things we now do to ensure you can send your email:

* Automated tools now check every subnet before it is assigned to a client to make sure it’s not blacklisted.

* Spam complaints from services like Spamcop are automatically processed and forwarded to your account executive, ensuring we know about spam problems instantly and can deal with them right away.

* Many mail servers require that reverse DNS information be correct before they accept mail from you – we set this information automatically!

* Without valid whois information, individual customer subnets cannot be identified and so entire Class C networks are sometimes blacklisted. We set your whois information automatically, so you will never be affected by other problems on your Class C subnet

These new tools have enabled us to be proactive in keeping our networks clean. Other providers wait until you’ve complained to them about mail delivery problems to take action. We have already cleaned up your subnet before you even began using it! So go ahead, run your own mail server with us. We promise, we’ve made it easy for you.


Hot Off The (Development) Press!

Hello World!

This is the first post from the development team here at SingleHop. Luke, my co-developer, and I tend to stay pretty busy writing code, and when we do get a moment to talk to our co-workers we are so busy raving about javascript errors and mySQL queries that nobody really knows, or cares, what we’re talking about. This post will be in a similar vein – prepare to be nerded at!

We here at SingleHop owe much to the open-source movement. Like many of our clients, we use Linux on our administrative machines, and we run open-source software like MySQL and Apache on those machines. So, it makes us feel good to be able to give back to the open-source community.

We help out in small ways, of course, by submitting bug reports and participating in online development discussions. Unfortunately, however, most of the development around here is pretty specific to our operation, allowing our sales and technical staff keep better track of our thousands of servers, switches, clients, IP addresses and sticks of ram. This code is heavily customized and not really interesting as an open-source project. Every once in awhile, though, we do create a tool that seems generally useful, and when we do we’ll put it up here to make it available to the general public.

As you can imagine, we have a lot of DNS zones around here, us being a hosting company and all. We use industry-standard DNS server BIND to serve these DNS zones to the outside world. However, it was becoming quite a chore for us to keep track of all our zone files, and even more difficult to automate operations that require manipulating those files.

To solve our DNS problems, we decided to migrate to BIND DLZ, a patch to standard BIND which allows zones to be hosted in an SQL database. We wrote a nifty user interface to the database, and we set up the infrastructure which will, one day soon, allow our clients to manage their own reverse DNS entries or even host their zones on our servers.

However, when we finished setting up and testing this new system, we ran into a little snafu. There did not seem to be a readily available tool to migrate our existing zone files to our SQL database. After scouring the internet for such a tool, I decided to write one, which is available here for you if you are faced with a similar task:


DNS Parser Script
Creative Commons License.

This script is written in Python and operates as a finite-state automaton. We have successfully used it to migrate hundreds of zones, both normal and reverse. It spits out SQL statements in a format suitable for our own database layout, which hews pretty closely to the layout recommended by the DLZ website. Some customization may be required if you’re using it for your own DLZ database, but thanks to the beauty of Python, even someone who has never used the language before can probably find their way around the code.

This tool is being released under Creative Commons Attribution 3.0 license. Do what you want with it, give SingleHop credit, and, of course, use at your own risk. Or better yet, hire our management staff and let us take care of the rest!


Archives