什么是微服务?

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

其实并不是。

微服务一词来源于 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、微服务&分布式、消息队列、操作系统、计算机网络、数据结构与算法等内容。

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

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉默王二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值