spring cloud微服务架构设计

spring cloud微服务架构设计1 概述分别从整体层级 开发视图 部署视图三个角度 对整个系统的微服务架构进行 解剖 整体层级关注调用的层级 从终端人机界面到物联网 开发视图则主要面向开发人员 描述了系统工程结构 模块及关联关系 部署视图则是系统最终部署时的拓扑图 通过这些视角可以较为清晰的明白整个微服务架构设计思路 2 整体层级视图自顶向下的一张调用层次关系图 详细的说明 见下方的开发视图和部署视

 

1.概述

分别从整体层级、开发视图、部署视图三个角度,对整个系统的微服务架构进行“解剖”。整体层级关注调用的层级(从终端人机界面到物联网);开发视图则主要面向开发人员,描述了系统工程结构、模块及关联关系;部署视图则是系统最终部署时的拓扑图;通过这些视角可以较为清晰的明白整个微服务架构设计思路。

2.整体层级视图

自顶向下的一张调用层次关系图:

spring cloud微服务架构设计

详细的说明,见下方的开发视图和部署视图。

 

3.开发视图

下图仅对微服务部分进行描述,前端架构不是本文重点部分,在下一节的部署图中会作说明:

spring cloud微服务架构设计

微服务开发视图展示了java开发环境中有哪些具体的工程、工程之间的依赖关系,关键点说明如下:

  1. 上图中的每一个组件框代表了一个工程,所有工程都采用spring boot构建,都通过继承基础POM,通过maven来进行多工程之间的依赖管理;
  2. 右侧的基础工程以jar包方式被所有微服务工程引用,通用服务则是单独运行起来,供其所有工程以restful接口方式调用。
  3. 微服务目前划分为5个,分别是公式超市、行业记录、图库、用户子系统、共用服务,具体详细设计时会进行细化完善,设计为可以单独运行(启动多个独立进程),也可以合并(该工程通过引用jar包方式合并)在一个工程运行(启动一个进程),主要是视用户规模来定(代码工程为一套,只是打包时不一样或作少量代码配置修改即可完成不同的部署方式);
  4. 微服务分为客户端和服务端,服务端支持HA部署,上图设计和下方部署设计中客户端不是直接调用服务端,也可以依据项目进度紧迫性要求,先可以让客户端(前端)直接访问微服务,而是通过eurake注册中心,还有熔断、网关等服务通过spring cloud组件完成,只需少量配置即可。

4.整体部署图

部署图更为直观地展示了服务之间的调用关系、各服务部署情况。如下图:

 

spring cloud微服务架构设计

 

上图中调用关系看起来较复杂,按以下思路看图:

  1. 实际上都是以服务注册中心和相关组件为中心,见上图中的橙色部分,这部分的服务都可以直接采用spring cloud提供的现成组件,除网关可能有较多业务代码外,其它只需要做少量配置即可,入门门槛很低;
  2. 业务类微服务,见下方中间部分是具体restful接口api,同常规的spring boot工程没有太大区别,关键在于充分的理解业务,进行较为合理的划分;
  3. 通用类服务,这部分主要一些通用服务,其中消息对列(kafka/emq/rabbitmq等)可以直接采用开源组件即可,认证授权是对整个受限访问资源访问控制,可以采用JWT方式进行认证,可以在业务类客户端调用,也可以在网关调用(或者直接写到网关代码中); 消息推送服务,主要是对一些需要即时推送的消息进行立即推送服务,pc浏览器可以采用webstocket方式推送,手机端可以采用极光等第三方推送服务;
  4. 持久化部分,见左侧部分,分别对不同的存储场景,使用不同的存取方式,对大多数系统来说可能只需要一个关系型数据库,但有些情况还是需要用到nosql、分布多文件系统,但一般nosql用于解决关系简单大表的存储和查询,常规的业务还是建议放到关系统数据库中;
  5. 入口统为用Gateway网关,当然网关本身也可以通过nginx进行负载均衡。

不管采用哪种方式,本案例中采用的是前后分离的开发模式,在ngnix中放置前端开发的代码(如vue.js+elementUI或bootstrap、layui等)直接配置到ngnix中或者用node.js启动后,在ngnix的配置文件中进行代理。

