首页 » 网站推广 » 百视通php技巧_我为什么选择运用Go措辞

百视通php技巧_我为什么选择运用Go措辞

访客 2024-11-21 0

扫一扫用手机浏览

文章目录 [+]

谢孟军:EGO会员、GopherChina组织者、《Go Web编程》一书的作者,专注Golang技能架构。
本文来自EGO会员群分享,入群办法见文末

在这里我紧张想和大家分享一些Go和我个人的发展史。
首先聊聊Go,在2009年全部开源出来后,它得到了当年的年度措辞,但是直到2011年它才发布正式的稳定版本。
Go稳定版发布时,Go Team承诺后续的版本都会兼容之前的版本。
这对付我们开拓者来说切实其实太主要了,Go后续的版本也一贯在提升内功,从而可以让我们无缝的升级Go版本。

百视通php技巧_我为什么选择运用Go措辞

Go的核心贡献者

百视通php技巧_我为什么选择运用Go措辞
(图片来自网络侵删)

Go紧张有静态措辞、天生并发、内置GC、安全性高、语法大略、交叉编译和编译快速这几个方面的特性。
这些特性决定了Go的三个高富帅特性:运行快、开拓快和支配快,而这些特性都是针对Google碰着的一些痛点来设计的。

图1

在说痛点之前,我们先来理解一下Go的作者和紧张核心开拓者们,图1是Go的三个作者从左到右分别是:Robert Griesemer, Rob Pike 和 Ken Thompson。
Robert在开拓Go之前是Google V8、Chubby和HotSpot JVM的紧张贡献者;Rob紧张是Unix、UTF-8、plan9的作者;Ken紧张是B措辞、C措辞的作者、Unix之父。

图2

再来看看其他核心贡献者,图2中Russ Cox也是目前Go的领导者之一,他和Rob Pike一起领导Go;Ian Lance Taylor是GCC的作者之一,目前卖力GCC的Go实现;Brad Fitzpatrick之前是Memcache的作者,目前紧张是HTTP2的实现作者。
大家可以看到这些作者都是各个领域内的顶尖高手,以是当初我相信一群牛人做出来的Go也一定够牛。

为什么会设计Go措辞?

当初他们为什么会有设计一个新措辞的冲动呢?让我们一起来回顾一下这些历史,大概很多人对他们当年碰着的问题感同身受。

设计Go措辞是为理解决当时Google开拓碰着的以下这些问题:

大量的C++代码,同时又引入了Java和Python

成千上万的工程师

恒河沙数行的代码

分布式的编译系统

数百万的做事器

其紧张有以下几个方面的痛点:

编译慢

失落控的依赖

每个工程师只是用了一个措辞里面的一部分

程序难以掩护(可读性差、文档不清晰等)

更新的花费越来越长

交叉编译困难

以是,他们当时设计Go的目标是为了肃清各种缓慢和笨重、改进各种低效和扩展性。
Go是由那些开拓大型系统的人设计的,同时也是为了这些人做事的;它是为理解决工程上的问题,不是为了研究措辞设计;它还是为了让我们的编程变得更舒适和方便。

但是结合Google当时内部的一些现实情形,这样多工程师都是C系的,以是新设计的措辞一定要易学习,最好是C-like的措辞;由于有太多的分布式系统、太多的开拓者,以是新的措辞一定要可以Scale,这个包括开拓、工程师、代码、支配和依赖;20年没有出新的措辞了,以是新设计的措辞必须是当代化的(例如内置GC)等情形,他们以为要实现这个目标就须要Go成为一个大家都认可的措辞。

末了根据实战履历,他们向着目标设计了Go这个措辞,其紧张的特色有:

没有继续的OO

强同等类型

Interface但是不须要显示申明(Duck Type)

Function 和Method

没有非常处理(Error is value)

基于首字母的可访问特性

不用的Import或者变量引起编译缺点

完全而卓越的标准库包

Go发布之后,很多公司特殊是云打算公司开始用Go重构他们的根本架构,很多都是直接采取Go进行了开拓,最近热火朝天的Docker便是采取Go开拓的。
我们来看看目前为止采取Go的一些国内外公司,国外的如Google、Docker、Apple、Cloud Foundry、CloudFlare、Couchbase、CoreOS、Dropbox、MongoDB、AWS等公司,海内的如阿里云CDN、百度、小米、七牛、PingCAP、华为、金山软件、猎豹移动、饿了么等公司。

Go紧张运用的系统

上面那些基本上便是Go的历史背景和设计初衷,那么目前Go紧张运用于哪些系统呢?

