前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >技术顶牛的公司为啥没有CTO?

技术顶牛的公司为啥没有CTO?

作者头像
腾讯云数据库 TencentDB
发布于 2019-06-10 03:10:26
发布于 2019-06-10 03:10:26
9450
举报

点击上方蓝字关注我们吧

Netflix 是美国在线影片租赁商,曾利用超过 100 亿次的用户观看纪录分析观众喜好,制作出热播剧集《纸牌屋》。Netflix 的工程文化,被很多国内一线互联网公司研究借鉴,但实际上,这家技术实力超群的公司,却是没有 CTO 的。

1 写在前面

某天晚上和下属一起吃晚饭,期间聊到 Netflix 技术那些大胆的创新,事后觉得有必要总结一下,给团队分享,让大家了解世界顶级的技术组织在技术、架构、组织和文化方面的创新。让大家在埋头干活的时候,偶尔也可以抬头看看天(大处着眼,小处着手)。于是就有了这篇文章。

2 大规模生产级微服务架构实践

微服务很多公司 (eBay, Amazon, BAT) 都有,甚至比 Netflix 做得更早,但 Netflix 大概是大规模生产级微服务做得最杰出的。

100s 范围的微服务,1000s 范围的每日生产变更,10,000s 范围的实例,1,000,000s 范围的活跃客户数,1,000,000,000s 范围的度量。但是只有 10s 范围的运维工程师,没有自己的数据中心 NOC,应该算微服务 DevOps 的最高境界了。

Netflix 微服务可视化

3 开源整个微服务技术栈

Netflix 微服务技术栈的核心组件基本上都是开源的。Pivotal 在 2~3 年前把 Netflix 开源的这摊东西封装一下改头换面,再拼凑一些其它东西(配置中心,调用链监控等)就变成了 Spring Cloud。现在大家耳熟能详的 Zuul 网关,Eureka 服务发现注册中心,Hystrix 熔断限流,Archaius 配置等组件,Netflix 在 2012 年左右就都开源出来了。

开放开源是 Netflix 的一种竞争战略。

Netflix 为啥热衷于要搞开源?

  1. 将自己的解决方案建立为行业标准和最佳实践
  2. 建立 Netflix 技术品牌
  3. 雇佣、留住和吸引顶级工程师
  4. 从共享生态中获得反馈输入并受益

4 系统全部迁移 AWS 公有云

大致在 09/10 年左右, Netflix 就开始启动上公有云战略(当然背后也是吃了自建数据中心的苦头),应用逐步向 AWS 迁移,这个过程一共持续了将近 5 年,到 15 年的时候,迁移完毕,全部应用上到 AWS。09/10 年左右的 AWS 还不太成熟,别说当时,即使现在也没有几个大公司不掂量一下敢提全部迁移公有云的战略。另外 AWS 能有今天,Netflix 也是功不可没,帮 Amazon 躺了无数的坑。

5 在 AWS 基础上打造 PaaS 平台

Netflix 在 AWS IAAS 的基础上封装打造了自己的 PaaS 云平台服务 (大部分组件开源),包括

  • 平台运行时服务 (Eureka,Zuul, Edda,Atlas)
  • 平台库和框架 (Karyon/Ribbon,Hystrix,RxJava, Governator,Servo, Archaius, Astyanax)
  • 平台大数据和缓存服务 (Cassandra/ES/Hadoop Platform as a Service, EVCache,S3)
  • 平台工具和服务 (Asgard/Aminator, SimianArmy/ChaosMonkey, ICE)

业内最近开始提出云原生 (Cloud Native) 架构的理念,Pivotal 是这个理念的主要推动者(背后主要是要推它的 Cloud Foundry 产品)。其实 Netflix 在 2013 年就提出了 Cloud Native 理念,而且它的整个平台 (AWS IAAS + PaaS) 就是云原生的。

6 两地三中心高可用

Netflix 的高可用架构也是做得大气磅礴,同城部署 3 个对等的可用区 (AWS Availability Zone),1 个甚至 2 个挂不影响可用性。

异地 (Regions) 再做对等部署,一个 Region 里头的 AZ 全挂,另外一个 Region 接着可用。

7 采用 Cassandra NoSql 作为主数据库

