UBER 技术栈

原文

The Uber Engineering Tech Stack, Part I: The Foundation

The Uber Engineering Tech Stack, Part II: The Edge and Beyond

摘要

这两篇文章是uber再2016年发布的关于他们的技术栈,gtt 记录一些要点。

基础设施使用的是混合云的模式,既有公有云也有自建的数据中心。公有云使用 Terraform 管理虚机。

数据库原来只有一个 Postgres,后来使用了 Schemaless (自研的基于MySQL),Cassandra。数据仓库使用 Hadoop。使用 Redis 做缓存,用 Twemproxy 做 redis 集群,用 celery 管理分布式任务。

使用 Storm 和 Spark 将数据分析成业务指标,数据可视化团队研发了很多可复用的可视化组件。日志基于kafka,将数据存档到 Hadoop,同时导了一份到 ELK 做分析,如下图。

应用管理使用 Docker 和 Mesos,用 Aurora 管理常驻内存的服务和cron任务。使用 udeploy 部署应用;使用jenkins做持续集成。用 Packer, Vagrant, Boto 和 Unison 管理虚拟机,用 Clusto 做资产管理,用 puppet 管理系统配置。主要使用的操作系统是 Debian Jessie。

使用 HAProxy 和 Hyperbahn (自研)做SOA的服务发现和路由。长期来看,基于HTTP的接口会转向Thrift 或者 Protobuf 这类RPC协议。

研发使用 Phabricator 做code review,文档,记录bug等。使用 OpenGrok 搜索源代码。

主要编程语言是 Python, Node.js, Go, and Java。刚开始只有 Nodejs 和 python,java 后来主要用在 Hadoop 生态中,Go 用在对性能有要求的场景中,Go 现在用的越来越多。

使用 Nagios 做报警。自研 M3 做监控,并对grafana做了二次开发。

自研Argos做异常检测,基于历史数据做预测,然后和实际值做对比来判断是否异常。

发表评论

电子邮件地址不会被公开。 必填项已用*标注