就我知道的来说,目前Go紧张运用不才面这些系统:

做事器编程,以前你如果利用C或者C++做的那些事情,用Go来做很得当,例如处理日志、数据打包、虚拟机处理、文件系统等。

分布式系统、数据库代理器等,例如Etcd。

网络编程,这一块目前运用最广,包括Web运用、API运用、下载运用,而且Go内置的net/http包基本上把我们平常用到的网络功能都实现了。

数据库,前一段韶光Google开拓的Groupcache,Couchbase的部分组建,Tidb,Cockroachdb,Influxdb等。

云平台,目前国外很多云平台在采取Go开拓,CloudFoundy的部分组建,前VMare的技能总监自己出来搞的Apcera云平台。

为什么选择利用Go措辞?

海内很多云创业公司都会选择把Go作为紧张措辞,例如DaoCloud。
为什么会选择Go呢?与其他措辞的运用比较,它有什么优点呢?

1、学习曲线

它包含了类C语法、GC内置和工程工具。
这一点非常主要,由于Go措辞随意马虎学习,以是一个普通的大学生花一个星期就能写出来可以上手的、高性能的运用。
在海内大家都追求快,这也是为什么海内Go盛行的缘故原由之一。

2、效率

Go拥有靠近C的运行效率和靠近PHP的开拓效率,这就很有利的支撑了上面大家追求快速的需求。

3、出身名门、血统纯洁

之以是说Go出身名门,是由于我们知道Go措辞出自Google公司,这个公司在业界的有名度和实力自然不用多说。
Google公司聚拢了一批牛人,在各种编程措辞称雄争霸的局势下推出新的编程措辞,自然有它的计策考虑。
而且从Go措辞的发展态势来看,Google对它这个新的宠儿还是很看重的,Go自然有一个良好的发展出息。
我们看看Go措辞的紧张创造者,血统纯洁这点就可见端倪了。

4、自由高效:组合的思想、无侵入式的接口

Go措辞可以说是开拓效率和运行效率二者的完美领悟,天生的并发编程支持。
Go措辞支持当前所有的编程范式,包括过程式编程、面向工具编程以及函数式编程。
程序员们可以各取所需、自由组合、想怎么玩就怎么玩。

5、强大的标准库

这包括互联网运用、系统编程和网络编程。
Go里面的标准库基本上已经是非常稳定了,特殊是我这里提到的三个,网络层、系统层的库非常实用。

6、支配方便:二进制文件、Copy支配

我相信这一点是很多人选择Go的最大情由,由于支配太方便了,以是现在也有很多人用Go开拓运维程序。

7、大略的并发

它包含了降落心智的并发和大略单纯的数据同步,我以为这是Go最大的特色。
之以是写精确的并发、容错和可扩展的程序如此之难,是由于我们用了缺点的工具和缺点的抽象,Go可以说这一块做的相称大略。

8、稳定性

Go拥有强大的编译检讨、严格的编码规范和完全的软件生命周期工具,具有很强的稳定性,稳定压倒统统。
那么为什么Go比较于其他程序会更稳定呢?这是由于Go供应了软件生命周期(开拓、测试、支配、掩护等等)的各个环节的工具,如go tool、gofmt、go test。

这里引用知乎里一个同学对Go评论的话:最开始准备上线的时候实在心里挺忐忑,毕竟一旦涌现故障,不仅黑锅得自己背,面子也上过不去啊。
还好结果蛮俊秀,自上线后没涌现过一次突发性BUG,降落运维难度的同时还减少了机器的负载。
我相信这也是大多数人用了Go之后的感言。

那么目前Go还存在哪些缺陷呢?以下是我自己在项目开拓中碰着的一些问题:

1.Go的Import包不支持版本,有时候升级随意马虎导致项目不可运行,以是须要自己掌握相应的版本信息。
比较好的征象是从Go 1.5开始Go对此就有重视了并支持Vendor。

2.Go的goroutine一旦启动后,不同的goroutine之间切换不是受程序掌握,runtime调度的时候须要严谨的逻辑,不然goroutine休眠,过一段韶光逻辑结束了却溘然冒出来又实行了,这会导致逻辑出错等情形。
这个目前无解,该当属于调度器的优化。

3.GC延迟有点大,我开拓的日志系统伤过一次,同时在并发很大的情形下,处理很大的日志,GC没有那么快,内存回收不给力,后来经由Profile程序改进之后得到了改进。
目前来看,GC已经优化的非常好了,给大家看一下Go1.5、Go1.6的GC前后比拟图。

图3

图3是Go1.4升级到Go1.5之后的效果,从300ms到了50ms旁边。

