服务网格
定义是一种用于处理微服务架构中服务间通信的基础设施层,负责管理服务之间的网络流量。它解耦了应用逻辑与网络层的通信细节,并通过代理实现服务发现、负载均衡、故障恢复、安全(如 mTLS 加密通信)、监控和策略执行等功能。
在云原生架构中,服务网格由一组轻量级的代理(sidecar)组成,这些代理与每个微服务实例一起运行。服务网格通常包括两个主要部分:
数据平面(Data Plane):由部署在每个服务实例旁边的代理组成,它们拦截所有入站和出站的流量,负责实现服务之间的通信。
控制平面(Control Plane):负责配置和管理数据平面中的代理,提供服务发现、负载均衡、健康检查、安全等功能。
服务网格工作原理的例子假设你有两个微服务:
ServiceA:一个订单服务。
ServiceB:一个支付服务。
在没有服务网格的情况下,ServiceA 直接调用 ServiceB,依赖 DNS 或服务发现机制来找到 ServiceB 的地址,可能需要自行处理重试、超时、日志、负载均衡、安全等逻辑。这种直接通信的耦合使得管理、监控和排查问题变得复杂。
引入服务网格之后,服务间的通 ...
搭建Kubernetes集群
一、环境准备
安装docker
Ubuntu安装docker
配置镜像
12345678910{ "registry-mirrors": [ "https://docker.m.daocloud.io", "https://dockerproxy.com", "https://mirror.baidubce.com", "https://docker.nju.edu.cn", "https://docker.mirrors.sjtug.sjtu.edu.cn", "https://mirror.iscas.ac.cn" ]}
二、搭建集群
角色
主机名
IP
master
i-0dkz1eq2
172.21.11.19
workder1
i-canxuquv
172.21.11.37
搭建过程参考:
【Kubernetes k8s】(两万字超详细)Ubuntu-22. ...
Golang入门
互动教程A Tour of Go
go modgo mod 是 Go 语言中的模块管理工具,用于处理 Go 项目的依赖关系和版本控制。它和Maven比较相似。自 Go 1.11 起,Go 引入了模块管理以替代旧的 GOPATH 模式,使依赖管理更加方便和可靠。
go module最重要的是go.mod文件的定义,它用来标记一个module和它的依赖库以及依赖库的版本。会放在module的主文件夹下,一般以go.mod命名。类似于Maven的pom.xml文件
初始化go.mod文件
1go mod init [module-path]
如果你的项目需要发布到github上,那么module-path一定要和仓库名对应。比如github.com/{username}/{reponame}
123456789101112131415161718module github.com/{username}/{reponame}go 1.14require (example.com/apple v0.1.2exampl ...
高性能大作业
1. 实验简介使用Java编写NoC(Network-on-chip)片上网络模拟器,用于模拟消息的路由过程。
网络结构:2D Mesh,规模8*8
流量模式:uniform,transpose,hotspot
路由算法:主要Negative-first for 2D Meshes,并与XY路由算法、West-first算法进行对比。
2. 算法描述2.1 Mesh网络二维网格(2D-Mesh)拓扑结构,如图所示,该拓扑结构的特点是:每个节点的 上、下、左、右近邻相连,该拓扑具备结构简单、可扩展性较好、便于分析等优点。目前,2D-Mesh 是片上网络上最常用的一种拓扑结构。
本实验基于8*8的2D Mesh网络结构下进行。
2.2 Turn Model模型Turn Model模型是把每个路由节点相邻的4个通道分别用E(东)、W(西)、S(南)、N(北)四个方向标识,规定Turn Model转向指的是垂直角度的转向,例如自西向南的转向用WS表示,自北向东用NE表示,以此类推,因此所有的转向方式有:WE、EW、SW、WS、EN、NE、ES、SE共8种转向,如图所示。而这8种转向可以构成 ...
Kubernetes
基础概念
控制面(Control Plane):负责管理整个集群。 控制面协调集群中的所有活动,例如调度应用、维护应用的所需状态、应用扩容以及推出新的更新。
节点(Node):是一个虚拟机或物理机,充当工作机器的角色。节点使用控制面暴露的 Kubernetes API 与控制面通信。
Kubernetes对象在 Kubernetes 系统中,Kubernetes 对象是持久化的实体。 Kubernetes 使用这些实体去表示整个集群的状态。Kubernetes 对象是一种“意向表达(Record of Intent)”。这就是 Kubernetes 集群所谓的期望状态(Desired State)。
每个对象都可以用yaml来进行描述。下面是一个具体的例子
12345678910111213141516171819apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deploymentspec: selector: matchLabels: app: nginx replicas: 2 # 告知 Dep ...
面向NLP模型的字符级白盒对抗样本生成方法研究
前置知识
白盒攻击:在机器学习模型的安全领域,攻击者如果具有关于模型的全部知识,包括模型的结构、参数和训练数据等,这种攻击被称为“白盒攻击”。攻击者利用这些信息生成对抗样本,目的是欺骗模型做出错误的预测。与之相对的,如果攻击者不知道模型的内部结构,
字符级:这意味着对抗性干扰发生在文本数据的最小单位——字符层面。通过在文本数据中添加、删除或替换单个字符,攻击者可以生成与原始数据在人类理解上几乎相同,但在机器学习模型中可能导致不同输出的样本。
对抗样本:对抗样本是通过在原始数据上故意添加人类难以察觉的扰动生成的样本,目的是欺骗机器学习模型。在字符级对抗样本的情况下,这些扰动通常是对文本中的字符进行微小的修改。
对抗攻击:生成对抗样本让模型产生错误的输出称为对抗攻击。
攻击粒度/生成方法:幅度从大到小,更大地粒度更容易改变模型的输出结果。句子级:单词级:字符级:
一、背景
安全性:构造对抗样本干扰模型的输出,导致人工智能应用在关键领域出现判断失误、检测失效、隐私泄露等重大安全隐患。
意义
垃圾邮件分类检测,通过模型漏洞,构造样本来规避模型检测。
通过生成对抗样本的训练,提升 ...
Spring
IOC原理Bean对象的创建周期xxx.class -> 推断构造方法 -> 对象(其属性还未赋值) -> 依赖注入(Autowred) -> 初始化前 -> 初始化(aterPropertiesSet) -> 初始化后(AOP) -> (代理对象) -> 存入Map -> Bean对象
单例池:存放所有单例Bean的缓存池。可能存在不同名,但同类型的Bean。
推断构造方法:有@Autowired优先,无参优先;有多个有参构造但没有无参,报错
查找策略:先根据类型,再根据 名字从单例池中查找。
命名:如果Compoent没有显式命名,Spring会默认用小写类名去命名。
类、类实例、类的Class对象、类加载器
.java文件经过javac.exe编译为.class二进制文件。一般存放在和.java源文件位置相似的地方。
类的Class对象用来描述一个类,每个类都对应一个Class对象,包含了类的元信息,如类的名称、父类、实现的接口、类的修饰符等。通过Class对象可以创造一个该类的实例。
类加载器classLoader的 ...
实现RPC框架——gsRPC
简介使用Netty以及Zookeeper实现RPC框架。
模块设计Client端client端的基本功能是服务发现和服务代理。
细节实现部分:
服务发现:当服务调用者上线后,需要从注册中心订阅所有(可以做一个优化,只订阅自己关心的服务)的服务,以及服务提供者的信息。一旦发生变化,注册中心会及时通知服务调用者。
服务代理:通过动态代理将本地方法的执行转化为发送请求,让服务提供者执行后返回结果。初步考虑使用CGLIB实现代理。
负载均衡:多种负载均衡算法,随机路由、最少活跃优先、最短响应优先、轮询路由、一致性哈希路由。参考负载均衡 | Apache Dubbo
加权随机:按权重设置随机概率。权重由服务提供者给出,权重越高的服务提供者代表处理能力越强,越容易被选中。
加权轮询:平滑加权轮询算法。
最少活跃数优先:活跃数越低,越优先调用,相同活跃数的进行加权随机。
最短响应优先:在最近一个滑动窗口中,响应时间越短,越优先调用。
一致性Hash(实现较难):相同参数的请求总是发到同一提供者。
连接池管理:预先和服务端建立长连接,降低连接开销。
客户端扫描@GsConsumer注解标识的 ...
Netty
介绍
Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目。
Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。
Netty 主要针对在 TCP 协议下,面向 Client 端的高并发应用,或者 Peer-to-Peer 场景下的大量数据持续传输的应用。
Netty 本质是一个 NIO 框架,适用于服务器通讯相关的多种应用场景。
前置知识SocketSocket(套接字)是通信的基石,是支持TCP/IP协议的路通信的基本操作单元。可以将套接字看作不同主机间的进程进行双间通信的端点,它构成了单个主机内及整个网络间的编程界面。Socket 相当于是应用程序的大门,我们在网络中发送的报文都会经过这道大门才能够进入到应用程序中,让应用程序来使用报文中的数据。
要写网络程序就必须用Socket
群聊NIO案例
零拷贝大文件案例
实现简易RPC
客户端:
服务发现,注册服务,监听服务更新
负载均衡算法,随机哈希、轮询、LFU、LRU、LRT(最小响应时间)
服务代理
Netty客户端实现 ...
CSAPP
课程官网:CS:APP3e, Bryant and O’Hallaron (cmu.edu)
参考博客:https://fengmuzi2003.gitbook.io/csapp3e/
中文翻译:https://www.bilibili.com/video/BV1j34y1U7oy
中文视频:九曲阑干的个人空间-九曲阑干个人主页-哔哩哔哩视频 (bilibili.com)
电子书:本电子书信息 | 深入理解计算机系统(CSAPP) (gitbook.io)
学习方式:看书是重点,作业一定要做。视频辅助理解