Ansible快速入门

在每个公司刚起步的时候,都是先有程序员,当程序写好以后,上线部署都是程序员兼职,于是手动登录机器,敲各种命令,将服务部署起来,只要服务能跑起来就行了。

经过一段时间的运营以后,单机已经无法承载,需要多机部署,线上运行的机器的数量超过3台,手动作业就会带来极大的操作风险,如果长期如此,运营事故一定会接踵而至。

好一点的运维就会把常用的操作固化成脚本来作业,在ansible出现以前,都是 ssh + expect 的组合,ansible的出现给了运维更多发挥的空间。

数据访问架构

数据访问

DAO : 设计的初衷是为了尽快的获取数据,屏蔽SQL为主要目标

  • 表与类的映射
  • 属性与成员的映射
  • SQL与函数的映射

数据访问层: 设计的初衷是为了解决分库分表,屏蔽访问实例为主要目标,中间可以增加cache,上层不需要知道是从DB里面取数据,还是从cache里面取数据

  • web-server层可以通过rpc接口,像调用本地函数一样调用远端的数据
  • 数据服务层,将缓存、分库分表、读写分离这样的复杂性事件放在一起处理

互联网分层架构的本质,是数据的移动

编程语言的选择和对比

有人说php是世界上最好的语言,有人说python是大数据时代最好的语言,有人说C是最经典的语言,有人说java是应用最广泛的语言。

在之前很长一段时间里面,我都认为编程是跟语言无关的,直到最近项目中出现了一系列的问题,于是重新开始审视这个问题。

服务发现consul介绍

常见的服务发现框架

  1. zookeeper
  2. etcd
  3. consul

前面两个框架在docker中的应用比较多,今天主要聊聊consul

轻量级秒杀系统的设计与实现

需求

在秒杀活动中,在指定的时间,只有少量的商品,于是短时间内会有大量的用户进行抢购。

分析

一般来说,被秒杀的商品都是一些稀有的东西,或者打折非常厉害、用来促销的商品,不希望被大量的得到。于是,我们得到最重要的一点就是不能超发,也不能一个人同时刷到两个。

实现

正常情况下客户端也有很多方式去拦截用户的请求,例如用户对一个按钮进行频率限制,点击一次以后灰掉,过x秒以后才允许下一次点击。这部分内容不在今天的讨论范围内。
有兴趣可以去看看litten同学写的文章 ==>反击爬虫,前端工程师的脑洞可以有多大?<==

这里我们只讨论服务层的实现。

elasticsearch 简介

简介

  • 操作系统:centos7
  • 测试版本:5.4.0
  • es + kibana + x-pack

安装

安装过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 先下载java1.8的包,es5.4.0依赖jdk1.8
yum install java-1.8.0-openjdk.x86_64
# 下载es的rpm包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.0.rpm
# 下载kibana的rpm包
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.4.0-x86_64.rpm
# 安装es
rpm -i elasticsearch-5.4.0.rpm
# 安装kibana
rpm -i kibana-5.4.0-x86_64.rpm
# 安装x-pack
/usr/share/elasticsearch/bin/elasticsearch-plugin install x-pack
/usr/share/kibana/bin/kibana-plugin install x-pack
# 启动 es
systemctl start elasticsearch.service
# 启动 kibana
service kibana start

python tornado实战

tornado是一个很牛X的异步网络框架,内置了高性能的web服务器,可以很方便的写很多web服务
不过今天我要用它来实现非web类的网络应用

科普

首先,来了解下tornado的eventloop,在不同系统中,会用不同的方法,epoll(linux)和kqueue(BSD/MacOS),两者都不行的话退回到select模式。
顺便科普下,水平触发和边缘触发。python下默认就是LT模式,但是可以通过指定select.EPOLLET设置成ET模式。