微服务架构之路1,服务如何拆分?使用微服务的注意事项?

这篇具有很好参考价值的文章主要介绍了微服务架构之路1,服务如何拆分?使用微服务的注意事项?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微服务架构之路1,服务如何拆分?使用微服务的注意事项?,SpringCloud实战教程,架构,微服务,云原生

大家好,我是哪吒。

微服务架构之路1,服务如何拆分?使用微服务的注意事项?,SpringCloud实战教程,架构,微服务,云原生

一、前言

微服务已经是Java开发的必备技能,甲方不管项目大小,都想上微服务,感觉上了就高大上了,牛逼了。

微服务确实给我们带来了一定的便利性,但是也带来了麻烦,比如学习成本高,存在很多不可预见的问题。

我是做互联网项目的,刚开始的时候,用的是springboot+vue的单体架构,虽然也用了很多中间件,云服务器,数据库集群等,但终究还是单体服务,存在着一定的限制,随着业务架构的不断扩大,每次功能发布上线,都需要每个开发负责人对代码进行打包,再进行最后的代码合并,这时候,就会遇到各种各样的问题,代码忘记提交了,提交了忘记打包了,提交的时候忘记更新了,代码冲突了,jar包版本不统一、jar包版本冲突等各式各样的问题。

有一次项目部署测试,后台通过SVN提交记录进行增量打包,然后通过xshell进行Linux服务器程序更新,再重启。一套下来,差不多需要半个多小时的时间,而且因为缺少class文件的原因,反反复复更新了三次,我都要崩溃了~

你是否也遇到过同样的问题?

如果也是这样,是时候将架构升级为微服务了。分功能开发,每个小团队负责一个功能,然后部署为微服务,引入Docker容器技术。

系统架构经历了单体服务 -> 微服务架构 -> 容器化应用-> DevOps的发展历程。

微服务的概念是在2014年由Martin Fowler和James Lewis共同提出的,他们定义了微服务是由单一应用程序构成的小服务,拥有自己的进程和轻量化处理,按照业务功能分别处理,以全自动的方式部署,与其它服务使用HTTP API通讯。同时,服务会使用最小规模的集中管理(比如Docker),每个服务可以使用自己的语言和数据库。

二、单体服务的弊端

  1. 部署成本高,效率低下
  2. 团队协作开发成本高,两个人同时编写一个类,谁先提交谁舒服,哈哈
  3. 系统高可用性差,因为所有功能最后都部署在一个war包里,运行在同一个Tomcat进程中,一旦某一功能出现问题,就会导致整个系统的崩盘,虽然还有其它机器提供服务,但因为一个小问题,就挂了一个机器,这不蛋疼吗?
  4. 线上发布变慢,一般单体服务都是通过人工去更新代码,然后再重启,一个服务部署了16个机器,就要手动替换16次,而且可能还会有更多的服务。

想要解决以上问题,微服务应运而生。

三、微服务化

微服务化,在我看来就是将 传统的单机应用中通过jar包依赖产生的本地调用 改造成 通过RPC远程接口调用。对于一些通用的业务逻辑,想办法将其抽象并独立成专门的模块,因此对代码复用、分小组开发、单业务理解都大有裨益。

在最近的项目经历里,我深有体会,比如将一个项目分为公共模块、注册中心、网关模块、管理模块、某个单业务模块等。一个人一个模块,自己开发自己的,互不干预,每个模块独立开发,独立部署、独立测试、独立上线、独立运维,与其它模块基本上零联系。

可见,通过微服务化,可以解决应用单体膨胀,团队开发耦合度高、测试难、部署难的问题。

四、服务如何拆分?

微服务的拆分需要遵循一定的原则和考虑因素,包括以下几点:

1、拆分原则

  1. 体量较轻:每个微服务的规模应该适中,避免过于复杂或过于庞大。
  2. 支持跨平台、跨语言通信协议:微服务应该具备跨平台、跨语言的通信能力,以便能够与其他服务进行有效的交互和集成。
  3. 操作性强、易于测试:微服务应该具备易于操作和测试的特性,以便能够快速、准确地实现业务需求。
  4. 明确接口要实现的内容:在拆分微服务时,需要明确每个服务接口要实现的功能和业务逻辑,避免出现接口依赖的情况。
  5. 持续演进原则:在拆分微服务时,应该考虑到服务的可扩展性和可靠性,以便能够适应业务需求的变化和容错处理。

2、拆分时机和拆分方法

(1)根据负责一个微服务原则进行拆分

