高薪招聘远程资深Golang工程师
高薪招聘远程资深Golang工程师 Unikraft 是一家在云计算领域快速发展的初创公司。 我们相信,虽然云平台功能强大且性能卓越,但它们建立在遗留软件之上,效率低下(且成本高昂),令人困扰。 基于屡获殊荣的研究和开源技术,我们构建了 Unikraft Cloud,这是一个下一代云平台,能够实现数量级更高的效率、性能和安全性。
在 Unikraft 担任 高级 Golang 工程师,您将帮助将 Unikraft 与更广泛的云工具生态系统集成,以促进其在 Unikraft 开源社区或公司客户中的采用,并协助开发我们云平台的内部系统。 我们尤其期待寻找具有前瞻性思维、顶尖的工程师,他们需要精通 Go 语言和现代云原生技术。
如果您对分布式系统充满热情,喜欢解决具有挑战性的技术问题,并且在快节奏的初创环境中茁壮成长,我们期待您的加入!
您将要做的事情
我们是一个小型多学科团队,您将承担多种职责,包括:
- 构建云原生应用:设计、开发和维护用 Go 编写的云原生应用程序和服务,利用可扩展性和可靠性的最佳实践。
- 架构分布式系统:致力于可扩展架构、微服务和“容器化”应用程序。
- 贡献于 CI/CD 流水线:协作开发自动化 CI/CD 工作流,以简化构建、测试和部署。
- 优化性能:识别瓶颈并提高系统性能、可用性和安全性。
- 与团队协作:与产品、质量保证和客户成功团队紧密合作,将需求转化为稳健的技术解决方案。
- 学习与成长 — 与其他工程师合作,在基础设施、云系统和事件管理方面获得实践经验。
- 记录流程 — 为流程、系统和工具编写清晰、简洁的文档,以帮助团队高效运作。
您需要具备的条件
经验
- 精通 Go 语言,拥有 4 年以上构建分布式系统的生产级经验,了解其生态系统、工具和内部原理。
- 熟悉可观测性工具(最好是 Prometheus、Grafana 和 OpenTelemetry)。
- 对 CNCF 生态系统 及相关工具有良好的理解。
- 具备 Kubernetes 和 容器运行时(如 Docker/containerd/podman)内部原理的实践经验。
- 熟悉云平台(最好是 AWS)。
- 有构建自动化工具插件(最好是 Terraform 或类似工具)的经验。
- 精通分布式系统的调试和故障排除。
- 有构建高性能、低延迟系统的经验。
心态
- 对云原生技术充满热情。
- 热衷于构建可靠、高性能的系统。
- 具备强大的解决问题能力和好奇、分析的心态。
- 渴望学习并接受新的挑战。
- 具备良好的沟通技巧,是团队合作者。
加分项
- 有 OCI Distribution、OCI Image Specification 及其他标准及其实现的经验。
- 熟悉 虚拟化 解决方案,如 QEMU/KVM。 Micro-VMMs(如 Cloud-Hypervisor 或 Firecracker)是加分项。
- 有在 CNCF 生态系统中 贡献 或使用 开源项目 的经验。
为什么加入我们
- 帮助革新云计算运行时的未来,同时拥抱不断发展的现代技术。
- 与一个充满活力、顶尖的技术和创业团队并肩工作。
- 做出有影响力的贡献,并帮助我们快速发展的公司塑造未来。
- 在任何您想要的地方工作。 我们每天实时协作,但都在自己舒适的家中工作。
薪酬与福利
- 具有竞争力的薪酬和职业发展机会。
- 全年总计六周的休假时间供您使用。
- 慷慨的设备预算,用于购买任何您需要以发挥最佳工作状态的东西。
- 以乐趣为重点的年度团队聚会,我们亲自聚在一起充电并建立更好的关系。
感兴趣吗?
请将您的简历以及一封简短说明您为何对这个职位感到兴奋的邮件发送至 careers+senior-golang-engineer@unikraft.cloud
更多关于高薪招聘远程资深Golang工程师的实战教程也可以访问 https://www.itying.com/category-94-b0.html
我目前不打算找工作,但这个项目看起来……非常酷。有一个问题:既然理念是不为闲置时间付费(就像Google Cloud Run那样,按使用量计费),为什么定价方案看起来像是静态定价套餐?
更多关于高薪招聘远程资深Golang工程师的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
嘿!这正是我们目前正忙于处理的事情之一,而新角色的部分职责将有助于推动其发展。
这是一个非常吸引人的职位机会,Unikraft 正在解决云计算领域一个核心的痛点。从职位描述来看,这不仅仅是一个普通的后端开发岗位,而是一个需要深入理解云原生基础设施、性能调优和开源生态系统的平台级工程角色。
对于符合要求的资深 Go 工程师,这里有几个技术层面的亮点和可能涉及的工作内容示例:
1. 与云工具生态集成: 这很可能意味着需要为 Unikraft 运行时开发插件或 Provider,使其能够被 Terraform、Pulumi 或 Crossplane 等 IaC 工具管理。例如,开发一个 Terraform Provider 来管理 Unikraft 实例:
// 示例:一个简化的 Terraform Provider Resource 结构,用于创建 Unikraft 实例
package main
import (
"context"
"github.com/hashicorp/terraform-plugin-framework/resource"
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
"github.com/hashicorp/terraform-plugin-framework/types"
"unikraft-sdk-go/unikraft" // 假设的 Unikraft SDK
)
type unikraftInstanceResource struct {
client *unikraft.Client
}
func (r *unikraftInstanceResource) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) {
resp.Schema = schema.Schema{
Attributes: map[string]schema.Attribute{
"id": schema.StringAttribute{Computed: true},
"name": schema.StringAttribute{Required: true},
"kernel_image": schema.StringAttribute{Required: true},
"memory_mb": schema.Int64Attribute{Required: true},
"vcpus": schema.Int64Attribute{Required: true},
},
}
}
func (r *unikraftInstanceResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateRequest) {
var plan unikraftInstanceResourceModel
diags := req.Plan.Get(ctx, &plan)
// ... 调用 Unikraft API 创建实例
instance, err := r.client.CreateInstance(ctx, unikraft.CreateInstanceRequest{
Name: plan.Name.ValueString(),
KernelImage: plan.KernelImage.ValueString(),
MemoryMB: int(plan.MemoryMB.ValueInt64()),
VCPUs: int(plan.VCPUs.ValueInt64()),
})
// ... 处理响应和状态
}
2. 开发云平台内部系统 & 性能优化: 这涉及到构建高并发的控制平面服务、调度器或监控组件。需要精通 Go 的并发模型、性能剖析和与底层虚拟化层的交互。
// 示例:一个使用 context 和 goroutine 池管理 Unikraft 实例生命周期的简单调度器片段
package scheduler
import (
"context"
"sync"
"unikraft-sdk-go/unikraft"
)
type InstanceManager struct {
client *unikraft.Client
workQueue chan *InstanceTask
workerPool chan struct{}
wg sync.WaitGroup
}
type InstanceTask struct {
Ctx context.Context
Action string // "create", "delete", "pause"
Instance *unikraft.Instance
ResultCh chan<- error
}
func (im *InstanceManager) Start(numWorkers int) {
im.workQueue = make(chan *InstanceTask, 100)
im.workerPool = make(chan struct{}, numWorkers)
for i := 0; i < numWorkers; i++ {
go im.worker()
}
}
func (im *InstanceManager) worker() {
for task := range im.workQueue {
im.workerPool <- struct{}{} // 获取令牌
go func(t *InstanceTask) {
defer func() { <-im.workerPool }()
var err error
switch t.Action {
case "create":
_, err = im.client.CreateInstance(t.Ctx, t.Instance)
case "delete":
err = im.client.DeleteInstance(t.Ctx, t.Instance.ID)
}
t.ResultCh <- err
}(task)
}
}
// 使用 OpenTelemetry 进行关键操作追踪
func (im *InstanceManager) CreateInstance(ctx context.Context, req *unikraft.CreateInstanceRequest) (*unikraft.Instance, error) {
ctx, span := otel.Tracer("instance-manager").Start(ctx, "CreateInstance")
defer span.End()
// ... 业务逻辑
}
3. 可观测性集成: 职位要求熟悉 Prometheus 和 OpenTelemetry,这意味着需要为 Unikraft 平台的核心服务暴露丰富的指标、追踪和日志。
// 示例:为服务暴露 Prometheus 指标
package metrics
import (
"net/http"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
var (
instanceCreationRequests = prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "unikraft_instance_creation_requests_total",
Help: "Total number of instance creation requests.",
},
[]string{"result"}, // "success", "error"
)
instanceCreationDuration = prometheus.NewHistogram(
prometheus.HistogramOpts{
Name: "unikraft_instance_creation_duration_seconds",
Help: "Duration of instance creation operations.",
Buckets: prometheus.DefBuckets,
},
)
)
func init() {
prometheus.MustRegister(instanceCreationRequests, instanceCreationDuration)
}
func StartMetricsServer(addr string) error {
http.Handle("/metrics", promhttp.Handler())
return http.ListenAndServe(addr, nil)
}
// 在业务代码中记录指标
func createInstanceHandler(w http.ResponseWriter, r *http.Request) {
timer := prometheus.NewTimer(instanceCreationDuration)
defer timer.ObserveDuration()
err := doCreateInstance()
if err != nil {
instanceCreationRequests.WithLabelValues("error").Inc()
// ... 处理错误
return
}
instanceCreationRequests.WithLabelValues("success").Inc()
// ... 返回成功
}
4. 与 OCI 标准及虚拟化层交互: 这是该职位最具挑战性和差异化的部分。可能需要处理 OCI 镜像的构建、分发,或者与 QEMU/Cloud Hypervisor 等虚拟化后端进行交互。
// 示例:解析 OCI 镜像 Manifest 的简化逻辑(使用 containerd 库)
package oci
import (
"context"
"fmt"
"github.com/containerd/containerd/images/oci"
"github.com/opencontainers/image-spec/specs-go/v1"
)
func inspectOCIManifest(ctx context.Context, path string) (*v1.Manifest, error) {
// 从文件系统加载 OCI 镜像布局
provider, err := oci.NewProvider(path)
if err != nil {
return nil, fmt.Errorf("failed to create OCI provider: %w", err)
}
// 获取镜像索引或 Manifest
// ... 这里会涉及对索引、Manifest 和层(Layers)的处理
// 这对于将传统容器镜像转换为 Unikraft 可运行的镜像格式至关重要
return nil, nil // 简化返回
}
这个职位要求工程师不仅要有深厚的 Go 语言功底和分布式系统经验,更需要将知识垂直应用到特定的基础设施领域(Unikernels、虚拟化)。对于热衷于底层技术、追求极致性能并希望参与塑造云未来形态的工程师来说,这是一个绝佳的机会。技术栈非常现代且硬核,从 CNCF 生态到虚拟化,挑战与成长空间并存。

