高并发微服务架构设计
做为一个 IT 从业人员,咱们常常会碰到相似于下面的一些问题:面试
- 单个项目巨大而沉重,难以维护。
- 系统稳定性得不到更有效的保证。
- 怎样才能持续地提高系统的性能。
- 怎样才能快速地响应需求的变动,而且系统更新不会引发任何抖动。
- 怎样才能更好地适应系统规模化的扩张。
针对上面这些问题,咱们无时无刻不在努力地进行各类各样的尝试和探索,寻求更好的解决方案,或者使用更先进的技术。spring
目前来看,在互联网环境之中产生的微服务架构设计是一个比较理想的解决方案。数据库
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 工具套件和第三方库,充分保证微服务的高度可扩展性。不论是哪种架构设计,系统的稳定性、健壮性和可靠性都缺一不可。