搜索关注微信公众号"捉虫大师",后端技术分享,架构设计、性能优化、源码阅读、问题排查、踩坑实践。

hello大家好,我是小楼,今天给大家分享一个关于Agent技术的话题,也是后端启示录的第3篇文章。

通过本文你可以了解到如下内容:

什么是Agent技术

为了解释什么是Agent技术,我在网上搜了一圈,但没有找到想要的结果。反倒是搜到了不少Java Agent技术,要注意Java Agent技术指的是一种Java字节码修改技术,和本文要说的完全是两码事

既然搜不到,我就说下自己的理解吧。Agent技术是在「客户端」机器上部署一个Agent进程,「客户端」与「服务端」的交互通过这个Agent进行代理,其中Agent与Client通常在同一主机,即可通过「localhost」进行访问。

看到这里,相信你能想到不少类似的架构,例如当前大热的Service Mesh,又如Flume Agent等等。

在我所在的公司,Agent技术也被非常广泛的使用,涉及了日志处理、配置下发、服务注册发现、监控数据收集等方面。

Agent技术能解决什么问题

既然Agent技术被如此广泛的运用,那么它主要是为了解决什么问题呢?

要充分理解它,我们需要从Agent的特点去考虑。

  1. 进程级资源隔离

这点可以参考之前我写的文章《Cobar SQL审计的设计与实现》,为了在Cobar中新增SQL审计的功能,第一考虑的是稳定性,不想因为引入了新的组件(Kafka)导致Cobar不可用,所以将SQL收集存储部分独立为一个Agent。

如果将逻辑放在业务进程中,首先资源(Cpu、内存等)消耗不可控,其次也极易有可能引入Bug导致原进程崩溃。

  1. 语言框架无关

举个日志切割的例子,如果大家都用Java,并用了Log4J日志框架,那么完全可以使用一个配置来把日志按时间进行切割和保留。

但如果有人使用了一个小众的语言,或者用了一个不具备日志切割能力的日志框架,这时想拥有Log4J同样的日志切割能力怎么办呢?

你可能会说怎么会有这样的日志框架,可能大家用Log4J或Logback这样的日志框架都太过于强大了,事实上其他语言真的有这样的,而且日志框架也有很多轮子,质量参差不齐。

不能要求每个日志框架都具备同等的能力,只能通过一个Agent进程来处理。

看到这里,你可能已经发现这个Agent已经超出文章开头的定义了,严格来说叫「Sidecar模式」,但这个词更多的用在Service Mesh上,所以本文还是用Agent来代替。

  1. 存算分离

这个概念在数据库和消息队列使用的比较多,这里我借用一下,如果表述不准确还请见谅。

在没有Agent之前,服务端负责数据的存储和计算,在有了Agent后,服务端的部分计算可以交给Agent,这样不仅可以减少服务端的压力,也能大幅度降低服务端代码的复杂度。

  1. 基础组件与业务解耦

这点用Service Mesh的例子讲解恰到好处,对于流量的治理,比如限流、熔断、切流,原先实现在RPC框架,每一次改动升级都需要业务方修改依赖升级并发布,而使用Agent技术后,将原先RPC具有的能力下沉到Agent,变更也只需要升级Agent,业务与基础组件的研发互不相干,效率得到极大地提升。

为什么大厂偏爱Agent技术

大厂的特点是人多,人多必然带来一些效率上的问题,所以大厂在工程效率上的探索往往走的比较靠前,他们会把基础架构和业务研发分开,大家的边界很清晰,各司其职。

但这也带来了很严重的问题,如果基础组件和业务耦合比较严重,那就导致架构的演进受到阻碍。

举个例子,某一天基础架构部新增了一个维度的限流能力,升级推广需要业务方操作,这时刚好业务紧急,那基础组件的升级势必会搁置。

于是基础组件与业务解耦的Agent技术受到大厂的偏爱。

大厂同样有个问题是技术栈众多,有时候为了跨语言、跨框架地解决问题,只能采用Agent技术。

Agent关键技术和缺点

Agent关键技术有很多,看起来不难,但要做好,确实得下很多功夫:

  • 资源隔离,这点通常使用cgroups技术
  • Agent生命周期管理,包括Agent的上线、升级、灰度、下线等等的管理,需要有统一的管控平台,否则Agent的管理将会非常头疼
  • 进程间通信,这点不是必须,但大多数Agent需要考虑这点,一般可选项有如下可选,结合实际情况进行选择即可
  • 稳定性,Agent随时会挂,要带着这个去设计实现Agent
  • 资源消耗问题
    • Agent毕竟只是个附属品,不能占用过多的内存、CPU,启动速度也得快,从这点来看Go是个不错的选择
    • 在容器的环境下,Agent独立为一个容器和业务容器组成Pod,这就导致了一台物理机上装了很多Agent容器,资源浪费严重,同理,虚拟机也是如此。所以省资源的玩法是一台物理机只装一个Agent,做好租户隔离即可。

技术没有银弹,Agent也有它的缺点:

  • 架构复杂,管理困难使多小厂望而却步
  • 性能问题,如果是直接代理流量,性能问题会很严重,毕竟在网络通信上多了一跳,这也是Service Mesh的问题之一,甚至还演进出了proxyless Mesh

最后说一句

虽然看完本文你也不知道怎么实现一个Agent,但通过本文你能了解到Agent技术是什么,有什么好处,大厂为什么偏爱这项技术,以及要实现一个Agent的技术关键点和缺点各是什么。

这也是后端启示录系列文章的出发点,「为什么」比「怎么做」更重要。如果你也喜欢这类文章,读完有那么一点收获,希望你能帮我点个在看关注,当然能分享出去就更好了,我会继续加油写这个系列~我们下期再见!

