作者介绍:
杨波,拍拍贷基础框架研发总监。具有超过 10 年的互联网分布式系统研发和架构经验,曾先后就职于:eBay 中国研发中心(eBay CDC),任资深研发工程师,参与亿贝开放 API 平台研发,携程旅游网(Ctrip),任技术研发总监,主导携程大规模 SOA 体系建设,唯品会(VIPShop),任资深云平台架构师,负责容器 PaaS 平台的调研和架构
前言
近日和下属一起吃晚饭,期间聊到Netflix技术那些大胆的创新,事后觉得有必要总结一下,给团队分享,让大家了解世界较高级的技术组织在技术、架构、组织和文化方面的创新。让大家在埋头干活的时候,偶尔也可以抬头看看天(大处着眼,小处着手)。于是就有了这篇文章。
注意,Netflix技术本身也在快速的迭代进化中,本文主要基于Netflix在slideshare上的分享总结而成,其中的很多内容目前可能已经过时,但是Netflix的创新文化和精神仍然值得我们学习借鉴。
一、大规模生产级微服务架构实践
微服务很多公司(eBay, Amazon, BAT)都有,甚至比Netflix做得更早,但Netflix大概是大规模生产级微服务做得最杰出的。
100s范围的微服务,1000s范围的每日生产变更,10,000s范围的实例,1,000,000s范围的活跃客户数,1,000,000,000s范围的度量。但是只有10s范围的运维工程师,没有自己的数据中心NOC,应该算微服务DevOps的较高境界了。
Netflix微服务可视化。
二、开源整个微服务技术栈
Netflix微服务技术栈的核心组件基本上都是开源的。Pivotal在2~3年前把Netflix开源的这摊东西封装一下改头换面,再拼凑一些其它东西(配置中心,调用链监控等)就变成了Spring Cloud。现在大家耳熟能详的Zuul网关,Eureka服务发现注册中心,Hystrix熔断限流,Archaius配置等组件,Netflix在2012年左右就都开源出来了。
开放开源是Netflix的一种竞争战略。
Netflix为啥热衷于要搞开源?
将自己的解决方案建立为行业标准和较佳实践
建立Netflix技术品牌
雇佣、留住和吸引较高级工程师
从共享生态中获得反馈输入并受益
三、系统全部迁移AWS公有云
大致在09/10年左右, Netflix就开始启动上公有云战略(当然背后也是吃了自建数据中心的苦头),应用逐步向AWS迁移,这个过程一共持续了将近5年,到15年的时候,迁移完毕,全部应用上到AWS。09/10年左右的AWS还不太成熟,别说当时,即使现在也没有几个大公司不掂量一下敢提全部迁移公有云的战略。另外AWS能有今天,Netflix也是功不可没,帮Amazon躺了无数的坑。
四、在AWS基础上打造PaaS平台
Netflix在AWS IAAS的基础上封装打造了自己的PaaS云平台服务(大部分组件开源),包括
平台运行时服务(Eureka,Zuul, Edda,Atlas)
平台库和框架(Karyon/Ribbon,Hystrix,Rx
Java, 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)就是云原生的。
五、两地三中心高可用
Netflix的
高可用架构也是做得大气磅礴,同城部署3个对等的可用区(AWS Availability Zone),1个甚至2个挂不影响可用性。
异地(Regions)再做对等部署,一个Region里头的AZ全挂,另外一个Region接着可用。
六、采用Cassandra No
SQL作为主数据库
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年的数据)。
七、镜像部署和发布自动刹车
近年docker容器技术大火,大家都在谈不可变基础设施(immutable infrastructure)的理念,本质就是镜像部署。Netflix在2012年前就已经实现镜像部署,发布的单位是AMI(Amazon Machine Image)镜像,通过持续交付工具Asgard(现在升级版叫Spinnaker)直接将镜像推到AWS云中部署,支持蓝绿(需要至少两倍虚机),灰度和金丝雀等部署模式。
Netflix的发布管道叫Paved Road,就是平台团队铺好的路,由提交,构建,AMI镜像烘焙(Image Baking)和发布四个阶段组成。
金丝雀发布之后,系统会自动生成金丝雀健康报告和分数(背后需要统计上千个metrics + 复杂智能
算法),达到一定的分数(比如80分),才能继续roll out。这个也称发布自动刹车。
八、反脆弱架构
Netflix大胆提出反脆弱架构的理念(架构师受到尼古拉斯·塔勒布《反脆弱》一书的启发,并将其应用到架构领域):为了让你的系统更加健壮,不是将它们严格保护起来,而是主动随机性地的增加一些破坏性测试,逼迫研发人员做好高可用。
Netflix从周一至周五,上午9点到下午3点,混乱猴子军团会随机杀生产实例,这个叫Chaos Monkey,还有增加延迟的Latency Monkey。
还有Chaos Gorilla可以杀整个可用区(Availability Zone),Chaos Kong杀整个Region。据说Netflix曾主动关闭一个可用区,客户没有任何影响。
国内一些互联网公司也有演习和自攻一说,但基本都是提前打招呼的,规模一般也不大,Netflix是随机不打招呼玩真的。
九、几乎没有流程,没有员工手册
Netflix是一家高度重视人才密度,重自由和责任文化,轻流程的公司。公司没有正式的员工手册,只有一条简单的指导原则:
Act in Netflix’s best interest,以Netflix的较佳利益行事。
十、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,负责人才招聘的,公司对人才的重视可见一斑。
十一、无论公司兴衰,始终支付市场较高工资
不用多解释,这大概是Netflix最有霸气底气和牛逼的一点。据我在米国的同学讲,去Netflix基本是硅谷顶薪,博士毕业去给开了超过30万美金的年薪(这还是前几年的行情)。一般进去难,去了留下来也不容易,不胜任的被客客气气劝退的有。能留下来的一般也不跳,因为再跳也没有更高的待遇了。
显然,没有较高级的人才密度,就无法支撑其高大上的技术架构和鹤立鸡群的文化。较高级的人才聚集在一起,容易碰撞迸发创新火花,捣腾出颠覆性的东西和理念。
写在最后
我在这边总结Netflix技术做的牛逼的事情,一方面是因为钦佩,但这不是重点,毕竟目前国内基础环境和人才密度是支撑不起这种类型文化的公司;但是,他山之石,可以攻玉,Netflix的很多技术、架构、组织和文化思路值得我们学习和借鉴。
我本人没有在Netflix工作过,上面的信息主要通过互联网共享资料(特别是slideshare)学习解读(有些解读可能还是偏颇的),所谓强者无秘密,Netflix的强大也体现在它无私分享精神,它在公司内部是信息公开透明分享的,对外部也一样,几乎所有Netflix微服务技术栈(也称NetflixOSS)你可以从github.com/netflix免费获得,其内部架构和技术相关资料基本上都可以通过slideshare或者Netflix techblog免费获得。在公开透明一块即使Google、Amazon和Apple这些互联网巨头都应该是自叹不如的。Netflix公司大概是地球上开出的一朵特别奇葩耀眼的花。
向Netflix致敬!
- 值得认真学习的6 个 JavaScript 框架
JavaScript JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本 ...
- sizzle源码分析 (4)sizzle 技术总结及值得我们学习的地方
分析sizzle源码并不是为了去钻牛角尖,而是去了解它的思想,学习下期中一些技术的运用. 1,sizzle中的正则表达式jquery源码中充斥着各种正则表达式,能否看懂其源码的关键之一就是对正则表达式 ...
- 嵌入式 十个最值得阅读学习的C开源项目代码
开源世界有许多优秀的开源项目,我选取其中十个最优秀的.最轻量级的C语言的项目,希望可以为C语言开发人员提供参考. 十个最值得阅读学习的C开源项目代码 1. Webbench 2. Tinyhttpd ...
- 【伯乐在线】最值得阅读学习的 10 个 C 语言开源项目代码
原文出处: 平凡之路的博客 欢迎分享原创到伯乐头条 伯乐在线注:『阅读优秀代码是提高开发人员修为的一种捷径』http://t.cn/S4RGEz .之前@伯乐头条 曾发过一条微博:『C 语言进阶有 ...
- 好程序员告诉你HTML好在哪里,为什么值得我们学习
好程序员告诉你HTML好在哪里,为什么值得我们学习,HTML5对于用户来说,提高了用户体验,加强了视觉感受.HTML5技术在移动端,能够让应用程序回归到网页,并对网页的功能进行扩展,用户不需要下载客户 ...
- 从工程文化和运维理念理解Netflix
http://www.infoq.com/cn/news/2018/01/netflix-engineering-culture 在技术圈儿,Netflix 是一家非常有特色的互联网公司.他们信奉“自 ...
- 强烈推荐 GitHub 上值得前端学习的开源实战项目
强烈推荐 GitHub 上值得前端学习的开源实战项目. Vue.js vue-element-admin 是一个后台前端解决方案,它基于和 element-ui 实现 基于 iView 的 Vue 2 ...
- GitHub上最火的、最值得前端学习的几个数据结构与算法项目!没有之一!
Hello,大家好,我是你们的 前端章鱼猫. 简介 前端章鱼猫从 2016 年加入 GitHub,到现在的 2020 年,快整整 5 个年头了. 相信很多人都没有逛 GitHub 的习惯,因此总会有开 ...
- 转: 最值得阅读学习的 10 个 C 语言开源项目代码
from: http://www.iteye.com/news/29665 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同 ...
随机推荐
- spring DelegatingFilterProxy管理过滤器
安全过滤器链 Spring Security的web架构是完全基于标准的servlet过滤器的.它没有在内部使用servlet或任何其他基于servlet的框架(比如spring mvc),所以它没有 ...
- DEDECMS5.5/5.6/5.7列表页调用TAG标签(热门标签)的两种方法
DEDECMS5.5/5.6/5.7列表页调用TAG标签的两种方法: 一.DedeCMSv5.6及其以前版本: dedecms默认在列表是无法调用tag标签的,经过各位版主们的帮助,现给大家提供出2种 ...
- HBuilder更换部分
1.HBuilder工作空间的更换 HBuilder的默认工作空间的修改并不像其他ide一样,在设置里进行更改,而是在工具中进行设置. 1.单击菜单栏“工具”,选择“变更默认代码存放目录” 2.进行修 ...
- Unity 滚轮实现UGUI ScrollView的缩放
本文原创,转载请注明出处http://www.cnblogs.com/AdvancePikachu/p/7908754.html 前段时间在做一个类似AnimationCurve的可视化编辑器,其中在 ...
- weblogic 10.3.5重置密码
weblogic 10.3.5重置密码 热度1,609 ℃ 时间:2013-12-26 10:26 分类:middleware 评论数:0 条 0 weblogic默认验证密码机制:如 ...
- BZOJ1563: [NOI2009]诗人小G(决策单调性 前缀和 dp)
题意 题目链接 Sol 很显然的一个dp方程 \(f_i = min(f_j + (sum_i - sum_j - 1 - L)^P)\) 其中\(sum_i = \sum_{j = 1}^i len ...
- better-scroll 遇到的问题 1
备注:better-scroll 实现下拉,是父子层的结构,父层的第一个子元素,如果超出父容器,那么就可以实现下拉 问题: 今天在使用better-scroll实现下拉功能,遇到了一个问题 &quo ...
- Python 爬虫实战(二):使用 requests-html
Python 爬虫实战(一):使用 requests 和 BeautifulSoup,我们使用了 requests 做网络请求,拿到网页数据再用 BeautifulSoup 解析,就在前不久,requ ...
- 夜色的 cocos2d-x 开发笔记 00
第一次写博客,本人还是大二学生,纯新手,无论是文章的技术性,还是参考性,都不高,但却是根据我的经历,开发过的真实过程,对自己记载一些备忘的笔记,更希望也能帮到一些人. 本人用的win7 + vs201 ...
- SharePoint中低权限用户通过提升权限创建用户组
/// <summary> /// 提升权限创建用户组 /// </summary> /// <param name="groupname">用 ...