在拆分微服务时,可以根据业务领域和实际需求来决定拆分的时机。通常情况下,如果团队规模较小,可以将多个业务功能整合成一个微服务;如果团队规模较大,则可以将一个业务功能拆分成多个微服务。

(2)基于可扩展性拆分

在拆分微服务时,可以考虑将系统中业务模块按照稳定性进行排序,将已经成熟且稳定性高的服务拆分为稳定服务,将经常变化和迭代的服务拆分为变动服务。这样可以提升项目的迭代速度,避免对已有成熟功能产生影响。

(3)基于可靠性拆分

在拆分微服务时,可以考虑将系统中业务模块按照优先级排序,将可靠性要求高的核心服务和可靠性要求低的服务拆分出来。这样可以保障核心服务的可用性。

3、拆分实践

(1)持续演进

在微服务的拆分过程中,应该遵循持续演进的原则,逐步拆分细化,而不是一次性拆分成无数个微服务。这样可以避免微服务数量瞬间爆炸性增长,降低开发、测试、运维等环节的难度。

(2)非业务因素考虑

在微服务的拆分过程中,除了要遵循拆分原则和考虑业务因素外,还需要关注非业务因素,如需求变更的频率、高性能、安全性、团队规模以及技术异构等因素。这些因素对于最终落地也会起到决定性的作用。

(3)最佳实践

根据实际情况和实践经验,可以采用一些最佳实践来指导微服务的拆分。例如,可以根据团队规模来决定服务的拆分粒度;根据业务领域和实际需求来确定服务的拆分时机;根据稳定性、优先级等因素来确定服务的拆分方法等。

微服务的拆分需要结合实际情况和实践经验来进行综合考虑和分析。只有在明确了业务需求、团队规模、技术栈等因素后,才能制定出合适的拆分方案,实现微服务的有效拆分和管理。

五、使用微服务的注意事项

1、确保相关业务和利益相关者的支持

在决定是否使用微服务架构之前,需要与所有利益相关者进行沟通和合作,确保他们理解并支持这个决策。同时,需要评估组织的技术专业知识水平,并准备相应的资源来支持微服务架构的实施和运维。

2、确定微服务的拆分粒度

微服务的拆分应该根据业务领域和实际需求来确定,同时需要考虑服务的稳定性、优先级、可靠性等因素。拆分粒度应该适当,避免过度拆分或拆分不足。

3、遵循微服务架构的原则

微服务架构需要遵循一系列原则,例如单一职责原则、接口隔离原则、服务自治原则等。这些原则可以帮助设计出更好的微服务架构,并减少潜在的问题。

4、确保接口的稳定性

微服务之间的通信依赖于接口,因此需要确保接口的稳定性。接口需要遵循一定的规范,例如RESTful API、RPC等,以确保不同微服务之间的通信可靠性和性能。

5、关注数据一致性

在微服务架构中,不同的服务可能由不同的团队开发和维护,因此需要关注数据的一致性。需要设计适当的数据存储方案,并确保不同服务之间的数据一致性和完整性。

6、考虑安全性

微服务架构中的安全性是一个重要的问题。需要确保每个微服务的安全性,包括身份认证、访问控制、数据加密等方面。同时,需要考虑到跨域请求的安全性,以避免潜在的安全漏洞。

7、做好监控和日志记录

微服务架构中的每个服务都需要进行监控和日志记录。需要确保每个服务都具备适当的监控和日志记录机制,以便及时发现和解决问题。

8、做好容错处理

微服务架构中的每个服务都可能出现故障或异常情况。因此,需要设计适当的容错处理机制,以避免故障或异常情况对整个系统造成严重影响。

使用微服务需要注意多个方面的问题,包括业务支持、拆分粒度、原则遵循、接口稳定性、数据一致性、安全性、监控和日志记录以及容错处理等。只有在全面考虑并处理好这些问题后,才能实现微服务的成功实施和运维。


🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。文章来源地址https://www.toymoban.com/news/detail-744418.html

