后端技术栈

这里是本公司后端开发使用到的技术栈,如果你打算来应聘后端相关职位不妨一看,如果你成功被招募那么这些技术栈将是你需要长期使用的。

编程语言

本公司后端使用的最核心语言是 golang,并且预期很长一段时间类都不会找到更合适的语言,公司后端核心业务超过 90% 都是直接由 golang 编写的。

因为 golang 可以通过 cgo 调用 c 代码,所以我们也希望你对 c 语言由基础的认识。

我们的系统运行在 linux 下,开发环境也是首推 linux,所以我们使用 bash 做为通用的自动化脚本。

bash 能够提供的功能有限,所以我们同时也使用 deno 来完成一些比 bash 更复杂一点的自动化功能。

数据存储

核心数据我们采用 mariadb 进行存储,主要的业务逻辑都使用 mariadb 存储,因为她不但开源并且有丰富的第三方工具可以使用。

对于一些嵌入式数据,我们推荐使用 bbolt 但也不排斥使用 sqlite 但因为我们核心语言使用 golang, bbolt 与 sqlite 相比不需要使用 cgo 这在开发编译和部署时都会更加方便。

对于配置档案我们首推的是 jsonnet 她是由 google 研发的一种 json 扩展格式,不但灵活,并且有很多其它配置语言没有的高级特性,同样因为由 google 维护所以库质量也远超其它配置语言。此外我们也接受使用 yaml 作为配置因为某些时候 yaml 对人类书写很友好。其它的 json ini 等都是我们尽量避免使用的配置语言,但如果你有比 jsonnet 更好的主意我们很欢迎!

通信协议

我们对外的接口采用标准的 http 协议,所以开发者需要对 http/http2 以及 tls 有基本的了解,因为协议处理都有库支持你不必对每个细节都了如指掌但需要大概知道它们可能会有什么影响。

此外我们通常不使用 http 的开发框架,我们首先使用 grpc 框架来构造系统,因为 grpc 比 http 更容易且高效,我们使用标准工具将 grpc 转到 http 协议供外部系统调用,故我们需要你同时对 grpc 有一定的了解。

当然对于一些特别简单的 http 应用,我们也可能采用直接进行 http 开发,对于 golang 中我们使用 gin 作为 http 的基础开发工具

虚拟化

我们的系统和开发环境通常都使用 Kubernetes 来架构,所以你至少需要有 Kubernetes 的一些基本常识以便能够正常的进行日常开发工作。

此外在系统部署时,我们也可能会使用 docker-compose 而非 Kubernetes 来部署,因为如果客户只有一台服务器并且不太需要动态扩容 docker-compose 比 Kubernetes 能更有效的利用单台服务器的资源。

无论 kubernetes 还是 compose 都需要你每天和容器打交道。

网关

网关我们使用 nignxenvoy

nginx 主要用作 web 静态站点以及一些历史系统的反向代理。

envoy 则主要作为 api 网关,它代理了所有对外开放的接口,同时也为内部系统提供了一个统一的内部访问入口。总之 api 层面,内外系统都是与 envoy 进行 http/grpc 通信。

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注