Netflix 原来用 Oracle 等传统 Sql 数据库,但是受到扩展性挑战。公司架构管理层大胆颠覆性提出使用 Cassandra Nosql 作为主要的持久化存储机制,Netflix 在 2012 年就做到大部分数据存放 Cassandra 和 S3 等非关系数据库上。这个架构决策也是非常大胆有魄力,一般没有几个公司敢这么干的。Cassandra 本质上是一种 KV 数据库,更像 sorted map 存储,不支持事务,不支持 join。在 CAP 理论中,Cassandra 是展现 AP 特性,无中心分散式高可用,天然支持跨数据中心数据同步,这大概是 Netflix 最看重的特性。Cassandra 是读慢写快的特性(一般数据库是读快写慢),Netflix 大量使用 Memcached 做缓存补偿。

Cassandra 在同城多个 Zone 之间同步数据,在异地 (Inter-Region) 之间再同步,流量到 9Gbits/s,延迟 83ms,18TB 的数据备份 (2013 年的数据)。

8 镜像部署和发布自动刹车

近年 docker 容器技术大火,大家都在谈不可变基础设施 (immutable infrastructure) 的理念,本质就是镜像部署。Netflix 在 2012 年前就已经实现镜像部署,发布的单位是 AMI(Amazon Machine Image) 镜像,通过持续交付工具 Asgard(现在升级版叫 Spinnaker)直接将镜像推到 AWS 云中部署,支持蓝绿(需要至少两倍虚机),灰度和金丝雀等部署模式。

Netflix 的发布管道叫 Paved Road,就是平台团队铺好的路,由提交,构建,AMI 镜像烘焙 (Image Baking) 和发布四个阶段组成。

金丝雀发布之后,系统会自动生成金丝雀健康报告和分数(背后需要统计上千个 metrics + 复杂智能算法),达到一定的分数 (比如 80 分),才能继续 roll out。这个也称发布自动刹车。

9 反脆弱架构

Netflix 大胆提出反脆弱架构的理念(架构师受到尼古拉斯·塔勒布《反脆弱》一书的启发,并将其应用到架构领域):为了让你的系统更加健壮,不是将它们严格保护起来,而是主动随机性地增加一些破坏性测试,逼迫研发人员做好高可用。

Netflix 从周一至周五,上午 9 点到下午 3 点,混乱猴子军团会随机杀生产实例,这个叫 Chaos Monkey,还有增加延迟的 Latency Monkey。

还有 Chaos Gorilla 可以杀整个可用区 (Availability Zone),Chaos Kong 杀整个 Region。据说 Netflix 曾主动关闭一个可用区,客户没有任何影响。

国内一些互联网公司也有演习和自攻一说,但基本都是提前打招呼的,规模一般也不大,Netflix 是随机不打招呼玩真的。

10 几乎没有流程,没有员工手册

Netflix 是一家高度重视人才密度,重自由和责任文化,轻流程的公司。公司没有正式的员工手册,只有一条简单的指导原则:

Act in Netflix’s best interest,以 Netflix 的最佳利益行事。

11 No CTO, No Ops

Netflix 的技术这么牛逼,但它是没有技术 CTO 职位的,只有首席产品 CPO,工程团队和产品团队的 VP 都向 CPO 汇报。这样做更多是为了产品导向,便于技术和产品沟通合作,避免两边扯,避免业务驱动还是技术驱动的悖论,大家都是产品驱动。Netflix 把它称为 BusDevOps 组织架构。