后端启示录系列

  • 《Dubbo为什么用Go重写?》
  • 《服务探活的五种方式》

搜索关注微信公众号"捉虫大师",后端技术分享,架构设计、性能优化、源码阅读、问题排查、踩坑实践。

大厂偏爱的Agent技术究竟是个啥相关推荐

  1. 【控制】《多智能体机器人系统信息融合与协调》范波老师-第8章-Agent 技术在机器人智能控制系统的应用

    第7章 回到目录 无 第8章-Agent 技术在机器人智能控制系统的应用 8.1 引言 8.2 智能机器人系统应用研究 8.2.1 概况 8.2.2 传统研究方法的缺陷 8.2.3 智能机器人系统的共 ...

  2. 说实话,你工作5年,不知道什么是Java agent技术,让我很吃惊...

    注:本文定义-在函数执行前后增加对应的逻辑的操作统称为MOCK. 引子 在某天与QA同学进行沟通时,发现QA同学有针对某个方法调用时,有让该方法停止一段时间的需求,我对这部分的功能实现非常好奇,因此决 ...

  3. java agent技术原理及简单实现

    注:本文定义-在函数执行前后增加对应的逻辑的操作统称为MOCK 1.引子 在某天与QA同学进行沟通时,发现QA同学有针对某个方法调用时,有让该方法停止一段时间的需求,我对这部分的功能实现非常好奇,因此 ...

  4. 我看了1000+招聘启事,原来大厂偏爱这种程序员……

    ​随着夏季的离去,金九银十招聘季已经悄然而至,现在正处于大厂招聘高峰期,是找工作的好时机.对于程序员这个行业来说,进大厂意味着高工资.高福利以及巨大的晋升空间,这是普通公司无法提供的,因此,进大厂是程 ...

  5. 纳米技术和计算机技术的关系,纳米技术究竟是什么技术?

    原标题:纳米技术究竟是什么技术? "纳米"是什么米?纳米技术究竟是什么技术?它会在生产.生活.军事.科技等领域产生什么样的影响呢?媒体.广告中常常出现的纳米水.纳米烟.纳米冰箱.纳 ...

  6. share一下一线大厂是怎么招聘技术岗的?

    点击上方"蓝字", 右上角选择"设为星标" 周一至五早11点半!精品文章准时送上! 本文转载自公众号:石杉的架构笔记 一.写在前面 最近收到不少读者反馈,说自己 ...

  7. 5G时代,为什么主流大厂纷纷布局这项技术?

    导读:深度学习技术已经在互联网的诸多方向产生影响,每天科技新闻中关于深度学习和神经网络的讨论越来越多.深度学习技术在近两年飞速发展,各种互联网产品都争相应用深度学习技术,产品对深度学习的引入也将进一步 ...

  8. 这就是程序员被大厂偏爱的实力!

    前段时间 , 字节跳动 9 周年之际 , 宣布招聘 1 万人: 真不愧是宇宙厂,动辄 1 万人的招聘需求中我们看的出来,字节跳动正在疯狂布局各大业务板块. 字节跳动·研发岗位招聘 从招聘官网来看,字节 ...

  9. AI ProCon 2020第一天:40+大厂专家共话AI技术应用下一个十年!

    7月3日,2020 年 AI开发者万人大会(AI ProCon 2020)隆重举行,作为CSDN策划并主办的系列技术「开发者大会」之一,本次大会通过线上直播的方式,吸引到了10000+开发者/学习者. ...

最新文章

  1. CI流水线配置文件参数详解(一)
  2. cd linux盒上盖子不休眠,CDLinux 自动休眠功能的关闭方法
  3. pythoncgi模块文档_python使用cgi模块处理表单
  4. 杭州登山地图是谁开发的_好天气继续,重阳节登高,五条杭州登山线路奉上
  5. [Python] L1-052 2018我们要赢-PAT团体程序设计天梯赛GPLT
  6. DB2 亲身实例(GUI界面) 加 笔记和注意事项
  7. matlab如何获得一个二值掩码,1.3矩阵的掩码操作 - osc_uarhdl2n的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. 当程序员变成软件项目经理
  9. [面试题]1000瓶毒药里面只有1瓶是有毒的,问需要多少只老鼠才能试出那瓶有毒。
  10. python字母表_Python 一句话生成字母表的方法
  11. 安装Hspice2014时仿真键为灰色不可点击和Windows缺依赖项问题的解决方法
  12. 龙芯9341屏驱动开发过程(GUI、增加tty 裸奔版)
  13. 设置Jenkins语言为中文或英文
  14. 百度网盘加速无限试用_百度网盘上线 单日/单次 加速功能,最低仅需 2 块钱
  15. 加密解密-对称加密与非对称加密
  16. 共轭梯度法(Conjugate Gradient Method)
  17. 曼尼托巴大学计算机科学硕士,曼尼托巴大学计算机科学本科申请.pdf
  18. OC开发之——OC简介(1)
  19. python爬取链家网的房屋数据
  20. 读《Microservices》有感

热门文章

  1. 对搜狗云输入法的胡思乱想
  2. 浅谈网页三层结构:表现层、业务层和数据层
  3. 全球清廉指数排名中国上升三位
  4. 2023年做跨境电商选择马来西亚可以吗?为什么?卖什么好?
  5. 友盟推送android 8.0系统不显示推送消息问题
  6. python刷票 黑科技_抢火车票这个事吧,其实我也能做!(python黑科技)
  7. 如何减少电壁挂炉的电用量—五妙招教你巧省电
  8. shell 脚本中自动为 sudo 输入密码
  9. python编程快速上手办公自动化_关于即时通信机器人的解答
  10. 【UART】Verilog实现UART接收和发送模块