第1页
一个人的DevOps
ffme的从0到1
第2页
关于我
● Golang, Python, Ruby, PHP ● Linux服务器管理 > 10年 ● 私募基金经理,程序化交易系统,
Research平台 ● @yinhm ● https://github.com/yinhm
第3页
演讲内容
● 是运维 Operations ● 更是开发 Development ● 是ffme从 0 到 1 的故事 ● 是一个人的 DevOps ● 是一群人的寂寞……
第5页
ffme背景
● FriendFeed关站还有一个月…… ● 我是最后一小撮死守的用户之一 ● A FriendFeed Clone ● 开源: https://github.com/yinhm/friendfeed ● 着手迁移到关站只有4个星期不到 ● 一个人的Dev
第6页
二十天上线
第7页
不可能的任务?
第8页
怎么破
● 尽快上线,持续更新 ● 用够敏捷的语言 ● 借力各种开源库 ● 云服务器,云存储 ● 一开始就面向服务
第9页
Dev不停 Ops不止
第10页
可一天十次……部署
第11页
一个人的开发 Dev
第12页
Go
第13页
为什么是Golang
● 开发简单!
o 利器,够工程化 o 第三方库充足:db, rpc, protobuf, cloud(storage)
● 部署简单!
o 单个文件(Single binary) o go-bindata打包各种资源文件
● 性能够用! ● 唯快不破!
第14页
Rocksdb数据库
● 内嵌 k-v 数据库 ● 演化自 leveldb,特性更丰满 ● 速度非常快 ● RAM is the new disk! ● 大内存,SSD优化 ● 磁盘空间占用合理(1/10 mongodb?) ● Facebook 出品 ● 内嵌带来的部署优势
第15页
RPC
● Google的gRPC库 ● 基于 http/2,Bidirectional Streaming ● 可能是最好的RPC库 ● Proto Buffer作为程序接口定义语言 ● 数据直接protobuf3序列化存储到 RocksDB ● 纯 Go 实现grpc-go,具有部署上优势
第16页
服务化
● 一开始就服务化:server, client, webserver ● Cloud有的自己就不要做:gcs(S3/七牛) ● 浑然天成:
o 数据同步自FriendFeed接口 o 同IP连接过多会被ban掉 o 同步采集数据的client必须分布到多台机器
● 部署上难度实际是增加了 ● 好处是可以分开独立部署
第17页
一个人的部署Ops
第18页
一个人的部署Ops
● 尽量减小部署压力,专注开发 ● 代码托管到 Github ● 开始就考虑部署:操作系统、开发环境、语
言选择、存储、框架 ● 借力云:Google Cloud Engine、Storage ● 一个人就用 Fabric,自动化部署利器 ● 快速迭代,一天十次部署
第19页
服务器和开发机环境一致
No time for mistakes
第20页
Fabric自动化部署
No time for mistakes
第21页
Fabric
● 部署就是写 Python 代码,No magic ● 内建支持:ssh, env, sudo ● 服务器构建过程管理起来:
o fab production bootstrap
● 服务器配置文件管理起来:如nginx配置 ● 项目配置文件管理起来:
o fab production deploy o upstart scripts o 甚至是 crontab
● 幂等
第22页
fabric task example
@task def bootstrap():
sudo("apt-get update") sudo("apt-get -y install git-core") sudo("apt-get -y install tmux")
$fab production bootstrap
第23页
fabric task example
@task def deploy():
... upload_template(template, '/etc/init/ffme.conf',
context=context, backup=False, use_sudo=True)
if not exists(code_root): run('git clone %s %s' % (env.repository, code_root))
... sudo("start ffme")
$fab production deploy
第24页
未来?
● 借助云:构造统一 Image ● 通过docker统一环境 ● 监控还没有 ● ffme项目用了很新很酷的技术:
Go/RocksDB/gRPC/protobuf3/React ● 欢迎一起完善: github.com/yinhm/friendfeed
第25页
Thanks & QA