【完结13章】Go微服务精讲:Go-Zero全流程实战即时通讯
微服务架构的核心概念:
服务单元(Microservices): 微服务架构将整个应用划分为小的、自治的服务单元。每个服务单元都有自己的数据库,并且可以独立运行、部署和扩展。这种独立性允许开发团队专注于特定服务的开发和维护,而不会受到其他服务的影响。
独立部署: 微服务可以独立部署,这意味着对一个服务的修改和更新不会影响其他服务。这种特性使得系统更具灵活性,可以更快地推出新功能,进行修复和升级。
分布式通信: 微服务之间通过轻量级的通信机制进行通信,通常使用HTTP RESTful API或消息队列。这使得服务之间的集成更为灵活,同时支持多种技术栈的混合使用。
服务自治性: 每个微服务都是自治的,意味着它可以独立进行开发、测试、部署和扩展。这也意味着团队可以使用不同的技术栈,以满足其服务的特定需求。
领域驱动设计(DDD): 微服务架构倡导使用领域驱动设计的理念,将业务划分为不同的领域,并在每个领域中构建相应的微服务。这有助于更好地组织和理解复杂的业务逻辑。
微服务架构适合于大型、复杂的应用程序,特别是在需要团队自治性、持续交付、技术多样性、弹性和可伸缩性、高可用性和容错性等方面有特殊需求的场景下。
然而,引入微服务架构也需要谨慎考虑,因为它引入了分布式系统的复杂性,需要适当的管理和治理。
大型复杂应用: 微服务架构特别适合大型、复杂的应用程序,因为它可以将整个应用拆分为小的、自治的服务单元,每个服务单元专注于特定的业务功能。这种模块化的设计使得开发、测试、部署和维护更加简单和灵活。
团队规模和自治性: 当团队规模较大时,微服务架构可以使不同的团队独立负责不同的微服务,提高了团队的自治性和灵活性。每个团队可以选择适合其需求的技术栈和工具,提高了开发效率和创新性。
持续交付和敏捷开发: 微服务架构支持持续交付和敏捷开发,因为每个微服务可以独立部署,不会影响整个系统的运行。这使得团队能够更快速地推出新功能和修复问题。
弹性和可伸缩性需求: 微服务架构可以更容易地实现弹性和可伸缩性,因为可以选择性地扩展特定的微服务,而不需要复制整个应用。这对于应对变化的负载和需求非常有帮助。
技术多样性需求: 如果应用需要使用不同的技术栈和编程语言,微服务架构可以很好地满足这一需求。每个微服务可以选择最适合其需求的工具和语言,提高了灵活性和创新性。
高可用性和容错性需求: 微服务架构通过将应用拆分为小的服务单元,提高了系统的容错性。单个微服务的故障不会影响整个系统的运行,提高了系统的可用性。
复杂业务逻辑和领域驱动设计: 当应用涉及复杂的业务逻辑和需要采用领域驱动设计时,微服务架构可以更好地组织和理解复杂的业务逻辑。每个微服务可以专注于特定的领域,提高了系统的可维护性和可理解性。
在微服务架构中,一般每一个服务都是有多个拷贝,来做负载均衡。一个服务随时可能下线,也可能应对临时访问压力增加新的服务节点。这就出现了新的问题:
服务之间如何相互感知?例如有新的服务实例上线,已上线的实例如何知道并与之通信。
服务如何管理?服务实例数量多了,也面临着如何管理的问题。
这就是服务的发现、识别与管理问题。解决多服务之间的识别,发现的问题一般是通过注册的方式来进行。
具体来说:当服务上线时,服务提供者将自己的服务注册信息注册到某个专门的框架中,并通过心跳维持长链接,实时更新链接信息。服务调用者通过服务管理框架进行寻址,根据特定的算法,找到对应的服务,或者将服务的注册信息缓存到本地,这样提高性能。当服务下线时,服务管理框架会发送服务下线的通知给其他服务。
常见的服务管理框架有:Zookeeper等框架。
如上的问题解决方案有两种具体的实现,分别是:基于客户端的服务注册与发现、基于服务端的服务注册与发现。
![QQ截图20240508141754.png](https://static.golangjob.cn/240508/4bfd4817167e79f0c383d26372e0f5f9.png)
有疑问加站长微信联系(非本文作者)
![](https://static.golangjob.cn/static/img/footer.png?imageView2/2/w/280)