Oct 4, 2012

How Amazon SES Mailbox Simulator Makes Your System Better?

Amazon latest feature, Amazon SES Mailbox Simulator, is great!

With this feature you can email to simulator addresses. Each address triggers a specific type of behavior such as: a successful acceptance, hard bounce, "out of office" auto responder or complaints.

Why am I so excited from a feature that actually generates no direct business value to the end user?

At dSero, the Anti AdBlock Creators, we invest a lot in providing a high quality anti AdBlock solution to our clients in no time.
You can do that, only if you totally automate your software development and even more important: your quality processes.

Bottom Line
More automation and better coding enables you providing great product to your users in a better quality and lower cost.

Keep Performing,

Sep 5, 2012

How to Scale WordPress?

WordPress is so easy to install. Just 5 minutes and you have a working site...

But what happens when traffic increases and page-views soar?
That was the main subject of the presentation I had at WP TLV (The Israeli WordPress Community) first event. The event was hosted by Google and organized by dSero: The Anti Ad Block Creators (disclaimer: I'm a major stake holder of this firm).

The answer can be found in the attached presentation:



Bottom Line
WordPress fits small sites and large sites. You just need to make the proper architecture decisions and WordPress will scale to your needs.

Keep Performing,
Moshe Kaplan

Aug 29, 2012

Who takes care of non Sharded tables in Sharding?

The Challenge
As you may remember, Sharding is about splitting a database according to a key. Usually it is according to user id, client id or a phone number.
One of the major questions when we implement Sharding is what to do with data dictionary tables? The data dictionary tables are those tables that include static data that is being used by all shards.

The Options
In general there are two options:

  1. Have a single copy of the data dictionary tables and ask the application to take care of the complex queries.
  2. Have multiple copies of the same table and create a data distribution solution that will update all of these table copies.


Data Dictionary/Static Tables Sharidng Solution

The Elegant Solution
Create a new database that will serve as a master to all shards.
This database will include all data dictionary tables, and will serve as the single write instance for all data dictionary tables.
Once a record will be updated at one of these data dictionary tables, it will instantly be replicated to the all of the shards and will be available.

Bottom Line
Sharding may seem hard, that with simple and elegant solutions you can achieve your own scale-able solution.

Keep Performing,
Moshe Kaplan

Jul 30, 2012

MySQL Optimization and Scheduled Maintenance

Once in a while it is worth to take care of your database and verify it can provide the needed resources for your system.
After all, most of the data may be store in it...


Some Tasks I would Recommend You to Do
Please notice that this work may not be done manually, but can be automated. If you do so, you may be contribute it back to the community at your favorite open source project:

  1. Run MySQLTuner and look for issues.
  2. Take care of fragmented tables:
    1. You can find them using SHOW TABLE STATUS WHERE Data_free > 0\G and take care of them using OPTIMIZE TABLE table_name; 
    2. Or you can use mysqlfragfinder script for that.
  3. Verify RAM, disk and CPU utilization
  4. Check the slow log query
Keep Performing

Jul 24, 2012

What is the Best File System for MySQL?

Well the answer it depends.
Not sure? take a look at this Q&A at ServerFault

Keep Performing,
Moshe Kaplan

Jul 7, 2012

Good News from Amazon AWS for SEO and Newsletter Marketers

Amazon AWS latest announcement of Multiple IP Addresses for Amazon EC2 Instances support is a great news for SEO and Newsletter markers.

Why these are Good News?
Both SEO and Newsletter marketers require large number of dedicated IP addresses:

  1. Google tend to associate websites that are using the same IP address. Therefore, if a single site uses unethical SEO methods, you may want to avoid a ranking damage to other sites. Another reason is that linking methods are considered more effective if they come from external sites.
  2.  Major email suppliers around the world (Google's Gmail, Yahoo!, Yandex and Microsoft Hotmail) limit the number of emails per minute they accept from a single IP. Multiple IP addresses can help newsletter service providers better utilize their existing instances.
Bottom Line
Online services are getting better every time. It's time to utilize them!

Keep Performing,

Mar 14, 2012

How to Setup MySQL Replication in 11 Easy Steps

I've provided a link few weeks ago to a great complete guide for MySQL replication. Yet, since then I got many requests to provide a short and east guide for a new MySQL replication setup.

Well, Fasten Your Seat-belts
  1. Install a MySQL instance that will serve as a Master
  2. Install a MySQL instance that will serve as a Slave
  3. Configure the Master my.cnf file (located at /etc/ at CentOS) with the server id and the log file name: 
    1. [mysqld]
    2. server­-id = 1
    3. log­-bin   = master­-bin.log
  4. Configure the Slave my.cnf with the server id, reply logs and key configuration databases;
    1. server­-id = 2 
    2. relay­-log-­index = slave-­relay-­bin.index
    3. relay­-log = slave­-relay­-bin
    4. replicate-wild-ignore-table=mysql.%
    5. replicate-wild-ignore-table=information_schema.%
    6. replicate-wild-ignore-table=performance_schema.%
  5. For MySQL 5.6: Delete the auto.cnf from your MySQL directory slave> rm -rf /var/lib/mysql/auto.cnf
  6. Restart the MySQL daemons on both servers to apply the my.cnf changes.
  7. If both servers were just installed there is no need to sync their data files (since they  should have the same data files). O/w you should either stop the slave and master and copy the data files using SCP or perform just perform a mysqldump. Notice! Before copying the files, get the Master location describe below.
  8. Get the master location, so we can sync the slave to it:
    1. master> FLUSH TABLES WITH READ LOCK;
    2. master> SHOW MASTER STATUS;
    3. +-------------------+----------+--------------+------------------+
    4. | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    5. +-------------------+----------+--------------+------------------+
    6. | master-bin.000013 |  1233453 |              |                  |
    7. +-------------------+----------+--------------+------------------+
    8. master> UNLOCK TABLES;
  9. Provide the slave with replication permissions:
    1. master> GRANT REPLICATION SLAVE ON *.* to `repl`@`%` IDENTIFIED BY 'slavepass';
    2. master> FLUSH PRIVILEGES;
  10. Setup the slave using the chosen user/password and the master location we found before:
    1. slave> CHANGE MASTER TO
    2.     ->     MASTER_HOST='10.17.16.253',
    3.     ->     MASTER_PORT=3306,
    4.     ->     MASTER_USER='repl',
    5.     ->     MASTER_PASSWORD='slavepass',
    6.     ->     MASTER_LOG_FILE='master-bin.000013',
    7.     ->     MASTER_LOG_POS=1233453;
  11. Now, start the slave and verify it's running: 
    1. slave> start slave;show slave status\G
  12. If everything is Okay, verify the replication really works by:
    1. Creating a table and inserting values to it in the master:
      1. master> CREATE DATABASE a;
      2. master> CREATE TABLE a.b (c int);
      3. master> INSERT INTO a.b (c) VALUES (1);
    2. Verifying that SLAVE/MASTER> SELECT * FROM a.b; return the same values in the master and slave;
    3. Dropping the database in the master: master> DROP DATABASE IF EXISTS a;
P.S If you are interested in implementing the replication using SSL, follow these instructions.

Bottom Line
Only few minutes and you got a running MySQL replication. Even these kind of tasks can be so simple and smooth...  and leaving you time to drink a cup of coffee!

Keep Performing,

ShareThis

Intense Debate Comments

Ratings and Recommendations