CloudNative 架构

CloudNative|云原生应用架构|云原生架构|容器化架构|微服务架构|平台架构|基础架构


  • 首页

  • 标签

  • 分类

  • 归档

  • k8s离线安装包

  • 搜索

Go 代码安全指南

发表于 2021-06-01 | 分类于 Golang , 代码安全 | | 热度: ℃
字数统计: 6,162 字 | 阅读时长 ≈ 29 分钟

通用类

1. 代码实现类

1.1 内存管理

1.1.1【必须】切片长度校验

  • 在对slice进行操作时,必须判断长度是否合法,防止程序panic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// bad: 未判断data的长度,可导致 index out of range
func decode(data []byte) bool {
if data[0] == 'F' && data[1] == 'U' && data[2] == 'Z' && data[3] == 'Z' && data[4] == 'E' && data[5] == 'R' {
fmt.Println("Bad")
return true
}
return false
}

// bad: slice bounds out of range
func foo() {
var slice = []int{0, 1, 2, 3, 4, 5, 6}
fmt.Println(slice[:10])
}

// good: 使用data前应判断长度是否合法
func decode(data []byte) bool {
if len(data) == 6 {
if data[0] == 'F' && data[1] == 'U' && data[2] == 'Z' && data[3] == 'Z' && data[4] == 'E' && data[5] == 'R' {
fmt.Println("Good")
return true
}
}
return false
}
阅读全文 »

50 张图,掌握 Kubernetes 中优雅且零停机部署的实现

发表于 2021-02-02 | 分类于 kubernetes , 容器 | | 热度: ℃
字数统计: 5,719 字 | 阅读时长 ≈ 22 分钟

前言

在本文中,您将了解如何在Pod启动或关闭时防止连接异常,并将学习如何以优雅的方式关闭长时间运行的任务。
graceful shutdown

阅读全文 »

图文带你了解 Go 中的分配

发表于 2020-12-21 | 分类于 Golang , Allocations | | 热度: ℃
字数统计: 3,788 字 | 阅读时长 ≈ 15 分钟

介绍

得益于了 Go 运行时高效的内置内存管理,我们通常能够在程序中优先考虑正确性和可维护性,而不需要过多考虑如何进行分配的细节。不过,有时我们可能会发现代码中的性能瓶颈,并希望进行更深入的研究。

任何使用 -benchmem 标志运行基准测试的人都会在输出中看到 allocs/op 的统计。在这篇文章中,我们将看看什么算作一个 alloc,以及我们可以做什么来影响这个数字。

1
BenchmarkFunc-8  67836464  16.0 ns/op  8 B/op  1 allocs/op

阅读全文 »

如何在 Go 中编写无 Bug 的 Goroutines?

发表于 2020-12-15 | 分类于 golang , goroutines | | 热度: ℃
字数统计: 2,634 字 | 阅读时长 ≈ 10 分钟

GO 并发

Go 以其并发性著称,深受人们喜爱。go 运行时管理轻量级线程,称为 goroutines。goroutine 的编写非常快速简单。

你只需在你想异步执行的函数前输入 go,程序就会在另一个线程中执行。

听起来很简单?

goroutines 是 Go 编写异步代码的方式。

重要的是要了解 goroutine 和并发的工作原理。Go 提供了管理 goroutine 的方法,使它们在复杂的程序中更容易管理和预测。

因为 goroutine 非常容易使用,所以它们很容易被滥用。

阅读全文 »

利用 eBPF 支撑大规模 K8s Service

发表于 2020-12-02 | 分类于 Kubernetes , Cilium | | 热度: ℃
字数统计: 6,068 字 | 阅读时长 ≈ 24 分钟

概述

本文翻译自 2019 年 Daniel Borkmann 和 Martynas Pumputis 在 Linux Plumbers Conference 的一篇分享: Making the Kubernetes Service Abstraction Scale using eBPF 。 翻译时对大家耳熟能详或已显陈旧的内容(K8s 介绍、Cilium 1.6 之前的版本对 Service 实现等)略有删减,如有需要请查阅原 PDF。

实际上,一年之后 Daniel 和 Martynas 又在 LPC 做了一次分享,内容是本文的延续:Cilium:基于 BPF/XDP 实现 K8s Service 负载均衡

K8s 当前重度依赖 iptables 来实现 Service 的抽象。对于每个 Service 及其 backend pods,在 K8s 里会生成很多 iptables 规则。例如 5K 个 Service 时,iptables 规则将达到 25K 条,导致的后果:

  • 较高、并且不可预测的转发延迟(packet latency),因为每个包都要遍历这些规则 ,直到匹配到某条规则;
  • 更新规则的操作非常慢:无法单独更新某条 iptables 规则,只能将全部规则读出来 ,更新整个集合,再将新的规则集合下发到宿主机。在动态环境中这一问题尤其明显,因为每 小时可能都有几千次的 backend pods 创建和销毁。
  • 可靠性问题:iptables 依赖 Netfilter 和系统的连接跟踪模块(conntrack),在 大流量场景下会出现一些竞争问题(race conditions);UDP 场景尤其明显,会导 致丢包、应用的负载升高等问题。

本文将介绍如何基于 Cilium/BPF 来解决这些问题,实现 K8s Service 的大规模扩展。

阅读全文 »
12…22
icyboy

icyboy

109 日志
98 分类
182 标签
RSS
GitHub 微博 知乎
友情链接
  • 张家港水蜜桃
  • 运维开发
  • DevOps
© 2016 — 2021 icyboy | Site words total count: 330.8k
本站访客数:
博客全站共330.8k字