福满星城技术简介

开发&部署

应用简介

一个优惠券发放平台,包含资讯,优惠券秒杀和使用等功能


https://play.google.com/store/apps/details?id=com.sportexp.fortune


https://itunes.apple.com/us/app/fu-man-xing-cheng/id741879965?mt=8

后台功能

  1. 商户管理,包含店铺管理
  2. 用户管理
  3. 资讯管理
  4. 优惠券管理
  5. 优惠券记录管理,包含兑奖,导出等功能

访问统计

 zcat fmxc.tyt.com.access.log.2.gz  | grep api | grep "09/Jan/2014:20:00"  | goaccess
一分钟总访问量: 8227
平均每秒钟: 137


 ./ab -p postfile.data -T 'application/x-www-form-urlencoded' -n 100000 -c 1000 http://fmxc.tyt.com/api/user_coupons/ticket
Requests per second:    977.08 [#/sec] (mean)
Time per request:       1023.462 [ms] (mean)
Time per request:       1.023 [ms] (mean, across all concurrent requests)

开发相关技术


  • Ruby
  • Rails
  • Rspec
  • Mysql & Redis
  • Git

代码行数统计

+----------------------+-------+-------+---------+---------+-----+-------+
| Name | Lines | LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers | 1375 | 1037 | 23 | 146 | 6 | 5 |
| Helpers | 43 | 40 | 0 | 3 | 0 | 11 |
| Models | 836 | 646 | 24 | 67 | 2 | 7 |
| Mailers | 0 | 0 | 0 | 0 | 0 | 0 |
| Javascripts | 221 | 139 | 1 | 32 | 32 | 2 |
| Libraries | 0 | 0 | 0 | 0 | 0 | 0 |
| Controller specs | 35 | 28 | 0 | 0 | 0 | 0 |
| Model specs | 392 | 307 | 0 | 0 | 0 | 0 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total | 2902 | 2197 | 48 | 248 | 5 | 6 |
+----------------------+-------+-------+---------+---------+-----+-------+
Code LOC: 1862 Test LOC: 335 Code to Test Ratio: 1:0.2

LOC (Lines Of Code => program lines)


展示

  • 页面功能列表
  • 商家管理的CRUD代码
  • jbuilder partial
  • gem:  geokit, ransack等

Rspec

一个单元测试框架,选择它的原型是在非Rails的普通Ruby项目也可以很方便的使用


测试的覆盖率很低,只写了抢票相关业务的单元测试.


  • 修改代码运行测试后可以放心的上线
  • 减少重复工作,不用每次都手动测试
  • 多人协作时,方便他人修改代码

MYSQL & REDIS

选择Mysql的原理是因为它开源免费资料多,其实也想试试PostgreSQL


选择Redis因为抢票并发比较高,用Mysql实现有一定复杂度,而Redis是单线程,可以很简单的实现业务并保证数据的正确性.

Redis Hash

Redis的Hash数据结构和Java的Map接口一样,是键值对存储形式.


redis> HSET myhash field 5
(integer) 1
redis> HINCRBY myhash field 1
(integer) 6
redis> HINCRBY myhash field -1
(integer) 5
redis> HINCRBY myhash field -10
(integer) -5


部署相关技术


  • Linux
  • Ansible & Mina
  • Nginx & Puma
  • God
  • Backup

Linux

使用Ubuntu发行版本,编译依赖库相对Centos要新


就编译ruby各种依赖库来说,linux下应该是最容易的

相对Windows,某些任务能够更加简单的实现自动化


Ansible & Mina

Ansible 自动化系统部署工具,把一些常见的任务封装成模块,而不用写复杂的脚本.

  • 添加用户
  • 安装软件
  • 修改文件并自动备份


Mina 自动化应用部署工作

  • 通过ssh自动执行命令
  • 保存历史部署版本
  • 支持从git repos拿最新代码

NginX & PUMA

Nginx 轻量级HTTP服务器,占用内存小.

Puma 多线程的Ruby应用服务器

God

一个易配置,易扩展的服务进程监控软件


写Linux shell太难了,不同的发行版本开机服务语法规则还不同.用God可以很简单的写出跨发行版本的开机自启动服务

Backup

备份你的数据库,文件,并支持压缩,加密,分割,上传


数据库支持: Mysql, PostgreSQL, Redis, MongoDB等

上传支持:  ftp,sftp,scp, rsync,dropbox,local等



相关链接

  • https://github.com/nadarei/mina
  • https://github.com/meskyanichi/backup
  • http://godrb.com/

福满星城技术简介-精简版

By cxh116

福满星城技术简介-精简版

  • 1,879