到了这里,关于微服务架构之路1,服务如何拆分?使用微服务的注意事项?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Jetpack】ViewModel 架构组件 ( 视图 View 和 数据模型 Model | ViewModel 作用 | ViewModel 生命周期 | 代码示例 | 使用注意事项 )

    Activity 遇到的问题 : 瞬态数据丢失 : 操作 Activity 时 , 如果 屏幕 自动旋转 , 当前 Activity 组件会 执行销毁操作 , 并重新创建新的 Activity 组件 , 该操作会 导致 Activity 的 瞬态数据 丢失 ; 内存泄漏 : 在 系统组件 如 Activity 中 , 启动了一个线程 , 在线程中执行一系列操作 , 如果 A

    2024年01月25日
    浏览(49)
  • 使用阿里云国外和国内云服务器有什么注意事项?

    使用阿里云的国外和国内云服务器时,有一些注意事项需要考虑: 地理位置:选择离你的用户或数据中心最近的地理位置,可以减少延迟和提高访问速度。对于国内用户,使用国内云服务器可能更好;对于国外用户,使用国外云服务器可能更适合。 价格和计费:不同地区的

    2024年02月11日
    浏览(42)
  • 如何使用Vscode开发Uni-app项目以及注意事项详解

    哟,大牛来了!!! 前言 :想必大家敲代码用的编辑器大多数都是Vscode吧,随着技术的更新,uni-app成为了前端不可或缺的一项技术,但是呢,官方推荐使用的HBuilderX编辑器让习惯了使用Vscode的我们不太习惯,虽然HBuilderX编辑器对uni-app极度的友好,但还是让在座的各位大牛以及

    2024年02月05日
    浏览(66)
  • Git命令教程:如何有效地使用Git(附案例详解和注意事项)

    git 是一个分布式版本控制系统,用于敏捷高效地处理任何大小的项目。它是为了在Linux内核开发中更好地进行版本控制而由Linus Torvalds创建的。 git 是一个开源项目,自2005年以来,已经有超过550人为其贡献代码。这是一个在全球范围内被广泛使用的工具,无论是小型项目还是

    2024年02月03日
    浏览(44)
  • 高并发架构系统设计注意事项

    本文从以下几点介绍一下设计一个高流量高并发的系统需要经历哪些步骤以及考虑哪些因素(文章中的不足之处还请大佬们多多指点)。 在设计一个系统之前,我们先要有一个统一且清晰的认知:不要想着一下就能设计出完美的系统,好的系统是迭代出来的。不要复杂化,要

    2024年02月07日
    浏览(44)
  • Linux umount命令详解:如何使用umount命令卸载linux文件系统、卸载U盘、卸载软盘(附实例教程和注意事项)

    Linux umount命令用于卸除文件系统。umount可以卸除目前挂在Linux目录中的文件系统。这个命令的全称是unmount,意思是“卸载”。在Linux系统中,当我们需要对某个设备进行操作时,通常需要先将其挂载到文件系统中。当操作完成后,为了保证数据的完整性和一致性,通常会使用

    2024年02月02日
    浏览(64)
  • 【08】STM32·HAL库开发-HAL库介绍 | STM32Cube固件库介绍 | HAL库框架结构 | 如何使用HAL库及使用注意事项

      CMSIS (微控制器 软件接口标准 ):Cortex Microcontroller Software Interface Standard,是由ARM和与其合作的芯片厂商( 比如ST、NXP公司等 )、软件工具厂商( Keil、IAR公司等 ),共同制定的标准。 如果没有此标准,ARM公司的产品兼容性非常差。   下图中分为三层,第一层是用户层

    2024年02月11日
    浏览(61)
  • GitLab服务器迁移备份及注意事项

    备份时需要保证两个gitlab的版本号一致,例如我的gitlab版本号都为8.8.5。 然后使用以下命令进行备份,注意gitlab需要保持正常运行的状态 备份结束后进入 “ /var/opt/gitlab/backups ” 目录下查看备份文件,备份文件名格式一般为 “ 时间戳_gitlab_backup.tar ”(例如:1675114514_gitlab_b

    2024年02月11日
    浏览(56)
  • 服务器租用和托管有哪些注意事项?

    一:主机托管的注意事项 A:服务器必须在您本地有一定时间的测试运行(3-4天),只有测试过几天的服务器才可以说是稳定的。有一些客户新安装服务器后(甚至还没配置好)就立刻送过来,有可能会导致问题,这样反而耽搁您的时间。安装WINDOWS系统需要打完所有的修改包,包括

    2024年01月21日
    浏览(54)
  • 本地生活服务平台加盟,成功路上的注意事项

    近年来,随着短视频的快速发展,本地生活服务成为了一个蓬勃发展的行业。作为创业者,加盟本地生活服务平台是一个有潜力的商机。然而,在决定加入并投资之前,有一些关键的注意事项需要考虑。 选择一个信誉良好、口碑较好的本地生活服务平台加盟是确保你投资安全

    2024年01月23日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包