在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、B 站后端源码被恶意“开源” 几 小时 1、B站源码泄露事件始末 今日,网上传出消息,bilibili整个网站后台工程源码泄露,这是国内规模较大的互联网企业中首例整个网站后台工程源码泄露。而且B站网站不仅仅是泄露工程源码这么简单,有很大一部分用户的用户名密码被硬编码在代码里面,也泄露出去了,对用户来说影响很大。 https://github.com/bilibili/kratos 2、偷偷聊聊B站,嘿嘿 在写这篇文章的时候,我也是各种查找相关的新闻。在知乎上看见这么一条数据,以下为知乎片段: 知乎上爱学习且眼尖的发现了一系列有趣的代码片段,爱学习的同学看着点哈。 记在小本本上, 要给用户鼓励,这一招产品经理学会了么? 好吧这是 anti spam…虽然很辣眼睛… 目前,可以确认的是这份代码是B站后端目前使用的代码,可以推测这份代码的泄漏者很可能是B站的员工或者前员工,网络上也有评论说,这份代码被非法“开源“是由于B站最近恶意裁员导致被裁员者反弹恶意公开代码发泄情绪。 原来删库跑路开源的玩笑,真的有人干得出来。真的是无知者无畏啊。不管该员工出于什么原因,都不应该以公开公司代码为泄愤渠道,这是对自己职业最大的不负责任,当前代码泄露已经无可挽回,如果公司执意追责,牢狱之灾是免不了了。 对于B站来说,这个问题很严重:1、后端代码被泄漏,就像是裤子被趴,很多黑产从业者会蜂拥而至,B 站被人撸是在所难免了。2、这份代码会被泄漏,也从侧面说明B站的技术管理水平不高,代码权限管理不到位。3、从今天开始估计B站后端程序员要开始 007 重构了。 各位技术管理朋友们,赶紧回去看看你们公司的权限管理做的是否到位,要知道这些年来离职员工从删库到跑路的事件发生了不少,“实习生“误删数据库的事情也每一段时间就能爆出一个,今天又新增了一个方式,恶意开源。 Golang入门到精通 已下单,辞职申请表已递交,回家钻研源码,PILIPILI.COM指日可待。哈哈哈。。开个玩笑 3、B站为何选择Go语言重构后台代码 从一位曾经在哔哩哔哩任职的开发人员那里,了解了一下B站的技术发展历程:最开始是用PHP语言开发的,后来B站的中台逐步被Node占领,而后台技术为了更高的并发、更稳健,以及为了大数据分析,逐步向JAVA靠拢,这便导致了哔哩哔哩的技术整体较为混乱。 B站早期几乎天天故障,随着团队和业务扩大,各方面的压力都增加,处处冒火。代码混乱,框架结构混乱,已经到了难以维护的地步,需要理清脉络,在这样的情况下统一技术栈是毫无疑问该做的事。最后发现重写反而是最优的解决方案。 为什么是Go? 归根到底,重写后台工程是哔哩哔哩统一技术栈的一次尝试,至于最后为啥选择了Go,很重要的一点在于Go能够满足哔哩哔哩平台重构优化的需求;另一点是其研发总监毛剑本身是一位Go语言的忠实布道者。 那我们站在哔哩哔哩的角度来分析以下: 第一:Go内置的net/http包基本上把我们平常用到的网络功能都实现了,这些特性对于网络视频平台哔哩哔哩来讲,解决其当前所面临的问题是绰绰有余的。 第二:公司有自己的Go语言团队 哔哩哔哩的研发总监毛剑,此前的工作经历均以Go为主,同时他也带了自己的Go团队共同加入,在这样的背景下,相对于JAVA、Python,选择用Go来重构后台显然能够起到事半功倍的效果。 所以哔哩哔哩采用Go语言来重写后台JAVA工程,有行业发展的必然性,也有场景、功能实现的需求性,还有技术负责人根据现实情形做出选择的主观判断性。随着行业的不断发展,各种新兴语言不断出现,一个项目中多种语言并存、互补的现象是必然的,也许几十年后你还会发现用Go写的后台被其他语言改写了,或者某种你以为已经成为历史的语言卷土重来也不是没有可能。 而从今天bilibili泄露出来的Go的源代码我们也可以看到,对于bilibili这样日以几千万的访问量,Go语言实现高并发还是非常靠谱的。 二、Go语言的特点 1、学习曲线容易 Go语言语法简单,包含了类C语法。因为Go语言容易学习,所以一个普通的大学生花几个星期就能写出来可以上手的、高性能的应用。在国内大家都追求快,这也是为什么国内Go流行的原因之一。 Go 语言的语法特性简直是太简单了,简单到你几乎玩不出什么花招,直来直去的,学习曲线很低,上手非常快。 2、效率:快速的编译时间,开发效率和运行效率高 开发过程中相较于 Java 和 C++呆滞的编译速度,Go 的快速编译时间是一个主要的效率优势。Go拥有接近C的运行效率和接近PHP的开发效率。 C 语言的理念是信任程序员,保持语言的小巧,不屏蔽底层且底层友好,关注语言的执行效率和性能。而 Python 的姿态是用尽量少的代码完成尽量多的事。于是我能够感觉到,Go 语言想要把 C 和 Python 统一起来,这是多棒的一件事啊。 3、出身名门、血统纯正 之所以说Go出身名门,从Go语言的创造者就可见端倪,Go语言绝对血统纯正。其次Go语言出自Google公司,Google在业界的知名度和实力自然不用多说。Google公司聚集了一批牛人,在各种编程语言称雄争霸的局面下推出新的编程语言,自然有它的战略考虑。而且从Go语言的发展态势来看,Google对它这个新的宠儿还是很看重的,Go自然有一个良好的发展前途。 4、自由高效:组合的思想、无侵入式的接口 Go语言可以说是开发效率和运行效率二者的完美融合,天生的并发编程支持。Go语言支持当前所有的编程范式,包括过程式编程、面向对象编程、面向接口编程、函数式编程。程序员们可以各取所需、自由组合、想怎么玩就怎么玩。 5、强大的标准库 这包括互联网应用、系统编程和网络编程。Go里面的标准库基本上已经是非常稳定了,特别是我这里提到的三个,网络层、系统层的库非常实用。Go 语言的 lib 库麻雀虽小五脏俱全。Go 语言的 lib 库中基本上有绝大多数常用的库,虽然有些库还不是很好,但我觉得不是问题,因为我相信在未来的发展中会把这些问题解决掉。 6、部署方便:二进制文件,Copy部署 这一点是很多人选择Go的最大理由,因为部署太方便了,所以现在也有很多人用Go开发运维程序。 4、简单的并发 并行和异步编程几乎无痛点。Go 语言的 Goroutine 和 Channel 这两个神器简直就是并发和异步编程的巨大福音。像 C、C++、Java、Python 和 JavaScript 这些语言的并发和异步方式太控制就比较复杂了,而且容易出错,而 Go 解决这个问题非常地优雅和流畅。这对于编程多年受尽并发和异步折磨的编程者来说,完全就是让人眼前一亮的感觉。Go 是一种非常高效的语言,高度支持并发性。Go是为大数据、微服务、并发而生的一种编程语言。
8、稳定性 Go拥有强大的编译检查、严格的编码规范和完整的软件生命周期工具,具有很强的稳定性,稳定压倒一切。那么为什么Go相比于其他程序会更稳定呢?这是因为Go提供了软件生命周期(开发、测试、部署、维护等等)的各个环节的工具,如go tool、gofmt、go test。 三、Go语言的发展前景——2019 年,程序员最想学习的编程语言Top1 Go语言,作为云时代的C语言,出身名门。虽然说是一门只有十年历史的新语言,但是发展势头相当迅猛,容器界的扛把子 Docker 就是用 Go 写的,国内也有不少团队广泛使用 Go。近日,HackerRank 在社区发起了程序员技能调查,来自 100 多个国家、超过 70000 名开发者参与其中。调查结果显示,2019 年,程序员最想学习的编程语言 Top 3 分别是 Go、Kotlin 和 Python,其中 Go 以 37.2% 的比例排在首位。 但 Go 要想撼动编程界的常青树 Java 二十多年的地位无疑难度颇大。据 HackerRank 数据显示,2018 年,Java 在开发者最受欢迎的编程语言排行榜中仍然排名第 2,Python 排名第 4,Go 排名第 13,距离第一名 JavaScript 还有不小的差距。 Go 语言虽然“年纪尚小”,但已经拥有很多非常优秀的特性。 采用合适的编程语言做分布式系统也是一件很重要的事情。我们采用 OpenStack 有很多坑,其实就是 Python语言带来的——不是说 Python 不好,但是它很多的机制,在公有云的发展方向上会带来一些性能、并发的瓶颈。Go 语言出现之后,一大批的公有云产品都是基于 Golang 开发的,Golang 比以前的语言在并发、性能、安全性等方面做得更好,如果是用 Java 来写这些系统,要达到一样的性能效果,需要的研发周期会长很多。所以,从长期的发展来看,编程语言对云计算研发决策的影响会越来越重。 Go的应用范围一直在扩大,云计算,微服务,区块链,哪里都有用Go写的重量级项目。docker/kubernetes生态圈,几百/千万行代码,基本统治了云原生应用市场。去年大热的区块链,以太坊的geth,比特币的btcd,闪电网络的lnd,都是Go语言开发。还是那句话,多看看各种语言的生态,或许都并没有你想象的那么不堪。。。Go语言设计上确实不够“先进”,但也是另一种“务实”。其实go不管在国内还是国外已经很受待见了,国外google用的很多,uber也在用,国内有著名的今日头条,每日千亿级的访问妥妥的。多少语言终其一生都没有这么大的应用场景。 四、Go语言的岗位 最近几年,Go语言开始走向火爆,国内外很多公司都已经将Go语言应用到公司核心业务系统中。比如Google、AWS和MonGoDB等国外巨头,以及像阿里云CDN、华为、饿了么、七牛等国内公司也都在积极拥抱Go语言。 2018年求职市场Go语言工程师需求增长率达到了800%,因此这个职业方向应该是现下最有“钱”途的职业方向了。 因为Go语言工程师在国内市场的紧缺,岗位薪资也是非常高的。 五、写在最后 当然,一个技术能不能发展起来,关键还要看三点。
上述的这三点是非常关键的,新的技术只需要占到其中一到两点就已经很不错了,何况有的技术,比如 Java,是三点全占到了,所以,Java 的发展是如此好。当然,除了上面这三点重要的,还有一些其它的影响因素,比如:
用这些标尺来量一下 Go 语言,我们可以清楚地看到:
所以,Go 语言的未来是不可限量的。当然,我个人觉得,Go 可能会吞食很多 C、C++、Java 的项目。不过,Go 语言所吞食主要的项目应该是中间层的项目,既不是非常底层也不会是业务层。 也就是说,Go 语言不会吞食底层到 C 和 C++ 那个级别的,也不会吞食到高层如 Java 业务层的项目。Go 语言能吞食的一定是 PaaS 上的项目,比如一些消息缓存中间件、服务发现、服务代理、控制系统、Agent、日志收集等等,没有复杂的业务场景,也到不了特别底层(如操作系统)的中间平台层的软件项目或工具。而 C 和 C++ 会被打到更底层,Java 会被打到更上层的业务层。 好了,我们再用上面的标尺来量一下 Go 语言的杀手级应用 Docker,你会发现基本是一样的。
所以,虽然几年前的 Docker ,当时的坑儿还很多,但是,相对于这些大的因素来说,那些小坑儿都不是问题。只是需要一些时间,这些小坑儿在未来 5-10 年就可以完全被填平了。 同样,我们可以看到 Kubernetes 作为服务和容器调度的关键技术一定会是最后的赢家。 最后,我还要说一下,为什么要早一点地进入这些新技术,而不是等待这些技术成熟了后再进入。原因有这么几个。 技术的发展过程非常重要。因为你可以清楚地看到了这种新技术的生态圈发展过程。让我们收获最大的并不是这些技术本身,而是一个技术的变迁和行业的发展。 从中,我们看到了非常具体的各种思潮和思路,这些东西比起 技术本身来说更有价值。因为,这不但让我们重新思考已经掌握的技术以及如何更好地解决已有的问题,而且还让我看到了未来。不但有了技术优势,而且这些知识还让我们的技术生涯多了很多的可能性。 这些关键新技术,可以让你拿到技术的先机。这些对一个需要技术领导力的个人或公司来说都是非常重要的。 一个公司或是个人能够占有技术先机,就会比其它公司或个人有更大的影响力。一旦未来行业需求引爆,那么这个公司或是个人的影响力就会形成一个比较大的护城河,并可以快速地产生经济利益。 |
请发表评论