Netflix 也没有独立的运维团队 (NoOps),架构 + 中间件 + 运维 + 大数据闭环统称为云平台工程 (Cloud and Platform Engineering) 团队,一个 VP 总负责,更好地对接 DevOps 文化。Netflix 的产品导向文化非常浓厚,连平台工程团队开源出来的产品都是整整齐齐的 (见 https://netflix.github.io/),PaaS 云平台是整个云平台工程团队最大的产品输出。

Netflix 的 CTO 其实是 Chief Talent Officer,负责人才招聘的,公司对人才的重视可见一斑。

12 无论公司兴衰,始终支付市场最高工资

不用多解释,这大概是 Netflix 最霸气和牛逼的一点。据我在米国的同学讲,去 Netflix 基本是硅谷顶薪,博士毕业去给开了超过 30 万美金的年薪(这还是前几年的行情)。一般进去难,去了留下来也不容易,不胜任的被客客气气劝退的有。能留下来的一般也不跳,因为再跳也没有更高的待遇了。

显然,没有顶级的人才密度,就无法支撑其高大上的技术架构和鹤立鸡群的文化。顶级的人才聚集在一起,容易碰撞迸发创新火花,捣腾出颠覆性的东西和理念。

13 写在最后

我在这边总结 Netflix 技术做的牛逼的事情,一方面是因为钦佩,但这不是重点,毕竟目前国内基础环境和人才密度是支撑不起这种类型文化的公司;但是,他山之石,可以攻玉,Netflix 的很多技术、架构、组织和文化思路值得我们学习和借鉴。

我本人没有在 Netflix 工作过,上面的信息主要通过互联网共享资料 (特别是 slideshare) 学习解读 (有些解读可能还是偏颇的),所谓强者无秘密,Netflix 的强大也体现在它无私分享精神,它在公司内部是信息公开透明分享的,对外部也一样,几乎所有 Netflix 微服务技术栈 (也称 NetflixOSS) 你可以从 github.com/netflix 免费获得,其内部架构和技术相关资料基本上都可以通过 slideshare 或者 Netflix techblog 免费获得。在公开透明一块即使 Google、Amazon 和 Apple 这些互联网巨头都应该是自叹不如的。Netflix 公司大概是地球上开出的一朵特别奇葩耀眼的花。

往期推荐

大咖专访 | 深度对话腾讯云数据库专家雷海林

30多岁的中年DBA,出路在哪?

《权游》人物关系你还捋不清?Neo4j帮你5分钟搞定!

年中薅羊毛,可省18040元

云数据库MySQL年中疯狂折扣中,关注秒杀区预告,新用户只需4.67元/月!即可获得1G内存50G高性能MySQL基础版。更有高可用MySQL,1核1G内存100G SSD盘加送6个月数据迁移服务,秒杀价低至48.64元/月!劲省1504元!点击左下角“阅读原文”速去抢购~

↓↓点“阅读原文”享年中福利

好文和朋友一起看!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云数据库 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
js获取上周、本周、上月、本月、上季度、本季度的开始日期、结束日期(无bug)
/** * 获取上周、本周、上月、本月、上季度、本季度的开始日期、结束日期 start * 亲测无bug。获取上月开始结束日期考虑了年份的变化 */ var now = new Date(); //当前日期 var nowDayOfWeek = now.getDay()-1; //今天本周的第几天 var nowDay = now.getDate(); //当前日 var nowMonth = now.getMonth(); //当前月 var nowYear = now.getYear(); //当
用户1065635
2019/11/27
7.4K0
js日期计算及快速获取周、月、季度起止日
机缘巧合,这段接触了一下js,刚开始各种磕碰各种不顺手,一个日期计算都折腾我半天,积累了一些,赶紧码下:  
AhDung
2018/09/13
5.9K0
Java判断日期是不是当天、本周、本月、本季度、本年
这是一个java工具类,用于大多数需要判断日期是不是当天、本周、本月、本季度、本年,以更好的进行下一步判断, 那么如何去写代码吗?请直接看下面:
小颜同学
2023/08/22
2.8K0
微信小程序日期选择器显示当前系统年月日时分
话不多说,记录一下这个框架的使用~小程序使用轻量、可靠的小程序 UI 组件库 vant-weapp Github源码:https://github.com/youzan/vant-weapp 中文文档:https://youzan.github.io/vant-weapp/#/intro
王小婷
2021/06/29
3.3K0
微信小程序-vant-weapp日期选择器的使用(年月日时分)
话不多说,记录一下这个框架的使用~小程序使用轻量、可靠的小程序 UI 组件库 vant-weapp Github源码:https://github.com/youzan/vant-weapp 中文文档:https://youzan.github.io/vant-weapp/#/intro
王小婷
2021/06/22
7.6K1
微信小程序-vant-weapp日期选择器的使用(年月日时分)
微信小程序日期选择器(起始日期与终止日期)轮子复制粘贴直接用————modal组件
先上图。 每次开始默认获取当前选择的日期。 wxml <view class="beijing"> <view class="second"> <view class="second_1"> <view class="second_1_1"> <button bindtap="begin" type="primary">点击重选</button> </view> <view class="second_1_2">
啦啦啦啦
2023/02/11
7630
微信小程序日期选择器(起始日期与终止日期)轮子复制粘贴直接用————modal组件
vue 手写一个时间选择器
最近研究了 DatePicker 的实现原理后做了一个 vue 的 DatePicker 组件,今天带大家一步一步实现 DatePicker 的 vue 组件。
小皮咖
2019/11/05
2.6K0
求本年、本月、本周等数据
本文转载:http://www.cnblogs.com/ethan-qi/archive/2013/05/14/3077371.html
跟着阿笨一起玩NET
2018/09/19
5840
Java获取时间/格式化日期代码总结
我们在Java开发过程中,少不了与时间打交道,比如根据两个日期得出相差的时分秒,时间加减,时间累加,前5分钟,前一个月,前一年,等等...所以我从网上搜集一些常用的时间/日期格式化代码,以飨读者。
浩Coding
2019/07/03
4.4K0
《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)
  理想很丰满现实很骨感,在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就有点难了。宏哥上一篇已经讲解了如何处理日历时间控件,但是对于第一种方法可能会遇到输入框是readonly的情况,那么第一种方法就不适用了,但是只要我们稍微的变通地处理一下,就又可以使用了。
