ST使用Markdown Preview插件实现语法高亮和预览

引子

关于文本编辑器,一直热衷于Sublime Text(以下简称ST)。不仅仅因为它清爽的界面,更离不开它强大的插件支持。最近用Octpress搭建个人博客,开始学习Markdown标记语言。理所当然,马上想到用ST完成日常Markdown编写。随便打开一个Markdown文件,发现ST并不支持语法高亮。网上搜了下,找到了Markdown Preview,也就是本文的主角。

Github搭建Octopress博客

引子

一直想要有个个人博客。在学校的时候觉得别人用Wordpress搭了个个人网站,那感觉牛X哄哄啊。工作以来,成了Github粉,偶然机会知道可以用Octopress在Github上面搭建个人博客,还能用命令行写博客,听起来就蠢蠢欲动。心动不如行动,让我们都像写程序一样写博客吧。

Amoeba实现Mysql分库分表功能

引子

当单机数据库无法满足Web应用的高并发需求时,就需要考虑对数据库做集群。目前,数据库集群主要关注点有两个方面:

  • 配置Mysql原生主从复制,进行读写分离;
  • 根据业务关系和数据表规模,进行分库分表。
    对于第一个方面,Mysql主从复制和读写分离方案分析有详细说明,有兴趣的同学可以移步参考。本篇的主角仍然是Amoeba,主要介绍如何使用它完成对Mysql的分库分表操作。

编译安装Percona Server并使用Transfer实现主从数据库同步加速(下)

引子

MySQL的主从同步一直有从库延迟的问题,背景资料网上很多,原因简单描述如下:

  1. MySQL从库上有一个IO线程负责从主库取binlog到写到本地。另外有一个SQL线程负责执行这些本地日志,实现命令重放;

  2. 正常网络状况下IO线程没有性能问题(这个待会会用到),问题是SQL线程只有一个,导致更新速度跟不上。所以经常会看到明明从库的CPU idle很高,但同步性能就是上不去。

Git取消LF will be replaced by CRLF警告

最近使用Octopress进行rake deploy时,控制台一直提示一堆如下警告信息:

The file will have its original line endings in your working directory. warning: LF will be replaced by CRLF in Gemfile.
The file will have its original line endings in your working directory. warning: LF will be replaced by CRLF in Gemfile.lock.
The file will have its original line endings in your working directory. warning: LF will be replaced by CRLF in README.

每次提交都要面对如此多的警告,确实忧伤。

编译安装Percona Server并使用Transfer实现主从数据库同步加速(上)

折腾缘由

今天机缘巧合和同事聊起Mysql主从复制,经他点拨才知道从数据库同步数据居然只是是单线程,当主数据库写入数据量庞大,数据同步延迟将十分明显。显然,这在生产环境中是不被允许的。既然知道主从同步延迟的根源在与单线程,那么思路就来了,采取多线程不就行了么?上网搜了下,追风刀·丁奇一直关注这个问题,并提供Mysql-Transfer作为Mysql原生主从同步延时的解决方案。说干就干,站在巨人的肩膀上。

Mysql主从复制和读写分离方案分析

引子

最近在研究Web服务端负载均衡方面的技术,参考网上资料,总体思路可以分为如下几类:

  • 应用服务器集群,典型的代表就是Nginx+Tomcat实现负载均衡;
  • 数据库集群。

本文主要关注数据库集群。

实现思路

  • 应用层解决方案

通过应用层对数据源做路由来实现读写分离,项目是SpringMVC+myBatis,SQL路由交给Spring,通过AOP或者Annotation由代码显示的控制Datasource。
优点是路由策略的扩展性和可控性较强。
缺点是耦合到Spring;需要加入控制代码。

  • 中间件解决方案

通过mysql中间件做主从集群,Mysql Proxy、Amoeba、Atlas等中间件貌似都能符合需求。
优点是与应用层解耦。
缺点是增加一个服务维护的风险点,性能及稳定性待测试,需要支持代码强制主从和事务。

  • 驱动解决方案

Mysql自带的ReplicationDriver提供主从库访问的驱动,是通过保持多个数据源的链接并根据ReadOnly True/False来选择数据源。相当于应用层解决方案的一个现有实现,扩展性更弱。并且貌似不能使用其他驱动。由于耦合较高暂不考虑。

三种实现思路关键技术

  • 在应用层使用Spring对数据源做路由,关键字:Spring AOP;
  • 增加中间代理层,Amoeba就属于这种情况,此外还有Mysql官方提供的Mysql Proxy;
  • 在驱动层使用Mysql提供的主从库访问驱动,直接与数据库连接驱动耦合,扩展性弱,目前还未做原型尝试。

综合上述分析,考虑到需要与应用层解耦,现采用中间件解决方案,使用Amoeba做SQL路由,实现数据库读写分离。
既然选择使用Amoeba,让我们先了解什么是Amoeba?它能做什么?要怎么做?最后再看看它不能做什么。