写点什么

Go 应用场景与适应项目

用户头像
hanaper
关注
发布于: 1 小时前
Go应用场景与适应项目

Go 应用领域

鉴于 Go 语言的特点和设计的初衷,Go 语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go 语言广泛应用于 Web 应用、API 应用、下载应用等;除此之外,Go 语言还适用于内存数据库和云平台领域,目前国外很多云平台都是采用 Go 开发。

  • 服务器编程

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

  • 微服务

现在越来越多新的项目采用微服务架构,前面介绍的优秀项目中也看到很多 Go 提供的微服务框架,如 git-kit、go-micro 等。

举些具体公司的例子。

比如今日头条,2017 的一篇文章今日头条使用 Go 构建了千万级微服务,其中说到有 80%的流量都跑在 Go 上,其中提到头条还开发了自己的一套微服务框架;还有 B 站也是采用的 Go 开发。

  • 云平台

云服务很多都是采用 Go 进行开发,比如国内著名的七牛云是全站采用 Go 开发;还有如盛大 CDN、阿里云 CDN,华为云等。而且云平台基础设施如 docker、kubernetes 等也是 Go 开发;

  • Web

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

曾经的 web 领域主要是 Java、C#和 PHP 这三大语言。而现在基本每种语言都有自己完善的 web 生态,Go 也是如此,标准库已经自带成熟简单的 net/http 包。而且 Go 的主流 Web 开发框架也有很多,比如 gin、beego、iris 等等。

  • 区块链

当前两个主流的区块链框架,分布式记账本框架 hyperledger 和以太坊合约框架 go-ethereum 都是使用 Go 开发; 再比如 fabric 是目前最知名的联盟链, 也有 go 语言的版本

某招聘网站的区块链职位要求技能的分析,如下图。

  • 分布式

诸如数据库中间件、分布式系统/分布式存储、代理服等项目很多是采用 Go 开发,比如前面的介绍 cockroachdb、etcd 等;

京东云消息推送系统、云存储等都有使用 Go 做开发、360 的推送服务也在使用。

Go官方有篇博客blog.golang.org/qihoo

就是出自他们。

  • 其他

除了上面介绍的这些,其实很多领域都能看到 Go 的影子,如直播领域、游戏开发、Al 算法等等,在其中 Go 为后台的调度系统、任务处理,批量的数据计算、系统监控等都提供了各种优秀的解决方案。

比如知乎也使用 Go 进行重构了自己的推荐系统,查看文章舍弃 Python,为什么知乎选用 Go 重构推荐系统?

Go 不适合领域

  • GUI: 例如开发 IDE、移动 App

  • 数据分析、ML、大数据:需要极完整的集合框架、流畅的推导式、丰富的高阶函数

  • 分布式计算:需要分布化地远程执行闭包,自动地序列化/反序列化;而不是新起进程执行二进制分发、进程间交换数据。移动闭包/Lambda 的成本会小于移动大块数据

  • 插件化定制、进程内热升级:需要语言虚拟机的支持,例如动态类加载,依赖注入

  • 企业软件: 需要 COTS 交付、二次开发,基于非源代码的接口扩展,可以在重启或运行时启用新特性,无需编译整个系统的源代码。这类软件常常用像 annotation 一样的 APT 机制对语言元素做一定程度的元编程或修改

  • 超大型软件和团队:需要很明确地 on the fly 地知道哪个接口被哪些类型实现了,哪些类型实现了哪些接口。Eclipse 有 1000W 行 LOC,InteliJlDEA 有 700W,JDK 自身也有 700W,Hadoop+HBase 有 400w,JBoss 等应用服务器有 600W,Spring 框架有 200W,其它第三方库...日常开发的 JAVA 商用软件,你常常跟几千万 LOC 打交道。但好像 GO 超过 50W 的开源项目只有限的 Docker、K8S 等。GO 的开源生态系统仍然极其弱小,能用于商用产品质量的开源库只有 Beego 等屈指可数的几个。许多依赖开源库只有 2 位数的 star。

Go 优秀项目

语言的目标是用于项目开发,并能打造出很多优秀的产品。那么,Golang 有哪些好像优秀的项目呢?不搜不知道,一搜吓一跳!列举一下我收集到的 golang 开发的优秀项目,如下:

  • docker: golang 头号优秀项目,通过虚拟化技术实现的操作系统与应用的隔离,也称为容器;

  • kubernetes: 由 google 开发,简称 k8s,k8s 和 docker 是当前容器化技术的重要基础设施;

  • etcd: 一种可靠的分布式 KV 存储系统,有点类似于 zookeeper,可用于快速的云配置;

  • codis: 由国人开发提供的一套优秀的 redis 分布式解决方案;

  • tidb: 国内 PingCAP 团队开发的一个分布式 SQL 数据库,国内很多互联网公司在使用;

  • influxdb: 时序型 DB,着力于高性能查询与存储时序型数据,常用于系统监控与金融领域;

  • cockroachdb: 云原生分布式数据库,继 NoSQL 之后出现的新的概念,称为 NewSQL 数据库;

  • beego: 国人开发的一款及其轻量级、高可伸缩性和高性能的 web 应用框架;

  • caddy: 类比于 nginx,一款开源的,支持 HTTP/2 的 Web 服务端;

  • flynn: 一款开源的 paas 平台;

  • consul: HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置;

  • go-kit: Golang 相关的微服务框架,这类框架还有 go-micro、typthon;

  • go-ethereum: 官方开发的以太坊协议实现;

  • couchbase: 是一个非关系型数据库;

  • nsq: 一款高性能、高可用消息队列系统,每天能处理数十亿条的消息;

  • packer: 一款用来生成不同平台的镜像文件的工具,例如 VM、vbox、AWS 等;

  • doozer: 高速的分布式数据同步服务,类似 ZooKeeper;

  • tsuru: 开源的 PAAS 平台,和 SAE 实现的功能一模一样;

  • gor: 一款用 Go 语言实现的简单的 http 流量复制工具;

世界正在使用Go的企业

国内大厂开源的 Golang 项目

  • 字节跳动:kitex,开源

  • 滴滴:有自己的一套微服务框架,未开源

  • 腾讯:TarsGo,开源,并且是 Linux 基金会项目

  • B 站:kratos,开源

  • 斗鱼:Jupiter,开源

  • 好未来:go-zero,开源

  • 阿里:dubbo-go,开源

  • 华为:Go Chassis,开源

  • 知乎:内部改用 go 重构后端

Go 相关网址

用户头像

hanaper

关注

还未添加个人签名 2018.05.07 加入

还未添加个人简介

评论

发布
暂无评论
Go应用场景与适应项目