北京-宏哥
2021/11/10
1.6K0
微信小程序提交form表单内容
王小婷
2025/05/20
720
微信小程序提交form表单内容
如何使用 React 构建自定义日期选择器(1)
在 web 上经常看到包含一个或多个日期的表单。无论是出生日期还是航班时间表日期,您总希望用户能够提供了有效的日期。
IMWeb前端团队
2019/12/03
6.6K0
如何使用 React 构建自定义日期选择器(1)
JAVA获取30天或某段范围日期的方法
这个示例使用了Java 8中的LocalDate类和DateTimeFormatter类来处理日期格式化。首先,我们创建一个formatter对象来定义日期格式(例如:“yyyy-MM-dd”)。然后,我们获取当前日期并创建一个空的列表来存储日期字符串。
张哥编程
2024/12/13
3680
JAVA获取30天或某段范围日期的方法
Java实用工具类二:时间格式转换工具
此文仅对自己工作中用到的类进行总结,方便以后的使用。 类一: package com.cn.hnust.util; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DateUtil { /** * 获取起止日期 * @param sdf 需要显示的日期格式 * @param date 需要参照的日期 *
芈亓
2022/06/17
1.4K0
微信小程序校历组件
首先得根据年月将本月的日历打印出来,使用util.formatDate("yyyy-MM-01", date)获取本月的1号的Data对象,然后计算他是本周的周几,使用Date.addDate()将日期转到1号所在的那周的周一,就是本月日历要打印的第一天,由于校历一般是周一作为一周的开始,所以需要稍微处理一下,不能直接减掉周次来将Date对象指向打印日历的第一天。 由于每月的日历最多是五个周,所以我们直接打印五个周的时间即可,使用Date.addDate()将日期一天一天累加,并将数据保存即可。 对于日期的样式,我是用了相对比较简单的办法,通过if判断日期来给予其特定的样式,我是将不同的class拼接为字符串赋值到unitObj上的,对于显示的颜色等,通过css的优先级控制,单元样式继承于容器,对于需要特定现实的样式提供一个detach字段保存。 跳转日期则直接获取时间来拼接月份然后调用日历月份处理方法即可。
WindRunnerMax
2020/08/27
1.1K0
微信小程序校历组件
10个实用的工具函数
new Array 创建的数组只是添加了length属性,并没有实际的内容。通过扩展后,变为可用数组用于循环
WahFung
2020/08/24
5060
微信小程序教学第三章(含视频):小程序中级实战教程:列表-页面逻辑处理
§ 页面逻辑处理 本文配套视频地址: https://v.qq.com/x/page/n0554dndrez.html 开始前请把 ch3-2 分支中的 code/ 目录导入微信开发工具  
iKcamp
2018/01/04
9070
微信小程序教学第三章(含视频):小程序中级实战教程:列表-页面逻辑处理
好多Javascript日期选择器呀-5
<TITLE>最精致的日历式日期输入控件 (Smart Ver 1.00)</TITLE>
Java架构师必看
2021/03/22
1.2K0
微信小程序日期+时间选择器
这种内置定义好的选择器都是从底部弹起。目前支持五种选择器,通过设置mode来区分。分别是普通选择器,多列选择器,时间选择器,日期选择器,省市区选择器,默认是普通选择器。
李才哥
2019/07/10
7.7K0
微信小程序日期+时间选择器
用react手写一个简单的日历
日历其实大家都很熟悉,一切的设计都是从功能出发,这是根本。日历的功能分为两大块。
用户3806669
2021/07/06
4K0
用react手写一个简单的日历
推荐阅读
相关推荐
js获取上周、本周、上月、本月、上季度、本季度的开始日期、结束日期(无bug)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档