当前位置: 首页 > news >正文

网银网站建设银行如何做网站免费搭桥链接

网银网站建设银行,如何做网站免费搭桥链接,html转wordpress教程,家教中介网站怎么做学员引流过去一年#xff0c;ARMS基于eBPF技术打造了Kubernetes监控#xff0c;提供多语言无侵入的应用性能#xff0c;系统性能#xff0c;网络性能观测能力#xff0c;验证了eBPF技术的有效性。eBPF技术和生态发展很好#xff0c;未来前景广大#xff0c;作为该技术的实践者ARMS基于eBPF技术打造了Kubernetes监控提供多语言无侵入的应用性能系统性能网络性能观测能力验证了eBPF技术的有效性。eBPF技术和生态发展很好未来前景广大作为该技术的实践者本文目标是通过回答7个核心问题介绍eBPF技术本身为大家解开eBPF的面纱。 eBPF是什么 eBPF是一个能够在内核运行沙箱程序的技术提供了一种在内核事件和用户程序事件发生时安全注入代码的机制使得非内核开发人员也可以对内核进行控制。随着内核的发展eBPF 逐步从最初的数据包过滤扩展到了网络、内核、安全、跟踪等而且它的功能特性还在快速发展中早期的 BPF 被称为经典 BPF简称cBPF正是这种功能扩展使得现在的BPF被称为扩展BPF简称eBPF。 eBPF的应用场景是什么 网络优化 eBPF兼具高性能和高可扩展特性使得其成为网络方案中网络包处理的优选方案 高性能 JIT编译器提供近乎内核本地代码的执行效率。 高可扩展 在内核的上下文里可以快速地增加协议解析和路由策略。 故障诊断 eBPF通过kprobetracepoints跟踪机制兼具内核和用户的跟踪能力这种端到端的跟踪能力可以快速进行故障诊断与此同时eBPF支持以更加高效的方式透出profiling的统计数据而不需要像传统系统需要将大量的采样数据透出使得持续地实时profiling成为可能。 安全控制 eBPF可以看到所有系统调用所有网络数据包和socket网络操作一体化结合进程上下文跟踪网络操作级别过滤系统调用过滤可以更好地提供安全控制。 性能监控 相比于传统的系统监控组件比如sar只能提供静态的counters和gaugeseBPF支持可编程地动态收集和边缘计算聚合自定义的指标和事件极大地提升了性能监控的效率和想象空间。 eBPF为什么会出现 eBPF的出现本质上是为了解决内核迭代速度慢和系统需求快速变化的矛盾在eBPF领域常用的一个例子是eBPF相对于Linux Kernel类似于Javascript相对于HTML突出的是可编程性。一般来说可编程性的支持通常会带来一些新的问题比如内核模块其实也是为了解决这个问题但是他没有提供很好的边界导致内核模块会影响内核本身的稳定性在不同的内核版本需要做适配等。eBPF采用以下策略使得其成为一种安全高效地内核可编程技术 安全 eBPF 程序必须被验证器校验通过后才能执行且不能包含无法到达的指令eBPF 程序不能随意调用内核函数只能调用在 API 中定义的辅助函数eBPF 程序栈空间最多只有 512 字节想要更大的存储就必须要借助映射存储。 高效 借助即时编译器JIT且因为 eBPF 指令依然运行在内核中无需向用户态复制数据大大提高了事件处理的效率。 标准 通过BPF HelpersBTFPERF MAP提供标准的接口和数据模型供开发者使用。 功能强大 eBPF 不仅扩展了寄存器的数量引入了全新的 BPF 映射存储还在 4.x 内核中将原本单一的数据包过滤事件逐步扩展到了内核态函数、用户态函数、跟踪点、性能事件perf_events以及安全控制等领域。 eBPF怎么用 5个步骤 1、使用 C 语言开发一个 eBPF 程序 即插桩点触发事件时要调用的eBPF沙箱程序该程序会在内核态运行。 2、借助 LLVM 把 eBPF 程序编译成 BPF 字节码 eBPF 程序编译成 BPF 字节码用于后续在eBPF虚拟机内验证并运行。 3、通过 bpf 系统调用把 BPF 字节码提交给内核 在用户态通过bpf系统将BPF字节码加载到内核。 4、内核验证并运行 BPF 字节码并把相应的状态保存到 BPF 映射中 内核验证BPF字节码安全并且确保对应事件发生时调用正确的eBPF程序如果有状态需要保存则写入对应BPF映射中比如监控数据就可以写到BPF映射中。 5、用户程序通过 BPF 映射查询 BPF 字节码的运行状态。 用户态通过查询BPF映射的内容获取字节码运行的状态比如获取抓取到的监控数据。 一个完整的 eBPF 程序通常包含用户态和内核态两部分用户态程序需要通过 BPF 系统调用跟内核进行交互进而完成 eBPF 程序加载、事件挂载以及映射创建和更新等任务而在内核态中eBPF 程序也不能任意调用内核函数而是需要通过 BPF 辅助函数完成所需的任务。尤其是在访问内存地址的时候必须要借助 bpf_probe_read 系列函数读取内存数据以确保内存的安全和高效访问。在 eBPF 程序需要大块存储时我们还需要根据应用场景引入特定类型的 BPF 映射并借助它向用户空间的程序提供运行状态的数据。 eBPF程序分类和使用场景 bpftool feature probe | grep program_type 以上命令可以查看系统支持的eBPF程序类型一般有如下类型 eBPF program_type socket_filter is available eBPF program_type kprobe is available eBPF program_type sched_cls is available eBPF program_type sched_act is available eBPF program_type tracepoint is available eBPF program_type xdp is available eBPF program_type perf_event is available eBPF program_type cgroup_skb is available eBPF program_type cgroup_sock is available eBPF program_type lwt_in is available eBPF program_type lwt_out is available eBPF program_type lwt_xmit is available eBPF program_type sock_ops is available eBPF program_type sk_skb is available eBPF program_type cgroup_device is available eBPF program_type sk_msg is available eBPF program_type raw_tracepoint is available eBPF program_type cgroup_sock_addr is available eBPF program_type lwt_seg6local is available eBPF program_type lirc_mode2 is NOT available eBPF program_type sk_reuseport is available eBPF program_type flow_dissector is available eBPF program_type cgroup_sysctl is available eBPF program_type raw_tracepoint_writable is available eBPF program_type cgroup_sockopt is available eBPF program_type tracing is available eBPF program_type struct_ops is available eBPF program_type ext is available eBPF program_type lsm is available 具体可参考 https://elixir.bootlin.com/linux/v5.13/source/include/linux/bpf_types.h 主要是分为3大使用场景 跟踪 tracepoint, kprobe, perf_event等主要用于从系统中提取跟踪信息进而为监控、排错、性能优化等提供数据支撑。 网络 xdp, sock_ops, cgroup_sock_addr , sk_msg等主要用于对网络数据包进行过滤和处理进而实现网络的观测、过滤、流量控制以及性能优化等各种丰富的功能这里可以丢包重定向。 cilium基本用了所有的hook点。 安全和其他 lsm用于安全其他还有flow_dissector, lwt_in都是一些不怎么常用的不再赘述。 eBPF的最佳实践是什么 寻找内核的插桩点 从前面可以看出来eBPF程序本身并不困难困难的是为其寻找合适的事件源来触发运行。对于监控和诊断领域来说跟踪类eBPF程序的事件源包含3类内核函数kprobe、内核跟踪点tracepoint或性能事件perf_event。此时有2个问题需要回答 1、内核中都有哪些内核函数、内核跟踪点或性能事件 使用调试信息获取内核函数、内核跟踪点 sudo ls /sys/kernel/debug/tracing/events 使用bpftrace获取内核函数、内核跟踪点 # 查询所有内核插桩和跟踪点 sudo bpftrace -l# 使用通配符查询所有的系统调用跟踪点 sudo bpftrace -l tracepoint:syscalls:*# 使用通配符查询所有名字包含open的跟踪点 sudo bpftrace -l *open* 使用perf list获取性能事件 sudo perf list tracepoint 2、对于内核函数和内核跟踪点在需要跟踪它们的传入参数和返回值的时候又该如何查询这些数据结构的定义格式呢 使用调试信息获取 sudo cat /sys/kernel/debug/tracing/events/syscalls/sys_enter_openat/format 使用bpftrace获取 sudo bpftrace -lv tracepoint:syscalls:sys_enter_openat 具体如何使用以上信息请参考bcc。 寻找应用的插桩点 1、如何查询用户进程的跟踪点 静态编译语言通过-g编译选项保留调试信息应用程序二进制会包含DWARFDebugging With Attributed Record Format有了调试信息可以通过 readelf、objdump、nm 等工具查询可用于跟踪的函数、变量等符号列表 # 查询符号表 readelf -Ws /usr/lib/x86_64-linux-gnu/libc.so.6# 查询USDT信息 readelf -n /usr/lib/x86_64-linux-gnu/libc.so.6 使用bpftrace # 查询uprobe bpftrace -l uprobe:/usr/lib/x86_64-linux-gnu/libc.so.6:*# 查询USDT bpftrace -l usdt:/usr/lib/x86_64-linux-gnu/libc.so.6:* uprobe 是基于文件的。当文件中的某个函数被跟踪时除非对进程 PID 进行了过滤默认所有使用到这个文件的进程都会被插桩。 上面说的是静态编译语言他和内核的跟踪类似应用程序的符号信息可以存放在 ELF 二进制文件中也可以以单独文件的形式放到调试文件中而内核的符号信息除了可以存放到内核二进制文件中之外还会以 /proc/kallsyms 和 /sys/kernel/debug 等形式暴露到用户空间。 对于非静态编译语言来说主要是两种 1、解释型语言 使用类似编译型语言应用程序的跟踪点查询方法查询它们在解释器层面的 uprobe 和 USDT 跟踪点如何将解释器层面的行为和应用行为关联需要相关语言的专家来分析。 2、即时编译型语言 这类语言的应用源代码会先编译为字节码再由即时编译器JIT编译为机器码执行还会有大量的优化跟踪难度很大同解释型编程语言类似uprobe 和 USDT 跟踪只能用在即时编译器上从即时编译器的跟踪点参数里面获取最终应用程序的函数信息。找出即时编译器的跟踪点同应用程序运行之间的关系需要相关语言的专家来分析。 可以参考BCC的应用程序跟踪用户进程的跟踪本质上是通过断点去执行 uprobe 处理程序。虽然内核社区已经对 BPF 做了很多的性能调优跟踪用户态函数特别是锁争用、内存分配之类的高频函数还是有可能带来很大的性能开销。因此我们在使用 uprobe 时应该尽量避免跟踪高频函数。 具体如何使用以上信息请参考 https://github.com/iovisor/bcc/blob/master/docs/reference_guide.md#events--arguments 关联问题与插桩点 一个理想的状态是所有问题都清楚应当观察那些插桩点但是这个要求技术人员对端到端的软件栈细节都了解十分透彻一个更加合理的方法是二八法则将软件栈数据流的最核心的80%脉络抓住保障出现问题一定会在这个脉络被发现即可。此时再使用内核栈和用户栈来查看具体的调用栈即可发现核心问题比如说发现了网络在丢包但是不知道为什么丢此时我们知道网络丢包一定会调用kfree_skb内核函数那么我们可以通过 sudo bpftrace -e kprobe:kfree_skb /commyour comm/ {printf(kstack: %s\n, kstack);} 发现该函数的调用栈 kstack: kfree_skb1 udpv6_destroy_sock66 sk_common_release34 udp_lib_close9 inet_release75 inet6_release49 __sock_release66 sock_close21 __fput159 ____fput14 task_work_run103 exit_to_user_mode_loop411 exit_to_user_mode_prepare187 syscall_exit_to_user_mode23 do_syscall_64110 entry_SYSCALL_64_after_hwframe68 那么就可以回溯上面的函数看看他们具体是哪一行在什么条件下调用的就能够定位到问题。这个方法不仅可以定位问题也可以用于加深对内核调用的理解比如 bpftrace -e tracepoint:net:* { printf(%s(%d): %s %s\n, comm, pid, probe, kstack()); } 可以查看所有网络相关的跟踪点及其调用栈。 eBPF的实现原理是什么 5个模块 eBPF在内核主要由5个模块协作 1、BPF Verifier验证器 确保 eBPF 程序的安全。验证器会将待执行的指令创建为一个有向无环图DAG确保程序中不包含不可达指令接着再模拟指令的执行过程确保不会执行无效指令这里通过和个别同学了解到这里的验证器并无法保证100%的安全所以对于所有BPF程序都还需要严格的监控和评审。 2、BPF JIT 将 eBPF 字节码编译成本地机器指令以便更高效地在内核中执行。 3、多个 64 位寄存器、一个程序计数器和一个 512 字节的栈组成的存储模块 用于控制eBPF程序的运行保存栈数据入参与出参。 4、BPF Helpers辅助函数 提供了一系列用于 eBPF 程序与内核其他模块进行交互的函数。这些函数并不是任意一个 eBPF 程序都可以调用的具体可用的函数集由 BPF 程序类型决定。注意eBPF里面所有对入参出参的修改都必须符合BPF规范除了本地变量的变更其他变化都应当使用BPF Helpers完成如果BPF Helpers不支持则无法修改。 bpftool feature probe 通过以上命令可以看到不同类型的eBPF程序可以运行哪些BPF Helpers。 5、BPF Map context 用于提供大块的存储这些存储可被用户空间程序用来进行访问进而控制 eBPF 程序的运行状态。 bpftool feature probe | grep map_type 通过以上命令可以看到系统支持哪些类型的map。 3个动作 先说下重要的系统调用bpf int bpf(int cmd, union bpf_attr *attr, unsigned int size); 这里cmd是关键attr是cmd的参数size是参数大小所以关键是看cmd有哪些 // 5.11内核 enum bpf_cmd { BPF_MAP_CREATE, BPF_MAP_LOOKUP_ELEM, BPF_MAP_UPDATE_ELEM, BPF_MAP_DELETE_ELEM, BPF_MAP_GET_NEXT_KEY, BPF_PROG_LOAD, BPF_OBJ_PIN, BPF_OBJ_GET, BPF_PROG_ATTACH, BPF_PROG_DETACH, BPF_PROG_TEST_RUN, BPF_PROG_GET_NEXT_ID, BPF_MAP_GET_NEXT_ID, BPF_PROG_GET_FD_BY_ID, BPF_MAP_GET_FD_BY_ID, BPF_OBJ_GET_INFO_BY_FD, BPF_PROG_QUERY, BPF_RAW_TRACEPOINT_OPEN, BPF_BTF_LOAD, BPF_BTF_GET_FD_BY_ID, BPF_TASK_FD_QUERY, BPF_MAP_LOOKUP_AND_DELETE_ELEM, BPF_MAP_FREEZE, BPF_BTF_GET_NEXT_ID, BPF_MAP_LOOKUP_BATCH, BPF_MAP_LOOKUP_AND_DELETE_BATCH, BPF_MAP_UPDATE_BATCH, BPF_MAP_DELETE_BATCH, BPF_LINK_CREATE, BPF_LINK_UPDATE, BPF_LINK_GET_FD_BY_ID, BPF_LINK_GET_NEXT_ID, BPF_ENABLE_STATS, BPF_ITER_CREATE, BPF_LINK_DETACH, BPF_PROG_BIND_MAP, }; 最核心的就是PROGMAP相关的cmd就是程序加载和映射处理。 1、程序加载 调用BPF_PROG_LOAD cmd会将BPF程序加载到内核但eBPF 程序并不像常规的线程那样启动后就一直运行在那里它需要事件触发后才会执行。这些事件包括系统调用、内核跟踪点、内核函数和用户态函数的调用退出、网络事件等等所以需要第2个动作。 2、绑定事件 b.attach_kprobe(eventxxx, fn_nameyyy) 以上就是将特定的事件绑定到特定的BPF函数实际实现原理如下 1借助 bpf 系统调用加载 BPF 程序之后会记住返回的文件描述符 2通过attach操作知道对应函数类型的事件编号 3根据attach的返回值调用 perf_event_open 创建性能监控事件 4通过 ioctl 的 PERF_EVENT_IOC_SET_BPF 命令将 BPF 程序绑定到性能监控事件。 3、映射操作 通过MAP相关的cmd控制MAP增删然后用户态基于该MAP与内核状态进行交互。 eBPF的发展现状 内核支持 建议4.14 生态 eBPF的生态自下而上的情况如下 1、基础设施 支持eBPF基础能力的发展。 Linux KernalLLVM 2、开发工具集 主要是用于加载编译调试eBPF程序不同语言有不同的开发工具集 Gohttps://github.com/cilium/ebpfhttps://github.com/aquasecurity/libbpfgoC/Chttps://github.com/libbpf/libbpf 3、eBPF应用 bcchttps://github.com/iovisor/bcc 提供一套开发工具和脚本。 bpftracehttps://github.com/iovisor/bpftrace 基于bcc提供一个脚本语言。 ciliumhttps://github.com/cilium/cilium 网络优化和安全 Falcohttps://github.com/falcosecurity/falco 网络安全 Katranhttps://github.com/facebookincubator/katran 高性能4层负载均衡 Hubblehttps://github.com/cilium/hubble 可观测 Kindlinghttps://github.com/CloudDectective-Harmonycloud/kindling 可观测 Pixiehttps://github.com/pixie-io/pixie 可观测 kubectl tracehttps://github.com/iovisor/kubectl-trace 调度bpftrace脚本 L3AFhttps://github.com/l3af-project/l3afd 分布式环境下启动和管理eBPF程序的平台 plyhttps://github.com/iovisor/ply 动态linux trace Traceehttps://github.com/aquasecurity/tracee Linux运行时安全监测 4、跟踪生态的网站 https://ebpf.io/projectshttps://github.com/zoidbergwill/awesome-ebpf 写在最后 用好eBPF的前提是对软件栈的理解 通过上面的介绍相信大家对eBPF已经有了足够的理解eBPF提供的只是一个框架和机制核心还是需要用eBPF的人对软件栈的理解找到合适的插桩点能够和应用问题进行关联。 eBPF的杀手锏是全覆盖无侵入可编程 1、全覆盖 内核应用程序插桩点全覆盖。 2、无侵入 不需要修改任何被hook的代码。 3、可编程 动态下发eBPF程序边缘动态执行指令动态聚合分析。 作者 | 炎寻 原文链接 本文为阿里云原创内容未经允许不得转载。
http://www.zqtcl.cn/news/965261/

