高级Golang远程工程师(后端/数据处理)职位讨论

高级Golang远程工程师(后端/数据处理)职位讨论 Vaayu 的使命是通过帮助品牌(从时尚、美容到消费品、健康及其他领域)实时跟踪、削减并可靠地传达其气候影响,以实现零售业的脱碳。我们基于科学的平台提供精细、自动化且准确的碳排放计算,其背后由超过 60 万个基于活动的数据点驱动,使品牌能够轻松了解其排放情况,并在整个价值链中采取行动以实现减排目标。

我们正在寻找一位经验丰富的 Golang 后端工程师,需精通关系型和非关系型数据库,并对数据工程有浓厚兴趣。 在此职位中,您将从头开始设计和构建高性能、可扩展的后端服务与数据基础设施,最终目标是为数据科学和分析提供干净的数据集。

如果您希望在一家目标驱动的初创公司工作,并成为定义最先进技术以大规模减少碳排放的团队一员,Vaayu 可能是您职业生涯下一步的理想选择。

您的日常工作将包括什么?

  • 从头开始设计、实施和维护可扩展的后端服务和数据管道,并拥有高度的自主权;
  • 与生命周期评估专家、数据科学家和后端工程师合作,解决数据挑战;
  • 通过选择合适的技术,从基于 Google Cloud Platform 的系统中提取和转换数据,形成相关的结构;
  • 与工程团队紧密合作,处理数据预处理、数据结构和服务集成;

我们正在寻找的人才

  • 拥有多年 Golang 生产环境经验;
  • 在关系型和非关系型数据库方面拥有丰富经验(例如 PostgreSQL、BigQuery);
  • 能够有效设计性能良好的数据模型,并优化查询以访问这些模型;
  • 对数据工程有浓厚兴趣,并渴望快速学习和理解新技术——具备大数据技术和大型分析系统经验者优先;
  • 对解决气候变化问题抱有积极主动的热情;
  • 英语流利。

我们提供什么

  • 在一家由可持续发展专家领导的使命驱动型初创公司工作
  • 获得一家快速发展、前景广阔的公司的股权
  • 完全远程工作,地点可在欧洲或同等时区的任何地方
  • 与一个多元化、思想开放且国际化的团队合作
  • 参加我们每半年一次的线下聚会,在欧洲某个目的地相聚

请注意,这是一个完全远程全职工作机会。

点击此处申请


更多关于高级Golang远程工程师(后端/数据处理)职位讨论的实战教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

你好 @tamas_szorcsik 我已经给你发了私信,请查收。 谢谢

更多关于高级Golang远程工程师(后端/数据处理)职位讨论的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你好,

我很乐意为你提供帮助。

如需进一步详细讨论,请通过电子邮件 lauren@cisinlabs.com 或 Skype(账号:live:lauren_8606)与我联系。

期待你的回复。

谢谢, Lauren W.

您好 @tamas_szorcsik

我已经了解了您的需求,并且很乐意为您提供 Golang 方面的支持。

我拥有一支 Golang 专家团队,可以协助您处理持续性的任务。

请通过 Rishabh@plaxonic.com 与我联系,以便我们可以更详细地讨论此事。

此致, Rishabh

这是一个非常吸引人的职位,尤其对于希望在Golang和数据工程交叉领域深耕的资深工程师。Vaayu的技术栈和使命与Go语言的优势高度契合。以下从技术角度分析这个职位可能涉及的核心工作,并给出一些Go代码示例,说明如何构建相关服务。

技术栈分析与Go的实现优势

职位描述强调高性能、可扩展的后端服务数据管道,这正是Go的强项。其并发模型(goroutines, channels)和高效的运行时,非常适合处理来自60多万个数据点的数据流和实时计算。

1. 数据管道 (Data Pipelines)

使用Go构建并发数据管道,从GCP服务(如Pub/Sub, Cloud Storage)提取数据,进行转换,并加载到BigQuery或PostgreSQL中。

package main

import (
    "context"
    "encoding/json"
    "log"
    "cloud.google.com/go/pubsub"
    "cloud.google.com/go/bigquery"
)

// 定义从Pub/Sub接收的数据结构
type EmissionEvent struct {
    ProductID string  `json:"product_id"`
    Activity  string  `json:"activity"`
    CO2e      float64 `json:"co2e"`
    Timestamp string  `json:"timestamp"`
}

// 处理消息的函数
func processMessage(ctx context.Context, msg *pubsub.Message) {
    var event EmissionEvent
    if err := json.Unmarshal(msg.Data, &event); err != nil {
        log.Printf("Failed to unmarshal message: %v", err)
        msg.Nack() // 通知Pub/Sub稍后重试
        return
    }

    // 在这里进行数据清洗、转换或富化
    transformedEvent := transformEvent(event)

    // 写入BigQuery
    if err := insertIntoBigQuery(ctx, transformedEvent); err != nil {
        log.Printf("Failed to insert into BigQuery: %v", err)
        msg.Nack()
        return
    }

    log.Printf("Processed event for product: %s", event.ProductID)
    msg.Ack() // 成功处理,确认消息
}

