什么是微服务?

很多小伙伴都在问,怎么不更新微服务相关的内容,是不是觉得太难了?

其实并不是。

微服务一词来源于 Martin Fowler 和 James Lewis 的《Microservices》一文,是一种架构风格,即将单体应用拆分为小型的服务单元,然后服务和服务之间通过 HTTP 的 API 进行资源访问操作,而已。

下面👇🏻是这篇文章中定义微服务的两张重要的图。

可谓一目了然。

顺带说一下 Martin Fowler 是谁哈,见下图,又一位绝顶聪明的软件开发者。

不得不说,帽子一戴,文艺多了。

马丁福勒出版了很多本书籍,其中最著名的作品包括《重构:改善既有代码的设计》(Refactoring: Improving the Design of Existing Code)。除此之外,它还是敏捷开发的倡导者。

另一位作者目前是 ThoughtWorks(一家全球顶级软件开发和数字化转型咨询公司)的一员,专注于软件架构、微服务和持续交付等领域。

使用微服务的优势

微服务作为一种软件开发的架构风格,具有一系列优势。

1、模块化和解耦:微服务架构将复杂的应用程序划分为一组小型、独立的服务,每个服务负责特定的业务功能。这种模块化和解耦可以提高代码的可读性和可维护性。

2、独立部署和开发:每个微服务可以独立进行部署和开发,这有助于提高开发团队的生产力。当某个服务需要升级或修复时,团队可以仅关注并部署该服务,而无需对整个系统进行修改。

3、可扩展性:由于微服务的独立性,可以根据每个服务的需求进行单独扩展。这有助于更有效地处理不同服务之间的性能和资源需求。

4、技术栈灵活性:每个微服务可以使用不同的技术栈进行开发,这使得开发团队能够根据具体需求选择最适合的技术和工具。

5、故障隔离:在微服务架构中,如果一个服务出现故障,它通常不会影响其他服务的正常运行。这有助于提高整个系统的容错能力和稳定性。

6、便于持续集成和持续交付:由于微服务的独立性,持续集成(CI)和持续交付(CD)可以更容易地实施,从而加速软件开发和发布的过程。

使用微服务的劣势

尽管微服务架构具有一定的优势,但它也带来了一些挑战和劣势。

1、系统复杂性:微服务架构意味着要开发和维护一个分布式系统,这会导致更高的复杂性。

2、服务间通信:由于微服务之间需要相互通信,开发人员需要处理不同服务之间的接口和数据交换。

3、数据一致性:在微服务架构中,每个服务通常拥有自己的数据存储。这可能导致跨服务的数据一致性问题,特别是在需要进行事务处理时。

4、部署和运维复杂性:微服务架构中包含多个独立部署的服务,这可能导致部署、监控和运维方面的复杂性增加。

5、技能要求:为了实施和维护微服务架构,开发团队需要具备分布式系统、容器技术、持续集成/持续部署(CI/CD)等方面的专业知识和经验。

6、初始开发成本:虽然微服务架构可以带来长期的收益,但在项目初期可能需要投入更多的时间和资源来建立基础设施、工具和流程。对于小型系统来说,投入产出比会非常低。

上微服务前的准备

对于上不上微服务,关键取决于公司的发展,系统是否真的到了必须做拆分的地步。

关于这一点,其实在《Microservices》这篇文章里也有提及。作者给出的建议就是,先从单体开始,直到单体成为问题,再去考虑拆分为微服务。

这里也有一些上微服务之前的建议,可以作为参考:

1、分析和了解系统:在开始重构之前,需要对现有的单体应用进行深入分析,了解其业务逻辑、数据流、依赖关系以及可能存在的性能瓶颈。

2、设计微服务划分策略:确定如何将单体应用拆分为一组独立的微服务。这通常涉及识别核心业务功能、领域驱动设计(Domain-Driven Design,DDD)和边界上下文(Bounded Contexts)。

3、设定合适的通信协议:选择合适的通信协议(如 RESTful API、gRPC、消息队列等)来实现微服务之间的通信。

4、数据分离策略:确定如何处理数据存储和数据一致性问题。这可能包括将单一的数据库拆分为多个数据库,以及实施数据同步和事务管理策略。

5、容器化与编排:为了便于微服务的部署和管理,可以考虑使用容器技术(如 Docker)和编排工具(如 Kubernetes)。

6、建立持续集成和持续交付(CI/CD)流程:微服务架构需要频繁地部署和更新各个服务。因此,建立可靠的 CI/CD 流程至关重要。

7、监控和日志:设计一个集中式的监控和日志系统,以便于收集、分析和处理分布式系统中的各种指标和日志。

8、安全策略:考虑微服务之间以及与外部系统的通信安全,实施适当的认证和授权策略。

9、团队组织和协作:调整团队结构和协作方式,以适应微服务架构。这可能包括跨功能团队、DevOps 文化等。

最后

如果你也需要一个从零到一可以提升自己技术项目实力的开源项目,推荐 GitHub 上这个星标 400+ 的技术派项目。

瞅瞅这首页,清新、高级、上档次!

这是一个基于 Spring Boot、MyBatis-Plus、MySQL、Redis、ElasticSearch、MongoDB、Docker、RabbitMQ 等技术栈实现的社区系统,采用主流的互联网技术架构、全新的UI设计、支持一键源码部署,拥有完整的文章&教程发布/搜索/评论/统计流程等,代码完全开源,没有任何二次封装,是一个非常适合二次开发/实战的现代化社区项目👍 。

目前还处于单体阶段,如果star 数能突破到 1000 star 后,会开始微服务重构。

不仅配套有开发文档,还会包括 Java、Go 语言、Spring、MySQL、Redis、微服务&分布式、消息队列、操作系统、计算机网络、数据结构与算法等内容。

总之一句话:学编程,就上技术派😁。

相关推荐
凭君语未可3 分钟前
豆包MarsCode算法题:三数之和问题
java·算法
kirito学长-Java9 分钟前
springboot/ssm考试系统Java学生在线考试系统web学习论坛源码
java·spring boot·学习
帅气的花泽类11 分钟前
error Unexpected ‘debugger‘ statement no-debugger
java·maven
cooldream200927 分钟前
SpringMVC 执行流程详解
java·spring·springmvc
redemption_229 分钟前
SpringMVC-01-回顾MVC
java
凡人的AI工具箱33 分钟前
40分钟学 Go 语言高并发:Select多路复用
开发语言·后端·架构·golang
redemption_233 分钟前
Spring-02-springmvc
java
GGBondlctrl35 分钟前
【Spring MVC】初步了解Spring MVC的基本概念与如何与浏览器建立连接
java·spring boot·spring mvc·requestmapping·restcontroller
ModelBulider38 分钟前
SpringMVC应用专栏介绍
java·开发语言·后端·spring·springmvc
努力的Java程序员42 分钟前
后端接受大写参数(亲测能用)
java·开发语言