高并发微服务架构设计
作为一个 IT 从业人员,我们经常会碰到类似于下面的一些问题:
- 单个项目巨大而沉重,难以维护。
- 系统稳定性得不到更有效的保证。
- 怎样才能持续地提升系统的性能。
- 怎样才能快速地响应需求的变更,并且系统更新不会引起任何抖动。
- 怎样才能更好地适应系统规模化的扩张。
针对上面这些问题,我们无时无刻不在努力地进行各种各样的尝试和探索,寻求更好的解决方案,或者使用更先进的技术。
目前来看,在互联网环境之中产生的微服务架构设计是一个比较理想的解决方案。
Java学习笔记共享地址:spring cloud学习笔记
微服务总体架构设计
一个使用了微服务的电商平台的总体架构设计如图 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 工具套件并结合第三方工具,我们可以为微服务的运行环境构建一个完善的监控体系,从而有效保证微服务的稳定性和健壮性。
这一监控体系包括健康检查、告警系统、链路跟踪、日志记录和查询等内容。通过健康检查和告警系统,可以及时发现系统中可能存在的问题和隐患,从而减少事故的发生。链路跟踪和日志记录可以提供非常详细的服务调用轨迹,非常适合用来检验和查找复杂的系统内部问题,或者某些可能存在的隐藏错误。
微服务的安全保障
越大型的系统,系统的并发性越高,危险性越大,其安全保障也越重要。系统的安全设计包括防火墙设计、防攻击设计、访问控制设计、数据保密设计、数据备份及灾备等各个方面的内容。而安全防护是系统安全的第一道屏障,我们将使用防火墙及动态感知等设备,为微服务的服务器组建,提供一个安全可靠的分布式环境。
Spring Cloud面试真题共享地址:spring cloud答案解析。
如图 2-4 所示,是根据阿里云设计的一个安全管理架构,通过安全防护和安全预警 对不安全的访问或可能存在的攻击进行有效隔离,从而保证系统的安全和稳定。
如果需要进行跨机房或跨地区的微服务互联,则必须在保证安全的前提下,通过 VPC 专网使用专用通道进行通信。
小结
微服务架构设计风格本身就是一种高并发的机制。依靠云服务环境,我们可以把微服务使用的基础资源,通过自动化基础设施建设,提供成一种可伸缩、高并发、高可用的环境。同时,通过使用 Spring Cloud 工具套件和第三方库,充分保证微服务的高度可扩展性。不管是哪一种架构设计,系统的稳定性、健壮性和可靠性都缺一不可。
{{m.name}}
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/71292.html