func transformEvent(event EmissionEvent) EmissionEvent {
    // 示例转换:将活动类型标准化
    // 这里可以添加复杂的业务逻辑,如调用外部API获取补充数据
    if event.Activity == "shipping_air" {
        event.Activity = "transportation_air_freight"
    }
    return event
}

func insertIntoBigQuery(ctx context.Context, event EmissionEvent) error {
    // 初始化BigQuery客户端和插入操作
    // client, err := bigquery.NewClient(ctx, "your-project-id")
    // inserter := client.Dataset("emissions").Table("events").Inserter()
    // return inserter.Put(ctx, []*EmissionEvent{&event})
    return nil // 示例占位符
}

func main() {
    ctx := context.Background()
    // 初始化Pub/Sub订阅者客户端
    // client, err := pubsub.NewClient(ctx, "your-project-id")
    // sub := client.Subscription("your-subscription-id")
    
    // 使用goroutines并发处理消息
    // err = sub.Receive(ctx, func(ctx context.Context, msg *pubsub.Message) {
    //     go processMessage(ctx, msg) // 为每条消息启动一个goroutine
    // })
}

2. 高性能API服务

为前端或数据科学团队提供清洁数据的API端点。使用ginecho这类高性能框架。

package main

import (
    "net/http"
    "github.com/gin-gonic/gin"
    "gorm.io/gorm"
    _ "gorm.io/driver/postgres"
)

type ProductEmission struct {
    gorm.Model
    ProductID   string  `json:"product_id"`
    TotalCO2e   float64 `json:"total_co2e"`
    Category    string  `json:"category"`
}

var db *gorm.DB

func main() {
    // 初始化数据库连接 (PostgreSQL)
    // dsn := "host=... user=... password=... dbname=... port=... sslmode=..."
    // db, _ = gorm.Open(postgres.Open(dsn), &gorm.Config{})

    r := gin.Default()

    // 为数据科学团队提供聚合数据的API
    r.GET("/api/v1/analytics/emissions", getEmissionsSummary)
    r.GET("/api/v1/products/:id/breakdown", getProductBreakdown)

    r.Run(":8080")
}

func getEmissionsSummary(c *gin.Context) {
    var results []struct {
        Category string  `json:"category"`
        TotalCO2e float64 `json:"total_co2e"`
    }
    // 使用GORM执行复杂的聚合查询
    db.Model(&ProductEmission{}).
        Select("category, SUM(total_co2e) as total_co2e").
        Group("category").
        Scan(&results)

    c.JSON(http.StatusOK, gin.H{"data": results})
}

func getProductBreakdown(c *gin.Context) {
    productID := c.Param("id")
    var emissions []ProductEmission
    // 从PostgreSQL查询
    db.Where("product_id = ?", productID).Find(&emissions)
    c.JSON(http.StatusOK, gin.H{"product_id": productID, "breakdown": emissions})
}

3. 数据模型与查询优化

职位要求能设计性能良好的数据模型。在Go中,可以使用结构体标签来定义ORM映射或BigQuery模式。

// 为PostgreSQL设计的GORM模型,包含索引以提高查询速度
type SupplyChainActivity struct {
    ID          uint    `gorm:"primaryKey"`
    ProductID   string  `gorm:"index:idx_product_activity"` // 复合索引
    ActivityID  string  `gorm:"index:idx_product_activity"`
    EmissionFactor float64 `json:"emission_factor"`
    Quantity    float64 `json:"quantity"`
    CalculatedCO2e float64 `json:"calculated_co2e"`
    // 使用GORM钩子在保存前计算CO2e
    BeforeSave(tx *gorm.DB) error {
        t.CalculatedCO2e = t.EmissionFactor * t.Quantity
        return nil
    }
}

// 为BigQuery流式插入设计的结构体
type BQActivityRecord struct {
    ProductID       string  `bigquery:"product_id"`
    Activity        string  `bigquery:"activity"`
    EmissionFactor  float64 `bigquery:"emission_factor"`
    Quantity        float64 `bigquery:"quantity"`
    CalculatedCO2e  float64 `bigquery:"calculated_co2e"`
    InsertID        string  `bigquery:"insert_id"` // 用于去重
}

关键挑战与Go的应对

  1. 实时计算:品牌需要实时跟踪影响。Go的goroutine可以并行处理成千上万个产品的排放计算。
  2. 数据准确性:平台基于科学。Go的强类型系统和测试框架(如testing包)有助于构建可靠、无错误的计算引擎。
  3. 与GCP集成:Go对Google Cloud有原生且成熟的支持库(cloud.google.com/go),访问BigQuery、Pub/Sub、Cloud Tasks等服务非常高效。
  4. 服务集成:需要与数据科学团队的服务(可能是Python)集成。Go可以轻松构建gRPC服务或RESTful API来提供清洁数据。

这个职位是典型的“Go语言+云原生+数据工程”组合,技术挑战性强,且具有积极的社会影响力。候选人需要展示出使用Go构建并发系统、优化数据库查询以及与云平台深度集实的生产级经验。

回到顶部