最后看一下手机端,不管采用原生的开发还是html5+css3方式开发,其调用接口将保持不变,建议一般要求不高的场景下采用html5开发,这样基本上前端人员即可完成移动端开发工作,原生开发则需要分别招聘andriod/ios开发人员。

5.总结

个人认为,其实大部分情况下中小型系统不适合采用微服务架构,一个系统跑下来,即使是一个小网站,也要启动很多服务进程,虽然解决了性能、HA单点问题,方便日后分模块进行升级,但对人员的要求相对要高很多,开发工作量要比单体应用高出很多,如果没有专业的团队,很可能实际的性能、可靠性反而降低了。另外开发微服务在开发过程中也需解决很多低效的开发问题,如应采用代码生成器和形成很多团队开的规范的约定。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232715.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • matlab求解高阶常微分方程_状态依赖时滞微分方程的动力学研究

    matlab求解高阶常微分方程_状态依赖时滞微分方程的动力学研究**前言:**大学期间只学习过《常微分方程》,没想到有些学校竟然还学《时滞微分方程》,于是找到一本由内藤敏机(日本)等著,马万彪等译的《时滞微分方程——泛函数微分方程引论》(有需要的可以私聊,CSDN貌似上传不了书籍,说侵权emmm),看着头秃,不过受到不少启发,尤其是对Logistic方程的改进,真真是长见识了。没找到有人用欧拉法解一阶时滞微分方程的,于是一不做二不休便用MATLAB实现了一下下…

    2022年10月1日
    3
  • 关于jmeter客户端实现中HttpClient4与Java的区别

    关于jmeter客户端实现中HttpClient4与Java的区别如上图:jmeter客户端实现方式有三种,一种是java,一种是httpclient4,还有一种默认,我们来看一下java与httpclient4的区别:Java:选择压测时,链接是复用的(代码中的http调用都加了连接池)httpclient4:压测时,每请求一次都创建一个新的链接,(jmeter5.0以前默认关闭了连接复用,5.0上是打开的:即每请求一次都会创建一个新的链接)从JMeter5.0开始,当使用默认的HC4实现时,JMeter将在每个线程组迭代时重置HTTP状态(SS…

    2022年7月22日
    14
  • 1146 mysql_MySQL错误处理–1146错误「建议收藏」

    1146 mysql_MySQL错误处理–1146错误「建议收藏」在MySQL的主从复制过程中,出现了1146错误。提示的错误原因是:在默认的数据中找不到指定的表。showslavestatus\G;现实的同步状态。Slave_IO_Running:YESSlave_SQL_Running:NoLast_Errno:1146Last_Error:Error’Table’coop.Coop_Data’doesn’texist’onquery…

    2022年6月12日
    38
  • 基于 vue 实现的电商后台管理系统

    基于 vue 实现的电商后台管理系统源码地址:https://github.com/Hero601/vue_shop后端接口:https://goal.lanzous.com/b01c5hhsb密码:5ees免费的小星星点一个吧~

    2022年5月6日
    76
  • DNS 负载均衡、硬件负载均衡和软件负载均衡[通俗易懂]

    DNS 负载均衡、硬件负载均衡和软件负载均衡[通俗易懂]当单服务器的性能无法满足业务需求时,就需要设计高性能集群来提升系统整体的处理性能。高性能集群的复杂性主要体现在需要增加一个任务分配器,以及为任务选择一个合适的负载均衡器。负载均衡不只是为了计算单元的负载达到均衡状态,他依据分配算法目标,有的基于负载考虑,有的基于性能(吞吐量、响应时间)考虑,有的基于业务考虑。DNS负载均衡DNS是最简单也是最常见的负载均衡方式,一般用来实现地理级别…

    2022年7月14日
    44
  • C#数组–(一维数组,二维数组的声明,使用及遍历)

    C#数组–(一维数组,二维数组的声明,使用及遍历)数组:是具有相同数据类型的一组数据的集合。数组的每一个的变量称为数组的元素,数组能够容纳元素的数称为数组的长度。一维数组:以线性方式存储固定数目的数组元素,它只需要1个索引值即可标识任意1个数组元素

    2022年7月2日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号