Go 服务开发高手课
15
15
1.0x
00:00/00:00
登录|注册

10|网络通信:不改业务代码,如何降低延时?

你好,我是徐逸。
在上节课的内容中,我们一起学习了网络编程技术,并了解了框架底层不同的网络 IO 模型是如何影响到服务性能的。
不过呢,当服务调用的 IO 延时比较长时,除了框架本身网络 IO 模型的优化之外,我们还可以使用其它方式,来降低服务调用的网络 IO 延时。今天我就来聊聊如何在不改业务代码的情况下,降低服务调用的 IO 延时。

跨机通信优化

就像下面的图展示的一样,两个服务之间的请求调用会经过网络上的很多节点。服务之间的物理距离越远,经过的网络节点越多,两个服务之间的网络通信延时就会越高。
图1 服务调用网络链路
因此,为了降低网络 IO 的延时,咱们的第一个优化思路是——让通信的 Client 和 Server 物理距离尽可能近一点。怎么才能达到这一目标呢?
为了让进行通信的 Client 和 Server 尽可能近,在流量调度上,我们可以采取下面两个优化策略。
第一个策略是,当两个服务在多地域有部署时,Client 和 Server不进行跨地域调用。比如,以下面的图为例,服务 A 在华北区域的服务器,只调用服务 B 在华北区域部署的服务器,尽量不要跨地域去调用服务 B 在华东区域部署的服务器。
图2 同地域调用
当然,如果同地域内的下游服务出现故障或不可用时,在延时满足要求的情况下,出于容灾上的考虑,我们可以允许短期的跨地域调用。
图3 跨地域容灾调用
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. 通过跨机通信优化,可以采取策略让通信的Client和Server物理距离尽可能近一点,避免跨地域和跨机房调用,以降低网络IO延时。 2. 亲和性部署策略可以将两个服务尽可能部署到一台物理机上,实现同机通信,从而消除网络传输开销,提高通信效率。 3. 合并编译方案可以将下游服务编译成SDK,并替换RPC调用为本地SDK的函数调用,从而消除RPC调用的编解码操作和系统调用开销,提升服务调用性能。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 服务开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • lJ
    合并编译在微服务架构中并非一种普适的优化手段,而是针对特定场景下服务优化的一种策略。 从《字节跳动合并编译实践》中的收益公式来看,合并编译的收益与服务的资源量、调用关系的密切度、编解码开销以及服务治理开销密切相关。适合合并编译的服务需要符合「资源量大、调用关系密切、编解码开销大」这些条件外,还要满足非缓存、固定开销类型的服务、容器负载不能太高、编解码大于 3% 的服务。 合并编译能够带来一定的性能提升,但也并非没有局限,它破坏了服务自治、可扩展性和故障隔离设计原则。
    2024-12-30归属地:江苏
    1
  • Realm
    思考题: 1. 不符合统一的规范; 2. 不便于横向扩容; 请教老师,编译成rpc服务和编译成sdk,源代码层面需要修改什么吗?
    2024-12-30归属地:浙江
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)