在开发/测试一个复杂系统的时候我们经常遇到开发/测试中的模块依赖其它服务的情况。比如一个系统有两个模块A和B,A模块依赖于B模块提供的服务:
B部分功能还未完成开发导致A模块开发被阻塞;
B模块有些数据不好构造,开发时无法自测到所有情况;
对A模块进行集成测试时,写了一些自动化用例。但由于B模块不可控,B模块的数据经常变动导致返回给A模块的数据也变化了,这时候依赖B模块返回数据的断言将失败;
B模块不是自己团队维护,经常出现不稳定,导致开发环境中整个系统不稳定。
服务虚拟化指的就是虚拟出不稳定、不可用、未开发完全的服务。通常有两种方法:
针对协议的通用桩,可以预先设置请求对应的返回值以及匹配条件,这样系统未开发完之前可以使用这个桩来代替真实的服务;
录制回放方式,在第三方服务可用的时候将链路上的数据录制下来,当不稳定或者不可用时,回放当时录制的数据。
其中方案1主要针对问题一和二,方案2主要针对问题三和四。Terminator(寓意:明暗交界线)实现了以上两种方式。
Terminator中每个链路可以看成是一个代理,运行在两个服务之间,现在支持四种工作模式:
TUNNEL:隧道模式,链路服务负责接收和转发链路上的数据,但不做任何存储,相当于通透状态;
RECORD:录制模式,链路服务将链路上的请求和响应存储下来,并记录请求响应的对应关系;
REPLAY:回放模式,链路服务不会连接后端的依赖服务,当请求过来时当符合某些条件时直接返回当时录制的响应;
STUB:通用桩模式,链路服务能够预设返回结果与匹配规则,当请求过来时符合匹配规则即返回预设结果。
网络通信:主要在TCP层建立Socket收发链路上的通信数据,这里采用的是netty框架;
协议编解码器:主要将二进制数据包解析为协议数据或者反过来将协议数据转化为二进制数据,netty本身提供了HTTP、SSL/TLS、WebSockets、Google Protocol Buffer的编解码器,如果需要扩展可以自己定义协议编解码器;
工作模式处理器:本系统的核心,现在提供的录制回放、通用桩都是这里实现的。这里提供了较多的扩展接口,可以基于定制化需求实现新的模式, 比如当后端服务down掉的情况下启动之前的录制数据。另外对于录制回放模式,签名类是一个核心组件,它的作用是如何标识一个请求,对于不同系统可能有不 一样的实现;对于通用桩模式,抽取类是一个核心组件,他的作用是如何提取一个请求,涉及到如何设置匹配条件,对于不同系统(特别是协议)也可能有不一样的 实现。所以这些都是系统提供的可扩展接口。
APIs:为了使用上的方便(比如持续集成),系统基本所有的功能都通过REST API提供。
1. 安装: sudo apt-get install terminator 2. 配置文件 刚安装完terminator之后默认没有配置文件,可以自己新建~/.config/terminator/config文件或者自己鼠标放在terminator的任意空白处右击选择preferences随便设置一些就可以自动生成~/.config/terminator/config文件. 3.Terminat
[global_config] title_transmit_bg_color = "#d30102" focus = system window_state = maximise suppress_multiple_term_dialog = True [keybindings] [profiles] [[default]] palette = "#2d2d2d:#
1.安装 sudo apt install terminator 2.添加到收藏夹 显示应用程序 —> 搜索 terminator —> 右击 选择 添加到收藏夹 3.Terminator 常用快捷键 3.1 关于在同一个标签内的操作 Alt+Up //移动到上面的终端 Alt+Down //移动到下面
1. Ctrl+Shift+E 垂直平分窗口 2. Ctrl+Shift+O 水平平分窗口 3. Ctrl+Shift+s 隐藏/恢复滚动条 4. F11 进入退出全屏幕 5. Ctrl+Tab 在不同的工作区间循环 6. Ctrl+l 清空当前窗口 7. Ctrl+Shift+W 关闭当前工作区间 8. Ctrl+Shift+Q 退出终端
config: sudo gedit ~/.config/terminator/config [global_config] suppress_multiple_term_dialog = True [keybindings] [layouts] [[default]] [[[child0]]] fullscreen = False last_active_
Terminator简介 因为Ubuntu自带的Terminal在需要多终端协同操作时不是很好用,因此换了新终端,名为Terminator。它的优势至于:可以方便地切割终端,便捷地在多窗口中快速移动。例如:在使用ROS时,往往需要一个终端先开启roscore,再用一个终端来打开相应的操作程序,再用第3个终端来输入控制命令,甚至再用第4个终端来查看相应的程序信息。这种情况下,使用Terminator
1 常用快捷键: Shift+Ctrl+E:水平方向分割终端 Shift+Ctrl+O:垂直方向分割终端 Alt+Up/Down/Left/Rignt:光标在窗口间移动 Shift+Ctrl+W:关闭当前窗口 Shift+Ctrl+Q:关闭终端 Ctrl+Shift+X :最大化显示当前终端 Ctrl+Shift+Z :最大化显示当前终端并使字体放大 F11 全屏 Ctrl + Shit + G清
安装terminator sudo apt-get install terminator 美化terminator 新建配置文件 mkdir ~/.config/termintor && gedit ~/.config/terminator/config 复制以下配置文件 [global_config] focus = system title_transmit_bg_color = "
常用快捷键 竖直开新窗口 Ctrl + Shift + O 垂直开新窗口 Ctrl + Shift + E 关闭当前窗口 Ctrl + Shift + W 清空当前窗口 Ctrl + Shift + G 窗口移动 Alt + Up / Down / Left / Right 移动窗口分割线 Ctrl + Shift + Up / Down / Left / Right 最大化当前工作窗口 Ctrl
1.terminator 安装 sudo apt-get install terminator 2. terminator 配置 编辑~/.config/terminator/config文件,写入一下内容,效果为,一次性打开4个终端。 [global_config] enabled_plugins = CustomCommandsMenu, InactivityWatch, TestPlu
Ubuntu20.04设置右键打开terminator
安装 1、下载 dconf-tools:sudo apt-get install dconf-tools 2、在终端中执行命令:dconf-editor,调出系统默认参数调整界面 3、依次点击: org > gnome > desktop > application->terminal。 4、更改结果为: exec x-terminal-emulator exec-arg -e 如果用着不习惯想改
1. 下载软件 sudo apt-get install terminator ## 适用root权限 2. 软件适用快捷键 命令 说明 Ctrl+Shift+O 水平分割窗口 Ctrl+Shift+E 垂直分割窗口 F11 全屏/退出全屏 Ctrl+Shift+C 复制 Ctrl+Shift+V 粘贴 Ctrl+Tab 在分割的各窗口之间
在sites-available目录中创建新的虚拟服务器。 为此新虚拟服务器配置并指定单独的SQL数据库。 将此虚拟服务器链接到启用站点(sites-available)的目录。 在client.conf文件中将VPN服务器定义为客户端,并使用virtual_server指令强制将此新虚拟服务器用于RADIUS请求。 sites-available目录下的buffered-sql虚拟服务器可以用作
FreeRADIUS 2.x分支的一个主要新功能是引入虚拟服务器。 这个概念并不新鲜,并且在2.x分支诞生时已经被Web服务器使用。 然而,freeradius是第一个将虚拟服务器引入到radius中的。 本章将更深入地了解RADIUS中虚拟服务器的世界。 在本章中,我们将: 了解您使用虚拟服务器的原因 了解如何定义和启用虚拟服务器 探索监听和客户端部分 发现预定义的虚拟服务器 让我们继续吧...
如果你喜欢系统管理员的工作,或者对这方面感兴趣,虚拟或者专用服务器可以让你完全控制自己的生产环境。 nginx 和 PHP-FPM PHP 通过内置的 FastCGI 进程管理器(FPM),可以很好的与轻量级的高性能 web 服务器 nginx 协作使用。nginx 比 Apache 占用更少内存而且可以更好的处理并发请求,这对于并没有太多内存的虚拟服务器尤其重要。 阅读更多 nginx 的内容
预先定义的虚拟服务器 FreeRADIUS包括站点可用子目录下的虚拟服务器。有些可以按原样使用,而有些则是用于特殊要求的模板。以下是一些虚拟服务器: buffered-sql:此虚拟服务器用于克服大型SQL数据库(type = detail)的速度限制。 copy-acct-to-home-server:此虚拟服务器可用作模板,用于在两个位置记录一个计费请求(type = detail)。 coa
行动时刻 - 使用虚拟服务器 请按照以下步骤使虚拟服务器可用: 1.编辑FreeRADIUS配置目录中的radiusd.conf文件,并将以下内容添加到包含type = auth的listen部分(有两个listen部分,一个有type = auth,另一个有type = acct): virtual_server = always_accept。 2.在调试模式下重新启动FreeRADIUS。
行动时刻 - 创建两个虚拟服务器 在本练习中,我们将创建两个非常简单的虚拟服务器。 一个将接受所有身份验证请求,而另一个将拒绝所有身份验证请求。 在FreeRADIUS配置目录内的sites-available目录下,使用以下内容创建名为always_accept的文件: server always_accept { authorize { update control {
我正在Istio服务网格上观看Pluralsight视频。演示文稿的一部分是这样说的: VirtualService使用库伯内特斯服务查找所有pod的IP地址。VirtualService不会通过[库伯内特斯]服务路由任何流量,但它只是使用它来获取流量可能去往的endpoint列表。 它显示了这个图形(显示pod发现,而不是流量路由): 我对此有点困惑,因为我不知道Istio如何知道要查看哪个库伯
虚拟服务器欢乐时光 Isaac 正在为一所小型大学提供Wi-Fi热点。 他已部署了相当数量的接入点。 该大学校长已同意Isaac在13:00至14:00之间接受未知用户对食堂接入点的认证。 此促销活动名为Hotspot Happy Hour。 今天是愚人节,Isaac获准使用食堂的接入点给Rickroll所有人。 从来没有被碾压? 认为自己很幸运。 您可以在维基百科上阅读更多有关Rickrolli