当前位置: 首页 > 科技观察

大厂偏爱的 Agent 技术究竟是个啥

时间:2023-03-16 22:13:35 科技观察

大厂偏爱的Agent技术是什么?大家好,我是小楼。今天给大家分享一个关于Agent技术的话题,也是后端启示录的第三篇。通过本文,您可以了解到以下内容:什么是Agent技术?为了解释什么是Agent技术,上网搜索了一下,没有找到想要的结果。相反,我发现了很多JavaAgent技术。需要说明的是,JavaAgent技术指的是一种Java字节码修改技术,与本文要讲的完全不同。既然找不到,我就解释一下我的理解。Agent技术就是在“客户端”机器上部署一个Agent进程,“客户端”与“服务器”之间的交互就是通过这个Agent代理的。Agent和Client通常在同一台主机上,可以通过“localhost”访问。看到这里,相信你能想到很多类似的架构,比如现在很火的ServiceMesh,还有FlumeAgent等。在我公司,Agent技术也被广泛应用,涉及到日志处理、配置下发、服务注册发现、监控等数据采集??、流量代理等,Agent技术能解决哪些问题?既然Agent技术应用广泛,那么它主要解决什么问题呢?要完全理解它,我们需要考虑Agent的特性。进程级的资源隔离可以参考我之前的文章《Cobar SQL审计的设计与实现》。为Cobar添加SQL审计功能,首先考虑的是稳定性。我不希望Cobar因为引入了一个新的组件(Kafka)而无法使用,所以将SQL的收集和存储部分分离出来作为一个Agent。如果将逻辑放在业务流程中,首先资源(Cpu、内存等)的消耗不可控,其次极有可能引入BUG,导致原有流程崩溃。语言框架无关紧要。让我们以日志切割为例。如果大家都使用Java和Log4J日志框架,那么可以使用一个配置,按照时间来切割和保留日志。但是如果有人使用小众语言,或者使用不具备日志切割能力的日志框架,想要拥有和Log4J一样的日志切割能力怎么办?你可能会说怎么会有这样的日志框架,可能你用的Log4J或者Logback之类的日志框架太强大了。其实其他语言还真有这样的,日志框架也有很多轮子,质量参差不齐。不能要求每个日志框架都具有相同的能力,只能由一个Agent进程来处理。看到这里,你可能已经发现这个Agent已经超出了文章开头的定义。Agent所在的机器不一定是Client,他们也不一定通信。Agent此时更像是一个“辅助进程”。存储和计算分离的概念广泛应用于数据库和消息队列。我会在这里借用它。表达不准确请见谅。在没有代理之前,服务器负责数据的存储和计算。有了代理之后,服务器的部分计算可以交给代理,这样不仅可以减轻服务器的压力,也可以大大降低服务器代码的复杂度。以ServiceMesh为例,将基础组件和业务解耦恰到好处。对流量的管理,如限流、熔断、切割等,原本是在RPC框架中实现的。每次变更升级都需要业务方修改依赖升级发布。使用Agent技术后,将原来RPC的能力下放到Agent,变化只需要升级即可。业务与基础组件研发相互独立,效率大幅提升。为什么大厂偏爱Agent技术大厂的特点是人多,必然会带来一些效率问题。因此,大厂往往在工程效率的探索上走在前面,他们会将基础设施与业务研发分开,每个人的界限都很清楚,每个人都各司其职。但这也带来了严重的问题。如果基础组件与业务耦合严重,会阻碍架构的演进。比如某天基建部门新增一个维度的限流能力,升级提升需要业务方的操作。而此时恰好业务有急事,基础部件的升级势必要搁置。因此,将基础组件与业务解耦的Agent技术受到了各大厂商的青睐。大厂也有技术栈多的问题。有时为了解决跨语言、跨框架的问题,只能使用Agent技术。Agent关键技术及不足Agent关键技术有很多,看似不难,但要做好,真的是费了一番功夫:资源隔离,通常会用到cgroups技术Agent生命周期管理,包括Agent上线,upgrade、grayscale、Offline等管理需要统一的管控平台,否则Agent管理会是进程间通信的一个头疼问题。这不是必须的,但大多数Agent都需要考虑这一点。一般有以下几个选项,结合实际情况做选择可以达到稳定性,Agent随时会挂掉,需要以此来设计和实现Agent,最好Agent可以降级,即使没有Agent,业务也能照常运行资源消耗问题Agent毕竟只是一个附属品,不能占用过多的内存、CPU,启动速度快。从这个角度来看,Go是一个不错的选择。在容器环境下,Agent独立形成一个容器和一个业务容器的Pod,引向物理机。很多Agent容器都是资源的严重浪费,虚拟机也是如此。因此,节省资源的方法是在一台物理机上只安装一个代理。租户隔离技术没有灵丹妙药。Agent也有它的缺点:结构复杂,管理困难,性能问题让很多小厂望而却步。如果是直接代理流量,性能问题会很严重。毕竟网络通信多了一跳,这也是ServiceMesh的问题之一。它甚至已经演变成无代理的Mesh。最后,虽然看完这篇文章你还不知道如何实现Agent,但是通过这篇文章你可以了解什么是Agent技术,它有什么好处,为什么大厂偏爱这种技术,有什么重点和不足代理技术。