18、函数设计:重复编写相似函数,怎样实现逻辑复用

你好,我是徐逸。 上节课我们学习了如何使用设计模式,来提升我们代码的可维护性。不过除了设计模式之外,Go 语言本身所提供的反射和泛型特性,同样是我们手中的得力工具。借助这些特性,我们能够达成逻辑复用的目标,避免重复编写那些功能相近的函数,让代码更加简...

Go服务开发高手课

17、设计原则和模式:功能持续迭代,如何减少改动

你好,我是徐逸。 上节课我们学习了如何构建一个规范的目录,不过对于一个快速迭代的项目,即便有了清晰的目录结构,但如果写代码不讲究一定的方法,后续修改和扩展也会非常困难。针对写代码过程中面临的一些场景,业界早就总结归纳出了一些通用解决方案,而这些场景和...

Go服务开发高手课

16、目录规范:几万行的大文件,如何重构目录结构

你好,我是徐逸。 上节课我们学习了如何拆分项目,不过对于复杂系统来说,即便拆分了项目,每个子项目里的文件庞大且复杂,管理和维护都非常困难。这时候我们就需要学会如何抽丝剥茧,为这样的文件建立一个合理的目录结构。 今天我就用分层架构的思想,带你将一个包含...

Go服务开发高手课

15、项目拆分:业务逻辑复杂,如何拆分服务让协作清晰有序

你好,我是徐逸。 作为后台研发,在我们的日常工作中或多或少都接触过微服务架构。对于微服务架构,我们除了要熟悉常用的微服务技术栈之外,还有一个极为重要的部分,那就是如何进行微服务拆分。要知道,服务拆分决策与实施的过程,会直接对系统未来的迭代效率和可维护...

Go服务开发高手课

14、本地缓存:缓存存不下又不能回源怎么破

你好,我是徐逸。 在前面两节课里,我们已经深入探讨了多种解决分布式缓存问题的策略。然而,在面对高并发、低延迟的场景,特别是在抖音、快手这类短视频应用的推荐与搜索功能场景,我们发现Redis作为缓存解决方案存在一定的局限性。 这是因为Redis主要支持...

Go服务开发高手课

13、分布式缓存:大Key更新,拆分大Key如何防脏读

你好,我是徐逸。 在上一节课中,我们深入探讨了如何应对Redis中的热Key问题,并掌握了多种解决方案。然而,在面对高并发的挑战时,我们不仅要关注热Key问题,还必须关注另一个可能影响Redis性能的因素——大Key问题。 今天这节课,我们就来聊聊R...

Go服务开发高手课

12、分布式缓存:大促抢购,不知热点咋防热Key

你好,我是徐逸。 通过上节课的学习,我们知道了提升服务吞吐的数据库架构方案。 不过在实践中,除了在数据库层面做优化之外,我们还可以通过搭配缓存的方式,来减轻数据库的访问压力,避免数据库成为性能瓶颈点。例如电商大促的商品详情页,由于商品的名称、图片链接...

Go服务开发高手课

11、数据库:分库分表,没有用户id怎么分

你好,我是徐逸。 通过前面的课程学习,我们已经了解了如何从编码和框架这两个层面来优化服务性能。不过呢,当性能瓶颈点是下游数据库时,这两个层面的优化就无能为力了。 对于数据库性能的优化,除了合理使用索引等使用细节上的优化之外,在高并发场景,我们还需要在...

Go服务开发高手课

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

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

Go服务开发高手课

9、网络编程:如何进行网络IO编程降消耗,提吞吐

你好,我是徐逸。 前面,我们花了不少篇幅一同深入学习了Go服务高性能编码技巧,来全力保障线上服务的性能。不过呢,除了我们写的业务逻辑代码,服务框架本身对于性能也有着举足轻重的影响。而影响框架性能的一个很重要的因素,就是框架所使用的网络IO模型。 今天...

Go服务开发高手课
19192939495268