Golang软件工程师:站点可靠性(旧金山、贝尔维尤、洛杉矶或远程职位)
Golang软件工程师:站点可靠性(旧金山、贝尔维尤、洛杉矶或远程职位) Postmates致力于打造一个繁荣的市场平台,让每个人都能从所在城市或社区的任何地方购买商品,并在几分钟内完成配送。我们的服务部署在谷歌云和亚马逊网络服务上,每日数据传输量超过25TB。
在Postmates,站点可靠性工程师(SRE)会嵌入到包含开发者和产品经理的集成团队中。作为SRE,您需要负责确保应用程序的持续稳定运行。您将与产品经理合作制定可持续的新功能开发节奏,并与开发者共同设计和实施可靠的架构。SRE是具备能力的软件开发人员,但通常在底层系统细节方面拥有更深入的专业知识。
作为SRE,您需要通过提供合理建议和基于数据的理性见解来赢得团队成员的尊重,帮助大家维持站点稳定。您将参与开发者团队的24x7值班轮换,协助处理系统管理任务,并在适当时机通过自动化减少重复性工作。您将直接参与应用程序代码开发,与团队中的其他开发者相互指导学习。
我们使用的技术
- 服务器:Python, Go, Erlang
- 云平台:AWS, GCP
- 数据库:BigTable, Postgres, DynamoDB
- 基础设施:Kubernetes, etcd, Consul, Terraform
任职要求
- 4年以上在生产环境中开发和管理水平可扩展及容错系统的经验
- 具备良好的团队协作精神
- 深入理解SQL数据库
- 熟练掌握UNIX/Linux系统,具有开源软件(RabbitMQ、Kubernetes等)使用经验
- 熟悉现代网络架构(HTTP, REST, gRPC)
福利待遇
- 具有竞争力的薪资与丰厚的股票期权计划
- 医疗保险、牙科保险和视力保险
- 提供高效创意工作所需的设备支持
- 带薪育儿假、年假及病假
- 3天带薪志愿者服务日回馈社区
- 免费午餐与开放式零食吧
- 注重实效的工作环境(杜绝办公室政治与迎合文化)
- 宏大的企业愿景(我们需要您共同构建未来,而非仅仅维持现状)
- 全面支持参与开源项目贡献
- 坐落于SOMA区的优越办公室,步行即可到达BART、Muni、AC Transit和SamTrans交通枢纽
更多关于Golang软件工程师:站点可靠性(旧金山、贝尔维尤、洛杉矶或远程职位)的实战教程也可以访问 https://www.itying.com/category-94-b0.html
Jesus_Serratos:
Postmates
你好, 我可以提供帮助。 你可以通过Skype:cisin.justin 或电子邮件:justin@cisinlabs.com 联系我,以便我们进一步讨论此事。
更多关于Golang软件工程师:站点可靠性(旧金山、贝尔维尤、洛杉矶或远程职位)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
作为使用Go语言构建高可用分布式系统的工程师,Postmates的SRE职位描述展现了典型的现代云原生技术栈。以下从Go开发角度分析关键技术点及实现示例:
1. 基于Go的gRPC服务治理
// 使用gRPC拦截器实现SRE关注的监控指标收集
package main
import (
"context"
"log"
"net"
"time"
"google.golang.org/grpc"
"github.com/prometheus/client_golang/prometheus"
)
var (
rpcDuration = prometheus.NewHistogramVec(
prometheus.HistogramOpts{
Name: "grpc_request_duration_seconds",
Help: "RPC latency distributions",
},
[]string{"method"},
)
)
func monitoringInterceptor(ctx context.Context, req interface{},
info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
start := time.Now()
resp, err := handler(ctx, req)
duration := time.Since(start)
rpcDuration.WithLabelValues(info.FullMethod).Observe(duration.Seconds())
return resp, err
}
func main() {
s := grpc.NewServer(grpc.UnaryInterceptor(monitoringInterceptor))
// 注册服务...
lis, _ := net.Listen("tcp", ":50051")
s.Serve(lis)
}
2. Kubernetes Operator模式自动化
// 使用client-go实现自定义资源控制器
package main
import (
"context"
"fmt"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/cache"
)
type DeploymentScaler struct {
k8sClient *kubernetes.Clientset
}
func (d *DeploymentScaler) Run(stopCh <-chan struct{}) {
informer := cache.NewSharedIndexInformer(
// 监控Deployment资源变化
&cache.ListWatch{},
&appsv1.Deployment{},
time.Minute,
cache.Indexers{},
)
informer.AddEventHandler(cache.ResourceEventHandlerFuncs{
UpdateFunc: func(oldObj, newObj interface{}) {
newDep := newObj.(*appsv1.Deployment)
// 根据业务指标自动扩缩容逻辑
d.autoScale(newDep)
},
})
informer.Run(stopCh)
}
func (d *DeploymentScaler) autoScale(deployment *appsv1.Deployment) {
// 实现基于QPS/延迟的自动扩缩容
currentReplicas := *deployment.Spec.Replicas
desiredReplicas := calculateDesiredReplicas(deployment)
if currentReplicas != desiredReplicas {
deployment.Spec.Replicas = &desiredReplicas
d.k8sClient.AppsV1().Deployments(deployment.Namespace).
Update(context.TODO(), deployment, metav1.UpdateOptions{})
}
}
3. 分布式系统容错处理
// 使用hystrix模式实现服务熔断
package main
import (
"context"
"errors"
"time"
"github.com/afex/hystrix-go/hystrix"
)
func setupHystrix() {
hystrix.ConfigureCommand("database_call", hystrix.CommandConfig{
Timeout: 1000,
MaxConcurrentRequests: 100,
ErrorPercentThreshold: 25,
})
}
func callWithCircuitBreaker(ctx context.Context) error {
return hystrix.Do("database_call", func() error {
// 数据库调用逻辑
return dbQuery(ctx)
}, func(err error) error {
// 降级策略
return fallbackQuery()
})
}
4. 基础设施即代码实践
// 使用Terraform Provider SDK开发自定义资源
package main
import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
func resourcePostmatesQueue() *schema.Resource {
return &schema.Resource{
Create: resourceQueueCreate,
Read: resourceQueueRead,
Update: resourceQueueUpdate,
Delete: resourceQueueDelete,
Schema: map[string]*schema.Schema{
"name": {
Type: schema.TypeString,
Required: true,
},
"throughput": {
Type: schema.TypeInt,
Optional: true,
Default: 1000,
},
},
}
}
func resourceQueueCreate(d *schema.ResourceData, meta interface{}) error {
// 在AWS/GCP创建消息队列的实现
client := meta.(*CloudClient)
queueName := d.Get("name").(string)
queueID, err := client.CreateQueue(queueName)
if err != nil {
return err
}
d.SetId(queueID)
return resourceQueueRead(d, meta)
}
这些示例展示了Go语言在构建可靠分布式系统中的实际应用,包括服务监控、自动化运维、容错处理和基础设施管理。Postmates技术栈中的Kubernetes、gRPC等组件都有成熟的Go生态支持,适合开发高性能的站点可靠性解决方案。

