跟着我学微服务,什么是微服务?微服务有哪些主流解决方案?
跟着我学微服务,什么是微服务?微服务有哪些主流解决方案?

本文我们主要把两个知识点搞清楚,第一个我们从业务场景的角度把微服务的概念理解清楚,第二个我们把理论掌握清楚后我们要知道Java技术栈方向主流的微服务方案有哪几种。本文中的业务场景和业务系统主要以大文旅和支付方向为主。
1 什么是微服务
在《微服务设计》中是这样解释“很小,专注做好一件事情”。在设计模式中单一职责原则就满足微服务中专注做好一件事情的定义,那么很小这个词每个人、每个技术团队对它的理解就不一样了有一定的主观性。我这里是这样理解小的概念,当你觉得你的业务系统代码不多、方便维护的时候那么就满足了“很小”的定义。所以“很小,专注做好一件事情”要和你的团队及业务结合来分析。
1.1 很小,专注做好一件事情
接下来我来用大文旅业务场景来分析微服务的第一个特性很小,专注做好一件事情,在我们业务发展的初期团队规模、业务体量都不是很大这个时候我们对服务的划分就很简单,我们按照业务线对服务进行了划分。文旅行业中票务是最基础的业务,所以我们第一个微服务就是基础票务微服务,第二个用户要购买我们的票务商品就衍生出了前端系统微服务,这个微服务主要面向的是终端用户,第三用户在购买系统的过程中需要支付功能所以我们拆分出聚合支付微服务。业务和团队发展的前期我们核心的微服务系统就是以上说的这几套。如果放在现在,这几套微服务在用户体量、数据体量、团队规模、业务复杂度来说肯定就不满足微服务的第一个特性很小,专注做好一件事情,但是在当时的业务场景下肯定是满足的。所以我们在做微服务拆分的时候一定要结合当下的情况来进行服务拆分。我们可以结合下图来一起理解我们文旅服务1.0在微服务中的应用,并理解很小、专注做好一件事情
3个团队3个核心业务服务

随着业务和团队的发展,我们在业务体量、复杂度和团队规模和之前比有了明显的增长。如果还是按照初期的1.0版本进行服务的拆分和维护,第一个是不满足“很小,专注做好一件事情”,第二个主要是我们在业务的扩展性和代码的维护上面效率远远没有之前高了,所以这时我们要升级我们的微服务。我们主要从这几个方面进行改善,将基础票务系统进行细粒度的拆分,因为第一个阶段的拆分在现在来看并没有满足“单一职责原则”,我们拆分为商品微服务、订单微模块、验票微服务(自有和第三方),面向后端的前端微服务拆分为软件和硬件方向微服务,将聚合支付业务和预付卡业务统一规划到企业级支付系统团队进行维护,涵盖的微服务主要有聚合支付微服务、预付卡核心交易系统微服务、预付卡前置系统微服务、清结算微服务、收单商户微服务等,另外我们新增了一些公共的数据平台和定时任务服务,这两个服务主要提供给报表业务和CRM业务团队使用,下图是文旅业务发展的第二阶段2.0版本的微服务划分图

再往下发展你的服务拆分就和你所在领域的用户、数据体量进一步增长,业务线逐渐增加,技术栈方向越来越广有关系了,这里就不逐一的举例说明了。我想我们分析到这应该能明白微服务的第一个特性“很小,专注做好一件事”的含义了,最后我来总结下,我们理解和拆分微服务时一定要结合你所在的行业、团队规模、业务体量、用户体量、数据体量、技术栈进行权衡利弊。
1.2 自治性
接下来我们来探讨微服务的第二个特性“自治性”,我们通过上面知识点和案例的理解,我们理解“自治性”就很容易了。
我们从字面上能确定它一定是一个独立的实例(独立进程)而且要能够自己管理自己对外提供的能力(服务接口),我们从独立进程和服务接口进行分析,所谓的独立进程意思就是我的微服务要能够部署到操作系统上(Win,Linux)并运行,因为它是一个 独立的实例而且它是服务所以要有能够提供服务能力的出口,那么这个出口我们称之为API(应用程序接口),这里有个建议不要把多个重要的服务部署在同一台服务器上,因为我们要考虑服务特别是核心服务的高可用。接下来我们还是看图理解自治性的独立进程和对外提供的能力(API)

分析到这里,我们把什么是微服务以及微服务的两个重要特性都分析完了,小伙伴们可以思考几分钟你理解了吗?你又是如何理解的微服务。欢迎评论区讨论沟通,接下来我们看开源微服务方案
2 微服务有哪些主流解决方案
我们学习了微服务的理论基础知识,接下来我们就要了解掌握现在Java技术栈方向开源的主流微服务解决方案有哪些了,毕竟学习理论是为了让我们更好的实践。只有掌握了理论、开源方案才能进行我们后续的基于微服务的项目实战。
学习开源方案是为了学习先进的微服务实现思想,能够让我们更好的基于微服务框架完成业务服务化。
2.1 SpringCloud
Spring Cloud Netflix 是 Spring Cloud 的一个子项目,结合了 Netflix 开源的多个组件,但是Netflix自2018年停止维护和更新Netflix OSS项目,包括Eureka、Hystrix等组件,所以Spring Cloud Netflix也逐渐进入了维护模式。该项目包含了许多流行的 Netflix 组件,如Eureka(服务注册与发现)、Ribbon(客户端负载均衡)、Hystrix(断路器)、Zuul(API 网关)等。它们都是高度可扩展的、经过大规模实践验证的微服务组件。
2.2 SpringCloudAlibaba
Spring Cloud Alibaba 是 Spring Cloud 的另一个子项目,与分布式应用开发框架相关。它提供了一整套与微服务生态系统集成的解决方案。该项目包括 Nacos(服务注册与发现、配置管理)、Sentinel(流量控制、熔断降级)、RocketMQ(消息队列)等组件。它为构建基于 Spring Cloud 的微服务架构提供了丰富的选项。
2.3 Dubbo
Dubbo 是一个高性能、轻量级的 Java 微服务框架,最初于2011年开源。它提供了服务注册与发现、负载均衡、容错、分布式调用等功能,后来一度停止维护,在近两年,又重新开始迭代,最新版本为Dubbo3。Dubbo 使用基于 RPC(Remote Procedure Call)的通信模型,具有较高的性能和可扩展性。它支持多种传输协议(如TCP、HTTP、Redis)和序列化方式(如JSON、Hessian、Protobuf),可根据需求进行配置。Dubbo更多地被认为是一个高性能的RPC(远程过程调用)框架,一些服务治理功能依赖于第三方组件实现,比如使用ZooKeeper、Apollo、Nacos等等
接下来我们还是通过图解技术来大致了解开源的主流微服务方案

欢迎大家关注我的项目实战内容itbeien.cn,一起学习一起进步,在项目和业务中理解各种技术。

欢迎沟通交流技术和支付业务,一起探讨聚合支付/预付卡系统业务、技术、系统架构、微服务、容器化。并结合聚合支付系统深入技术框架/微服务原理及分布式事务原理。加入我的知识星球吧

3 源码地址
跟着我学微服务-基于企业级支付项目系列文章、资料和源代码会同步到以下地址,代码和资料每周都会同步更新
该仓库地址主要用于基于企业级支付系统,学习微服务整体技术栈