【大厂文章学习】合并编译的学习与思考

【大厂文章学习】合并编译的学习与思考

【微信文章】字节跳动合并编译实践通过将微服务转换为本地函数调用的方式优化函数耗时和容器资源。

文章主要内容

合并编译是什么?解决了什么问题?有什么挑战?适用于哪些情况?

合并编译是什么: 就是将存在上下游依赖的服务由分开编译部署的方式,改成了合并编译部署。

解决了什么问题: 最大的优化来自于 远程调用rpc通过合并编译变成了本地function call后不存在序列化和反序列化的开销,因此可以节约中的容器资源,大部分是CPU资源上的节约。

主要挑战: 如图中所示:image在带来CPU节约的同时,也带来了两个服务合并的弊端,比如说:服务隔离、版本管理、研发流程等上。 此外,由于将RPC改成本地function call需要在编译时生成并改写代码,因此只有部分框架的服务才支持,比如文中的kitex​框架。

适用于哪些情况:

合并编译主要解决微服务过微带来的性能问题,其收益公式如下

\[Benefit = Downstram Quota * MergeRatio * (CodecRatio + Service Governacne Ratio) * 2 \]

DownstreamQuota 指下游服务的资源申请量;MergeRatio 指合并的比例;Codec Ratio 指编解码的开销;ServiceGovernaceRatio 指服务治理的开销。

由收益公式可以看出合并编译应该聚焦于 「资源量大、调用关系密切、编解码开销大」 的服务,才能够拿到较大的收益。

此外,合并的同时不能影响业务稳定性,因此对于容器资源利用充分(CPU、内存、磁盘)的服务也不太适用!

思考

”微服务“的概念兴起之后,处于种种原因大家很喜欢将大服务拆分成”微服务“并且上云。天下大势合久必分、分久必合,在”微服务“流行起来之后,大家逐渐发现 微服务 没有想象中的那么美好,资源并没有那么节省、服务之间的拆分处理如何控制等等,因此目前也有了一些声音表示要将微服务回归单体,比如:微服务回归单体,代码行数减少75%,性能提升1300%-腾讯云开发者社区-腾讯云。

服务从单体迁移到微服务需要大量成本,从微服务迁移回单体也不是免费的, 合并编译为我们提供了一种思路:在业务开发的时候不需要改动代码,只需要在编译的时候将需要合并的两个服务通过代码生成等相关的技术合并到一起即可。通过这样巧妙的思路,可以达到“免费”的“微服务回归单体”的目的,同时,由于没有rpc带来的序列化和反序列化开销,对于耗时、总体的CPU消耗等都有不同程度的好处。

但是与此同时我们也需要注意到:

  • 这种方式只支持某些特定框架开发的服务,不能适用于全部的业务。
  • 微服务可以达到服务之间的完全隔离,即一个服务的崩溃不会影响到另一个服务,如果将分布式改成单体,那么 两个服务的资源是无法完全隔离开的(内存、磁盘、CPU)
  • 对基建的影响:监控接入、日志采集系统、路由层的限流组件(服务合并之后,中间少了路由,没办法进行外部限流了)等系统的运作方式都需要适应性的修改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/873415.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全帽识别摄像机

安全帽识别摄像机在建筑工地安全管理中具有重要意义。在高空作业、机械作业等危险环境下,佩戴安全帽是保障工人生命安全的重要措施。通过部署这种设备,系统可以实时监测工地内的作业人员,并自动识别出未佩戴安全帽的情况,及时发送警报通知现场管理人员进行处理,有效预防事…

监狱视频监控行为智能预警系统

监狱视频监控行为智能预警系统通过在监狱围墙、监舍、走廊、习艺楼等区域部署摄像机,监狱视频监控行为智能预警系统实现了对监狱内部的全方位、全天候监测。系统对连续的行为动作进行有效判断精准识别出离床、攀高、独处、倒地、斗殴、徘徊、滞留、逆行、聚众、静坐不动、入厕…

Spring-AOP(面向切面编程)

Spring-AOP(面向切面编程)面向切面编程(Aspect Oriented Programming-AOP)是面向对象编程(Object Oriented Programming-OOP)的一种补充,二者是互补的编程范式。在OOP中,关键单元是类,而在AOP中关键单元则是横切关注点。面向对象编程关注于将现实世界中的实体抽象为对象,并…

Java的控制流程

Java的控制流程 1. Scanner对象Java.util.Scanner 是Java5的新特性,我们可以通过Scanner类来获取用户的输入。 基本语法: Scanner s = new Scanner(System.in); 通过Scanner类的next() 与nextLine()方法获取输入的字符串,在读取我们一般需要 使用 hasNext() 与 hasNextLine…

【Java安全】基础汇总

一、JAVA安全 1.1 java的序列化和反序列化 Java 序列化是指把 Java 对象转换为字节序列的过程ObjectOutputStream类的 writeObject() 方法可以实现序列化 Java 反序列化是指把字节序列恢复为 Java 对象的过程ObjectInputStream 类的 readObject() 方法用于反序列化。 1、序列化…

云计算和服务器

一、云计算概述 ICT是世界电信协会在2001年的全球性会议上提出的综合性概念,ICT分为IT和CT,IT(information technology)信息技术,负责对数据生命周期的管理;CT(communication technology),负责数据的传输管理。 CT技术是ICT技术栈的底核。 1、计算机 计算机是现代一种…

movfuscator学习

demovfuscator docker镜像 - 狗小剩就是利用32位mov的图灵完备性,来代替各种代码(32位汇编太逆天了).如果看到只有mov就知道是这b玩意了,不过这种程序性能肯定不行,代码段也好长.可以利用ida查锁定字节码的范围,查相应的字符串. demovfuscator问题太多了,一个是识别c的代码无法…

中考英语优秀范文-016 How to keep a good relationship with parents 如何与父母保持良好的关系

1 写作要求 某英文报社正就青少年与父母关系这一话题开展题为“How to keep a good relationship with parents”的征文活动。请你根据以下要点, 写一篇80个词左右的英语短文参加此次活动: 1 父母规矩太多, 过于强调学习成绩, 不理解自己等问题; 2 你对这些问题的看法; 3 你与父…

KubeSphere 开源社区 2024 年度回顾与致谢

随着 2024 年圆满落幕,我们回顾 KubeSphere 社区这一年走过的每一步,感慨万千。2024 年,KubeSphere 继续领跑云原生技术的创新与发展,推动开源文化的传播,致力于为全球开发者和企业用户提供更强大的平台和解决方案。感谢每一位社区成员的辛勤付出,正是因为你们的共同努力…

云--什么是云

https://whatiscloud.com/

城市生命线安全保障:技术应用与策略创新

城市生命线工程是维系城市正常运行、满足群众生产生活需要的重要基础设施。随着城市化进程的加快,城市基础设施生命线安全运行的复杂性日益加剧,保障城市居民日常生活正常运行的水、电、气、热等各类地下管线以及桥梁、市政设施、轨道交通等城市基础设施的安全问题日益突出。…

Android图形层垂直同步虚拟VSYNC机制

简介 某次调图形性能的时候(启动后台录屏,下(或)称case)发现Android SurfaceFlinger Vsync机制并没有以前想的这么简单粗糙,特别是这次调图形性能发现一些跟Vsync有关联,因此做个总结详解。 跟不上旋律节奏的VSYNC 一份追踪报告,发现Vsync信号非常不规律,于是从这里入手…