相关文章:

  • wordpress 多站点模式望江网站建设
  • 常熟网站制作哪家好平面素材设计网站
  • 网站建设客户怎么找网站建设开发软件
  • 青岛制作企业网站的公司怎么清空WordPress
  • 权重的网站所有网站302跳转百度
  • 做个淘宝客网站怎么做济南网络推广公司排名
  • 西宁网站建设优化东莞建网站公司案例
  • 建设网站iss手工活接单在家做有正规网站吗
  • 六安做网站的公司专门建立网站的公司吗
  • 西昌市建设工程管理局网站wordpress主题知更
  • 企业网站如何上存青岛做外贸网站哪家好
  • 保定网站建设冀icp备织梦设置中英文网站
  • 烟台市建设工程检测站网站妖姬直播
  • 式网站西安网页搭建
  • 百度云虚拟主机如何建设网站四川建设人员信息查询
  • 浅谈学校网站建设html5网页制作代码成品
  • 网站在当地做宣传郑州高端设计公司
  • 一级a做爰网站微网站建设平台
  • 网站建设 中广州网站建设+致茂
  • 常德车管所网站工作微信管理系统
  • 什么软件可以做dj视频网站做的好的装修公司网站
  • 网站维护的内容和步骤如何建设像艺龙一样网站
  • 外国人做的学汉字网站公司网页需要哪些内容
  • 网站做缓存企业营销型网站的内容
  • 免费带后台的网站模板wordpress vr主题公园
  • 美丽乡村 网站建设wordpress分页工具栏
  • 卡盟网站是怎么建设的产品开发设计
  • 第一免费营销型网站一起做网店17
  • 高端学校网站建设做网站是怎么赚钱的
  • 哪里可以找人做网站在服务器上中的asp网站后台能输入帐号无法进入