About 6 years ago (feels like an eternity in Rails world) working
at Scribd I’ve started working on porting our codebase from some
old version or Rails to a slightly newer one. That’s when I
realized, that there wasn’t a ruby gem to help us manage MySQL
connections for our vertically sharded databases (different
models on different servers). I’ve started hacking on some code
to replace whatever we were using back then, finished the first
version of the migration branch and then decided to open the code
for other people to use. That’s how the DbCharmer ruby gem was
born.

For the next few years a lot of new functionality we needed has
been added to the gem, making it more complex and immensely more
powerful. I’ve enjoyed working on it, developing those features,
contributing to the community. But then I left Scribd, stopped
being a user of DbCharmer and the situation drastically changed.
For quite some time (years) I would keep …

As a leader of a technical operations team I often have to work
on technical operations engineer hiring. This process involves a
lot of interviews with candidates and during those interviews
along with many challenging practical questions I really love to
ask questions like “What are the most important resources you
think an Operations Engineer should follow?”, “What books in your
opinion are must-read for a techops engineer?” or “Who are your
personal heroes in IT community?”. Those questions often give me
a lot of information about candidates, their experience, who they
are looking up to in the community, what they are interested in,
and if they are actively working on improving their professional
level.

Recently, one of the candidates asked me to share my lists with
him and I thought this information could be valuable to other
people so I have decided to share it here on my blog.

Scalexis Inc,
web performance/scalability consulting firm in Toronto, is
looking for a full-time consultant. Being a consulting company on
the high-demand market of web application scalability consulting
and high-performance web applications development, we need an
employee that could perform both web application development and
web application performance consulting work.

The main duty of the employee would be to work directly with the
customers’ operations teams to detect, analyze and fix
performance problems and plan application scalability in
accordance with customers’ needs/requests.

The employee would work in a small team of highly professional
consultants helping the company to handle growing demand for web
applications performance consulting services.

This week, after 3 months in the works, we’ve finally released
version 1.7.0 of DbCharmer ruby gem – Rails plugin that
significantly extends ActiveRecord’s ability to work with
multiple databases and/or database servers by adding features
like multiple databases support, master/slave topologies support,
sharding, etc.

New features in this release:

Rails 3.0 support. We’ve worked really hard to
bring all the features we supported in Rails 2.X to the new
version of Rails and now I’m proud that we’ve implemented them
all and the implementation looks much cleaner and more
universal (all kinds of relations in rails 3 work in exactly
the same way and we do not need to implement connection
switching for all kinds of weird corner-cases in ActiveRecord).

Having a reverse-proxy web cache as one of the major
infrastructure elements brings many benefits for large web
applications: it reduces your application servers load, reduces
average response times on your site, etc. But there is one
problem every developer experiences when works with such a cache
– cached content invalidation.

It is a complex problem that usually consists of two smaller
ones: individual cache elements invalidation (you need
to keep an eye on your data changes and invalidate cached pages
when related data changes) and full cache purges
(sometimes your site layout or page templates change and you need
to purge all the cached pages to make sure users will get new
visual elements of layout changes). In this post I’d like to look
at a few techniques we use at …

Back in November 2009 I was working on a project to port Scribd.com code base
to Rails 2.2 and noticed that some old plugins we were using in
2.1 were abandoned by their authors. Some of them were just
removed from the code base, but one needed a replacement – that
was an old plugin called acts_as_readonlyable that helped us to
distribute our queries among a cluster of MySQL slaves. There
were some alternatives but we didn’t like them for one or another
reasons so we’ve decided to go with creating our own ActiveRecord
plugin, that would help us scale our databases out. That’s the
story behind the first release of DbCharmer.

As we can see, it consists of a document-specific part
(/doc/1) and a non-unique human-readable slug
part (/Improved-Statistical-Test). When a user
comes to the site with a wrong slug in the document URL, we need
to make sure we send the user to the correct …

Long time ago, in 2002 I decided to create my own point of
presence in the Internet. Back then I’ve got pretty nice domain
(scoundrel.kremenchug.net), hacked up a few
pages on php, added a guestbook and that was it. Many years it
was almost static and I did a few updates on my resume page few
times a year. Later I’ve switched the site to wordpress to make
it easier to manage my resume and stuff…

And 3 years ago in March 2006 I’ve decided to start my own blog.
I took a standard template and started the blog on a
separate domain while the domain was on its own domain name… This
spring my …

loops is a small and lightweight framework for
Ruby on Rails and Merb created to support simple background loops
in your application which are usually used to do some background
data processing on your servers (queue workers, batch tasks
processors, etc).

Originally loops plugin was created to make our (Scribd.com) own loops
code more organized. We used to have tens of different modules
with methods that were called with script/runner and then used
with nohup and other not so convenient backgrounding techniques.
When you have such a number of loops/workers to run in background
it becomes a nightmare to manage them on a regular basis
(restarts, code upgrades, status/health checking, etc).

Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion
of Oracle or any other party.