小土刀

技术栈一览

新项目技术栈的确定,除了技术本身的特性,更需要考虑开发团队的情况。最近的在为新项目做技术调研,这里记录一下相关的信息和思考。


写在前面

技术栈主要分为四大类:

  1. 应用和数据
  2. 工具
  3. DevOps
  4. 商业工具

本文主要着眼于第一和第三点,其他两点根据不同国家地区和不同团队习惯可以很方便地进行切换,这里就不赘述了。需要注意的是,本文的资料来源于 Stackshare,原创部分是技术栈选择相关思考

一些思考

首先要强调的是,不同团队不同项目有不同的方案,这里只是我一天的思考,后面肯定有好多地方需要调整,总体来说,还是起到抛砖引玉的作用,希望各路大神老司机带带我。

先简单说下背景,这个项目之所以有比较大的自由度,主要是因为基本上可以算作是一个全新的业务,没有太多的历史包袱。虽然其他项目有可以参考的代码,不过量不大,即使要迁移,也可以在很短时间完成。另外一个值得注意的地方是具体的实地测试可能需要在全球进行,有很多开发外的因素不得不考虑进来(比如说法务相关的数据安全性等等)。考虑到远程部署远程测试的客观条件,在选择相关技术的时候我给自己定的原则就是:

轻量、高并发、易拓展、易部署、易排查

解释一下:

  • 轻量:一直以来我不太喜欢特别重的框架,一是学习曲线陡峭,二是很多东西框架代劳,看起来简单,但真正需要根据需求变动修改的时候,可能会有意想不到的问题。因此,我更希望用一个灵活大于条条框框的框架(甚至不用框架也行)
  • 高并发:在初步概念测试的前提下(没有统一标准,各个公司都在搞自己的一套),没有办法争取到很多资源,所以希望能在有限的条件下,提供更好的服务质量,天生支持高并发的语言是我更倾向的
  • 易拓展:业务量上来之后如果需要增加机器,希望能够简单配置即可
  • 易部署:能够轻松跟 Jenkin 等持续集成工具配合,或者直接简单粗暴可以通过配置工具部署,在这一步步骤越多就越容易出问题
  • 易排查:出了问题能够快速定位,这又回到框架的问题,用框架后增加的复杂度,更不容易快速准确定位问题

所以初定的技术栈是这样的:

  • 应用和数据 Application and Data
    • 负载均衡: Amazon ELB
    • 数据库: Redis, MongoDB
    • 编程语言: Go
    • 框架: beego / gin / no framework
    • 云主机: Amazon EC2
    • 云存储: Amazon S3, Amazon EBS
  • DevOps
    • 代码协作: Gitlab
    • 监控: New Relic, Amazon CloudWatch
    • 虚拟机管理: Vagrant / Apache Mesos
    • 服务器配置: Ansible
    • 持续集成: Jenkins

还需要通过基础技术测试才能最终确定下来,不过我个人觉得这一套还是蛮轻量灵活的,希望能经得起时间的考验。

部分公司技术栈

这部分来源于 Stackshare

Airbnb

  • 应用和数据 Application and Data
    • Web 服务器: nginx
    • 数据库: MySQL, Redis, Amazon RDS
    • 缓存: Amazon ElasticCache
    • 编程语言: JavaScript, Ruby, Java
    • 框架: Rails, React
    • 云主机: Amazon EC2
    • 云存储: Amazon S3, Amazon EBS
    • 大数据: Hadoop, Presto, Druid
  • DevOps
    • 代码协作: GitHub
    • 监控: New Relic, Sentry, Kibana, Datadog, Amazon CloudWatch, Scout
    • 虚拟机管理: Vagrant, Apache Mesos
    • 服务器配置: Chef
    • 持续集成: Solano CI

Dropbox

  • 应用和数据 Application and Data
    • Web 服务器: nginx
    • 数据库: MySQL
    • 缓存: Memcached
    • 编程语言: Python, Rust
    • 云存储: Amazon S3
  • DevOps
    • 监控: Pingdom, Sentry, Nagios

Pinterest

  • 应用和数据 Application and Data
    • Web 服务器: nginx
    • 数据库: MySQL, Redis
    • 缓存: Memcached
    • 编程语言: Python, Java
    • 框架: Backbone.js, Django
    • 云主机: Amazon EC2
    • 云存储: Amazon S3, Amazon EBS
    • 大数据: Hadoop, HBase, Qubole
  • DevOps
    • 监控: Pingdom, Crittercism

Medium.com

  • 应用和数据 Application and Data
    • Web 服务器: nginx
    • 数据库: Redis, Amazon DynamoDB, Neo4j, Amazon RDS
    • 消息队列: Amazon SQS
    • 编程语言: Go
    • 框架: Node.js
    • 云主机: Amazon EC2
    • 云存储: Amazon S3, Amazon EBS
    • 大数据: Amazon EMR
  • DevOps
    • 代码协作: Github

Stack Overflow

  • 应用和数据 Application and Data
    • 数据库: Redis
    • 缓存: Microsoft SQL Server
    • 编程语言: C#
    • 框架: .Net

Google

  • 应用和数据 Application and Data
    • 编程语言: Python, Java, Go, C++
    • 框架: AngularJS
  • DevOps
    • 容器管理: Kubernetes

Heroku

  • 应用和数据 Application and Data
    • 数据库: Cloudant
    • 缓存: MemCachier
    • 编程语言: Ruby, Go
    • 云主机: Amazon EC2
  • DevOps
    • 容器: Docker
    • 监控: Pingdom, PagerDuty, Librato, Honeybadger
    • 日志: Loggly
    • 持续集成: Travis CI

Github

  • 应用和数据 Application and Data
    • Web 服务器: Unicorn
    • 数据库: MySQL
    • 编程语言: Ruby, C
    • 框架: Rails, Sinatra
  • DevOps
    • 代码协作: Github
    • 监控: PagerDuty

Docker

  • 应用和数据 Application and Data
    • 编程语言: Go
    • 框架: Bootstrap, Foundation
  • DevOps
    • 代码协作: Github
    • 监控: New Relic, Pingdom, PagerDuty
    • 持续集成: Jenkin

Coursera

  • 应用和数据 Application and Data
    • Web 服务器: nginx
    • 负载均衡: AWS ELB
    • 数据库: MySQL, Amazon RDS, Cassandra
    • 编程语言: JavaScript, Python, Scala
    • 框架: Bootstrap, Node.js, Backbone.js, Django, Play
    • 云主机: Amazon EC2
    • 云存储: Amazon S3,
    • 消息队列: Kafka, Amazon SQS
  • DevOps
    • 代码协作: Github
    • 监控: Pingdom, Datadog, PagerDuty
    • 虚拟机管理: Vagrant
    • 持续集成: Jenkins

参考链接

捧个钱场?

热评文章