微服务_SpringCloud微服务架构实战:高并发微服务架构设计
高并发微服务架构设计
作为一个 IT 从业人员,我们经常会碰到类似于下面的一些问题:
- 单个项目巨大而沉重,难以维护。
- 系统稳定性得不到更有效的保证。
- 怎样才能持续地提升系统的性能。
- 怎样才能快速地响应需求的变更,并且系统更新不会引起任何抖动。
- 怎样才能更好地适应系统规模化的扩张。
针对上面这些问题,我们无时无刻不在努力地进行各种各样的尝试和探索,寻求更好的解决方案,或者使用更先进的技术。
目前来看,在互联网环境之中产生的微服务架构设计是一个比较理想的解决方案。
微服务总体架构设计
一个使用了微服务的电商平台的总体架构设计如图 2-1 所示。
这是一个典型的微服务总体架构设计图,自上往下看,可以分为前台应用层、 API 接入层、业务应用层、服务中心和基础资源层结构,每层结构都有其自身的功能和特别的设计。
前台应用层可支持任何应用的客户端,如物联网、微信小程序、移动 App API 开放平台等。
API 接入层可以使用 Spring Cloud Zuul Gateway 设计网关,起到一个承上启下的作用,并且具备鉴权、路由和流控等功能。
业务应用层是微服务 基本应用 ,它本身也是一个微服务。这里主要是电商平台的一些后台管理功能
服务中 就是使用微服务设计的各种 AP 接口服务,这些服务一般使用基于 ST削风格的设计,对外提供轻量 API 接口服务。另外,在基础服务中间件中,提供服务治理、消息队列、监控告警、配置管理等服务。
基础资源是我们组建的私有云或者租用的公有云,为微服务搭建容器平台,提供数据存储、 DevOps 镜像仓库等服务。
在这个架构设计图中,除了上面这些,在水平方向上,还可以看到负载均衡、日志记录、链路跟踪,以及基于大型电商平台的运营平台等服务。
下面介绍微服务架构设计的优势,以及它所表现出来的高并发、高性能的特点。
- 自然的压力分解。
- 可弹性伸缩的集群环境。
- 高度的独立性设计。
- API 的分层调用关系。
- 高可用的基础资源支持。
- 快速响应的自动化基础设施。
- 完善的监控体系。
- 微服务的安全保障。
自然的压力分解
对于一个大型系统来说,在使用微服务架构设计之后,原来针对单独一个应用所承受的压力,就自然而然地分散到众多微服务中。各个微服务可以使用不同的数据库,并且可以分开部署在不同的服务器上,所有这些,都是一种压力分流的方法。
可弹性伸缩的集群环境
微服务的部署和发布,最终都将纳入微服务的治理环境之中。这种治理环境是一个分布式的集群管理体系,对于每一个微服务来说,都能对其实行动态路由、负载均衡、服务降级等一系列的管控措施。同时,允许每个微服务根据其所承受的压力情况,进行自由的扩展和收缩,即具备可弹性伸缩的特性。
图2-2 是微服务的一个运行环境示意图,不管是作为提供接口服务的阻STAPI 微服务,还是提供操作界面的 WebUI 微服务,都可以根据需要在云端服务器上很方便地增加其运行副本,从而扩展它的负载能力。而且,这种扩展并不局限于在一个虚拟环境中,它可以跨机房、跨地区,甚至跨国界。当然,微服务所使用的基础资源,同样具备自由扩展的能力。这样才能保证在整个系统平台中可以应对任何高并发的调用,而不存在性能瓶颈。
高度的独立性设计
微服务架构的去中心化的设计特点,为每个微服务的设计提供了高度的独立性。这样,我们就可以根据每个微服务的特点,选择数据库或者通信方式,以发挥其独特的效能。
比如,对于数据量不是很大,关联性不是很复杂的数据,可以使用传统的关系数据库,如MySQL 或者 Oracle 。对于数据量较大,更新不是很频繁的数据,可以使用 MongoDB NoSQL数据库。对于一些关系复杂,关联比较多的数据,则可以使用图数据库,如 Neo4j 等。这样针对不同的业务特性,使用合适的数据库,就可以充分发挥应用程序的性能。
对于通信方式来说,有些程序对实时数据很敏感,只能使用接口的方式进行实时调用:而有的程序对实时数据并没有太多要求,但是通信量很大,这时就可以使用异步消息进行调用。
这样,通过有针对性的独立设计,可以最大限度地发挥应用程序的效能。
API 的分层调用关系
微服务使用 GateWay 网关接口方式对外部环境提供服务。这种方式使用分层结构设计,在Gate Way 层既可以直接调用 RESTAPI 微服务接口服务,也可以再经过一层设计,即使用 Backendfor Frontend 层对复杂的调用进行一次包装设计。例如,当需要对多个微服务进行调用时,可以将多个调用组装成一个单一接口服务,从而避免微服务内部环境与外部环境的多重通信。另外,有的通信可以使用 MQ (Message Queue )方式以异步方式进行。
图2-3 是一个 GateWay 多层次调用关系示意图,在这个图中,每个层次都可以进行负载均衡设计,从而能够非常有效地提高这种调用关系的并发性。其中,微服务内部环境的负载均衡设计可以由服务治理进行处理,而处在外部环境中的 GateWay 的负载均衡设计则可以使用 Nginx等工具进行实施。
高可用的基础资源支持
在微服务架构设计中,通常是使用云服务来组建基础资源的。其中,云服务既可以租用云服务提供商的服务器,也可以自己组建私有云,或者两者兼而有之。
基于云端组建的基础资源,包括数据库、缓存和文件系统等,这些资源既可以使用云服务提供商提供的优质 RDBS 、分布式数据库和对象存储等服务,也可以自己搭建各种集群体系。
这样,就可以保证每一种基础资源的使用都不会成为另外一个系统的瓶颈,这是对高并发微服务架构设计的有力补充和支持。
快速晌应的自动化基础设施
自动化基础设施建设是微服务架构设计中的一项基本要求,涉及代码管理、代码检查、集成测试、自动化测试、持续交付、自动化部署等一系列问题。
不管是持续集成、持续交付,还是敏捷开发等,这些都是 DevOps 的一种管理机制。这种管理机制可以提高微服务架构设计中各个微服务应用的应变能力,可以快速响应整个系统的变更和更新,从而充分提升整个微服务架构的总体效能。
完善的监控体系
通过使用 Sp Cloud 工具套件并结合第三方工具,我们可以为微服务的运行环境构建一个完善的监控体系,从而有效保证微服务的稳定性和健壮性。
这一监控体系包括健康检查、告警系统、链路跟踪、日志记录和查询等内容。通过健康检查和告警系统,可以及时发现系统中可能存在的问题和隐患,从而减少事故的发生。链路跟踪和日志记录可以提供非常详细的服务调用轨迹,非常适合用来检验和查找复杂的系统内部问题,或者某些可能存在的隐藏错误。
微服务的安全保障
越大型的系统,系统的并发性越高,危险性越大,其安全保障也越重要。系统的安全设计包括防火墙设计、防攻击设计、访问控制设计、数据保密设计、数据备份及灾备等各个方面的内容。而安全防护是系统安全的第一道屏障,我们将使用防火墙及动态感知等设备,为微服务的服务器组建,提供一个安全可靠的分布式环境。
如图 2-4 所示,是根据阿里云设计的一个安全管理架构,通过安全防护和安全预警 对不安全的访问或可能存在的攻击进行有效隔离,从而保证系统的安全和稳定。
如果需要进行跨机房或跨地区的微服务互联,则必须在保证安全的前提下,通过 VPC 专网使用专用通道进行通信。
小结
微服务架构设计风格本身就是一种高并发的机制。依靠云服务环境,我们可以把微服务使用的基础资源,通过自动化基础设施建设,提供成一种可伸缩、高并发、高可用的环境。同时,通过使用 Spring Cloud 工具套件和第三方库,充分保证微服务的高度可扩展性。不管是哪一种架构设计,系统的稳定性、健壮性和可靠性都缺一不可。
本文给大家讲解的内容是SpringCloud微服务架构实战:高并发微服务架构设计!
- 下篇文章给大家讲解的是大型电商平台设计实例;
- 觉得文章不错的朋友可以转发此文关注小编;
- 感谢大家的支持!
微服务_SpringCloud微服务架构实战:高并发微服务架构设计相关推荐
- Go高并发微服务分布式实战
Go高并发微服务分布式 1.命令行的用户管理 用户信息存储 => 内存 => 结构 [] map => 用户 ID name age tel addr [len] [] map 值类 ...
- 如何使用Spring Cloud实现高并发微服务设计
来自:DBAplus社群 本文根据dbaplus社群第161期线上分享整理而成 讲师介绍 陈韶健 加推科技 技术中心首席架构师 博文视点作者,著有<Spring Cloud与Docker高并发微 ...
- python 微服务架构实战_《分布式服务架构:原理、设计与实战》第一章分布式微服务架构设计原理...
1.从传统单体架构到服务化架构 1.1 JEE架构 JEE将企业级软件架构分为三个层级 : Web 层.业务逻辑层和数据存取层.对应的职能团队,主要包括:用户 交互 UI 团队.后台业务逻辑处理团 队 ...
- 基于Springcloud搭建电商平台实现高性能高并发微服务
微服务是什么 对于微服务的定义,可能不同的团队有不同的答案.正所谓一千个读者就有一千个哈姆雷特,但其实大部分人都认为微服务是一种小型的应用程序,并且使用轻量级的设计方法和轻量级的HTTP通信. 它的主 ...
- 阿里内部中台战略思想与架构实战,一部互联网技术架构的实践与发展史
移动互联网无处不在的今天,不同的学习方式让我们受益颇多.有人喜欢通过手机阅读各类技术专家的公众号分享:有人喜欢通过逛逛不同的博客,来了解当前时下的技术:也有人喜欢通过社区的形式,跟优秀的导师们一起梳理 ...
- springcloud feign 服务调用其他服务_springCloud微服务项目 构建公共的feign调用
在微服务项目中加入有一个微服务的接口,很多其他的微服务都需要调用它,那么我们可以写在公共的项目中,而不需要每个微服务都建立一个相应 的feign 1.先在common 公共项目中建一个公共feign调 ...
- 怎么关闭eureka的服务_SpringCloud微服务踩坑系列之二
一.关于Eureka和Config服务的logback.xml配置文件问题 注意:在eureka和config服务中,如果使用logback.xml配置文件,会导致在服务启动的时候出现如下warn警告 ...
- 线上服务CPU100%问题快速定位实战(转载公众号:架构师之路)
功能问题,通过日志,单步调试相对比较好定位. 性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底. 58到家架构部,运维部,58速运技术部联合进行了一次线上 ...
- 高性能Linux架构实战 [高俊峰] 笔记摘要
一 Linux服务器安全与运维 1.账户和登录安全 可删除的默认无用用户: adm lp sync shutdown halt news uucp operator games gopher 可删除的 ...
最新文章
- Oracle 查询结果去重保留一项
- GridView总结二:GridView自带编辑删除更新
- oracle10.2 管理工具,Oracle 10.2.0.5 EM管理器的BUG
- 39.原码、反码、补码的转换
- win7 32位 安装opencv-python后,运行时提示 from .cv2 import *: DLL load failed: 找不到指定的模块 的解决办法...
- Solidworks如何将参考平面的图形投影到某曲面上
- 大视场相机prnu测试标准_史上最全,阻燃性能测试方法、标准大揭秘
- 图像通道变换python-opencv
- 多线程访问数据库ADO
- php ckeditor图片上传
- Python搭建QQ机器人,监控QQ发言与进群退群,自动@新成员并屏蔽脏话踢人
- linux发送短信的脚本,shell监控系统资源并通过短信报警的脚本
- 香农三大定理、香农公式
- RS485_Modbus通讯笔记
- SQL零基础入门学习(十三)
- 企业如何构建内部开发者平台?
- 日语输入法促音和长音的输入
- 镜头评价指标及测试方法【四】————手机摄像头调查
- 优雅的点(2017网易校园招聘)---最详细的解答
- 解决声卡爆音/杂音的四种方法