图4

图4是从Go1.5升级到Go1.6,从40ms到了2ms旁边,可以说目前GC基本上不是Go的问题了。

4.pkg下面的图片处理库很多bug,还是利用成熟产品好,调用这些成熟库imagemagick的接口比较靠谱。
总而言之,从工程的角度上来看,对付大多数后台运用处景,选择Golang是极为明智的选择。
这样可以很轻松的兼顾运行性能、开拓效率及掩护难度这三大让诸多程序猿欲仙欲去世的点。

个人发展史

说完了Go再来说说我的发展经历,先说一说我的事情经历,我的第一份事情是在百视通,紧张卖力全体IPTV系统的研发,架构设计经历了从零开始到末了承受几百万用户的过程。
但是那个时候我是PHP的追随者,经历了那四年多的磨难也开始让我以为PHP不大适宜开拓后端程序,性能是它最大的问题。
记得奥运会开始之前,我们为了调优性能,连续三天都是在公司奋战,用上了各种技巧,但末了的效果也只是提升了30%旁边。

那时候我全部的事情便是PHP+C。

第二份事情是在盛大,那个时候创新院风风火火,我以为云打算是一个很不错的理念就加入了创新业的云打算院。
也是那个时候我认识了Go,认识了一批C++的牛人,同时也让我深度的打仗了很多系统底层的开拓。
我加入的是CDN团队,我们团队紧张是做事盛大游戏和盛大文学,流量和压力非常大,我以为那两年是发展最快的,自己在系统底层知识上面得到了很大的提升。
那个时候每天都觉得很充足,上班写公司的系统,放工回家坚持记条记和写书,兼职偶尔还要喂奶。

盛大用Go写了好几个别系,印象最深刻的便是大文件分发系统,面对上百台机器的分发,节省到byte的流量算法,Go便是那个时候磨炼出来的,也是那个时候开始beego的第一个版本,基本上是模拟tornado框架的Go实现,用beego写了一个盛大创新院的短域名做事。

但是那时候桥哥开始转向了投资界,盛大创新院也开始走向了没落,同时中国的雾霾开始突如其来的涌现了,记得那一年上海的PM值直接爆表了,儿子那个时候有咽炎,以是我毅然决定出国。

也是机缘巧合,新加坡一家电商公司Zalora打算从PHP转项Go,以是我就去了新加坡,在新加坡我紧张做的是Mobile API。
我用beego实现了他们全体后真个Mobile API,这个过程还是很困难的,由于他们利用了大量的PHP,而且分层数据做的非常不干净,很多数据直接是PHP编码之后存储的,这导致我们须要用Go去实现PHP的反编码。
但是也是那个时候我们实现了beego的swagger支持,一键开拓API运用同时附带文档。

事情每每便是这样有缘分,我儿子在新加坡生病了,我和我老婆两个人无法很好的照顾好两个小孩,然后就又机缘巧合的回到了上海。
总而言之,我是一个从天下上最好的措辞(PHP)转到天下上另一个最好的措辞的人。

本文是谢孟军在EGO首期会员线上分享活动所做的分享。

EGO是高端技能人聚拢和互换的平台,每周四都会约请一位技能大牛作为技能管理公开课的高朋进行分享,本周四晚九点EGO约请到丁喷鼻香园技能副总裁范凯(Robbin),扫描下方二维码关注EGO公众年夜众号,在微信后台回答“公开课”即可获取学习办法。

标签:

相关文章

介绍网站CSS窃取之谜,如何防范与应对

随着互联网的飞速发展,网站设计逐渐成为企业品牌形象的重要组成部分。近年来,一些不法分子通过窃取网站CSS代码,对他人网站进行篡改、...

网站推广 2025-01-03 阅读0 评论0

介绍网站越狱之路,技术突破与伦理反思

在数字时代,网络安全问题日益凸显,其中网站越狱成为了黑客攻击的重要手段。本文将深入探讨网站越狱的技术原理、方法及其背后的伦理问题,...

网站推广 2025-01-03 阅读0 评论0

介绍网络越狱之路,技术与道德的双重考量

随着互联网的普及,智能手机成为了人们日常生活中不可或缺的工具。在享受科技带来的便捷的人们也开始关注到智能手机的安全问题。越狱,作为...

网站推广 2025-01-03 阅读0 评论0

介绍网络黑产,如何识别与防范网络黑手

随着互联网的普及,网络黑产日益猖獗,给广大网民带来了巨大的损失。为了维护网络安全,保障人民群众的合法权益,本文将为您揭秘网络黑产,...

网站推广 2025-01-03 阅读0 评论0