因为分布式系统架构的方式、实现的技术,这十几二十年没有太大的突破,该有的理论很早就存在,后面的 CAP原理(一致性、可用性、分区容错性)也只是归纳性的东西。所以,最重要的还是要知道取舍,比如 CAP的取舍,还有系统的复杂性与可运维性的取舍,功能很强大但是运维很麻烦也是不行的。 还有一点,从我个人的偏好出发,采用合适的编程语言做分布式系统也是一件很重要的事情。我们采用 OpenStack有很多坑,其实就是 Python语言带来的——不是说 Python不好,但是它很多的机制,在公有云的发展方向上会带来一些性能、并发的瓶颈。Go语言出现之后,一大批的公有云产品都是基于 Golang开发的,Golang比以前的语言在并发、性能、安全性等方面做得更好,如果是用 Java来写这些系统,要达到一样的性能效果,需要的研发周期会长很多。所以,从长期的发展来看,编程语言对云计算研发决策的影响会越来越重。 Q:能否介绍您对编程语言、编程模型有什么特别的偏好?您还在编写代码? 陈谔:我个人不会执着于“PHP是世界上最好的语言”之类的想法。比较流行的语言,包括 Erlang、Ruby、Java、Java 等,甚至像 Rust这样一些偏门的语言,我都会去了解,因为它们擅长于解决某些方面的问题。 你可以发现我刚才没提 Go,因为我先接触 Erlang,后来又接触 Rust,从我的角度,Go要解决的一部分问题,我可以直接用 Erlang来写,而如果是系统编程,对 GC很敏感的,我会倾向于用 Rust来写,如果让我用 Go来写,我好像没有什么动力。包括之前给网易博客做运维需要的脚本语言,我希望用起来简单,有成熟的库可以依赖,选择了 Java技术栈,虽然 Ruby语法特性更好,但是 Java生态可以依赖那些很好的库。所以,能产生直接的效果、擅长解决某些问题,这就是我选择编程语言的偏好。 至于编程语言的特性,个人更倾向于往 Functional的方向发展,包括一些解决异步方面的问题,个人觉得 Reactive这种模型,更加偏向于 Functional,会更让人喜欢。因为它其实是描述解决问题的方法,而不是密密麻麻地写一堆指令去描述解决问题的过程。这是我接触各种不同的语言之后逐渐养成的习惯。 落实到我们整个团队的开发工作,语言的选择其实是很实际的:OpenStack就只能选择 Python;网络、内核相关的东西,就只能选择 C;Docker、Kubernetes的选择必然是 Go。当我们设计一些适配容器的东西,比如写一个Kubernetes的Controller,虽然有些工程师之前擅长 Java,但是我会告诉他去学习 Go,用 Go来写。所以这和我们的技术选型是相关的。其实 Google也选择这种组合,这是很有道理的。 我个人目前也会写代码,但是不适合和团队协作,因为团队在等待我提交某个模块或者修复某个 Bug的时候,我往往正在进行一些无法离开的沟通工作,这会影响项目进度。所以,我现在只能写一些 Demo,写一些东西去体验我们自己的网易云,尝试我们的接口。 三、厚积薄发网易云 Q:网易云承载网易95%的业务,您如何看待网易云基础服务(网易蜂巢)所扮演的角色,以及能够做到95%的关键因素? 陈谔:首先,网易云能够承载网易95%业务的背景,是网易的互联网技术栈是很统一的,因为所有的中间件、公共技术解决方案都出自我们杭研,这使得我们开发一个云平台把一些服务封装提供给大家变得很容易。同时杭研掌握了网易运维体系,运维是必须和云计算配合的,这是最大的基础。 其次,网易的互联网业务都不小,虽然业务的数量不是太多,但是每个大业务对吞吐能力、性能要求都是很极端的,基于网易 19年的互联网技术积累,我们花费大量的精力进行云化,在 IaaS、网络方面的投入是很大的,而网络和存储就是云计算平台研发最难解决的问题。 以网络为例,从第一个版本上线开始,三年之内对于整个网络的架构、网络的优化,我们投入的力量是最大的。最开始只有三层,后来完成二层的格局,然后把网络性能从只能跑千兆网络,做到一直到接近万兆,这就经历了一个很长的优化过程。网络问题解决之后,上面的业务就好集成,因为计算虚拟化是相对比较成熟的,但各方对网络实现优化的差异其实是很大的,有些方案连千兆都做不到,尤其是做 SDN之后。 (责任编辑:本港台直播) |