重庆万州网站建设163 com邮箱注册
2026/4/18 14:30:20 网站建设 项目流程
重庆万州网站建设,163 com邮箱注册,wordpress 首页置顶,机床网站建设前言流量入口Nginx网关业务组件服务注册中心缓存和分布式锁数据持久层结构型数据存储消息中间件日志收集任务调度中心分布式对象存储前言当前#xff0c;微服务架构在很多公司都已经落地实施了#xff0c;下面用一张图简要概述下微服务架构设计中常用组件。不能说已经使用微服…前言流量入口Nginx网关业务组件服务注册中心缓存和分布式锁数据持久层结构型数据存储消息中间件日志收集任务调度中心分布式对象存储前言当前微服务架构在很多公司都已经落地实施了下面用一张图简要概述下微服务架构设计中常用组件。不能说已经使用微服务好几年了结果对微服务架构没有一个整体的认知一个只懂搬砖的程序员不是一个好码农!流量入口Nginx在上图中可以看到Nginx作为整个架构的流量入口可以理解为一个外部的网关它承担着请求的路由转发、负载均衡、动静分离等功能。作为一个核心入口点Nginx肯定要采用多节点部署同时通过keepalived来实现高可用从而保障整个平台的高可用。网关网关是在Nginx后的另外一个核心组件。它承担着请求鉴权路由转发协议转换流量监控等一系列功能上图中网关是采用spring Cloud Gateway来实现业务网关的功能在网关选型中我们还有其他的选择比如Zuul1,Zuul2,Kong等等这些方案都有自己的优势和局限性我们可以根据自己他们的特点来抉择到底选用哪一个方案。对于网关的深入了解可以参见之前的系列文章网关那点事这里不做赘述。上图中Spring Cloud Gateway下面有jwt和OAuth2其实这两个就是基于token的认证鉴权一般互联网项目中在登录模块都是支持微信或者qq登录这就是用到OAuth2的授权登录。想深入了解Oauth2相关细节可以参考之前的Oauth2.0客户端服务端示例等系列文章。业务组件从上面的架构图中可以看到网关之后就是我们的业务组件了可以理解就是拆分之后的微服务了比如电商平台常见的账号服务、订单服务、发票服务、收银台服务等等。服务组件之间通过Feign来进行http调用Feign集成Ribbon来实现客户端侧负载均衡。具体的服务领域划分服务限界上下文的设定这就另外的知识了如果想做好服务划分DDD领域驱动设计这块可以深入了解下。服务注册中心不管是基于Dubbo实现的SOA还是基于Spring Cloud拆分的微服务架构服务注册中心都是必须的我们把所有的服务组件都注册到注册中心进而实现服务的动态调用。常见能实现注册中心功能的有Zookeeper,Eureka,Nacos,Zookeeper在Dubbo中使用比较多目前公司服务微服务架构是基于Eureka的Eureka好像目前不维护了。一般新的平台建议直接集成NacosNacos除了能做注册中心来使用也可以作为分布式配置中心来使用比Sping Cloud Config更好使。缓存和分布式锁在图中左下角我们可以看到Redis组件我们可以把Redis作为缓存来使用把一些查询慢使用率高的热点数据做缓存处理能快速提高接口响应时间。同时redis在微服务中的一大使用场景就是分布式锁传统的Sychronized和显示Lock锁显然是不能解决分布式并发问题。为了保障Redis的高可用可以采用哨兵部署不是三个redis节点一主二从同时部署三个哨兵节点来实现故障转移避免单点问题如果Redis存储的数据量很大达到了单节点的Redis的性能瓶颈我们也可以用Redis集群模式来实现分布式存储。数据持久层不管单体服务还是微服务数据持久层都是必须的我们是选用互联网项目经常使用的mysql作为DB为了保证服务读写效率以及高可用性我们主从分离模式同时实现读写分离来保障mysql的读写性能。随着业务量增长单表的数据量达到性能瓶颈之后我们就要采用分库分表来对数据库表进行水平拆分和垂直拆分了具体如何进行合理的拆分以及技术选型这些和项目现有的表结构设计是息息相关的要考虑后续的可拓展性不能短期拆了一时爽后续业务量增暴涨之后服务器的性能不足以维持数据库的性能时这时候要拆分服务器部署了。当然一般企业的数据量级达不到那样的量级。结构型数据存储mysql比较擅长存储关系型数据项目中有需要存储结构性数据的场景比如存储JSON字符串这种场景通过mysql来存储显然事不合适的。一般我们会采用Elasticsearch或者MangoDB来进行存储如果业务中需要检索功能更建议使用Elasticsearch。Elasticsearch支持DSL有比较丰富查询检索功能甚至能实现GIS空间检索功能。消息中间件前面说到微服务架构中服务之间同步调用是通过Feign来实现的那服务间的异步解耦就要通过MQ来实现了。虽然我们可以通过多线程来实现异步调用但是这种异步调用不支持持久化可能会造成消息丢失所以一般都集成RabbitMq或者RocketMq。日志收集在微服务架构中通过一个组件比如说订单服务都是多节点分布式部署每个节点的log日志都是存储在节点本地如果要查询日志我们难道要登录到各个节点找到对应的日志信息这种查看日志肯定是不行的。所以一般会引入ELK来做日志收集和可视化展示查询。Logstash 用来做日志收集工作通常在Logstash前会加一个Filebeat由Filebeat来收集日志Logstash做数据转换工作。Elasticsearch做数据存储以及生成索引数据便于Kibana做检索。Kibana做数据的展示以及查询检索功能我们通过检索关键词就能快速的查询到想要日志信息。任务调度中心项目中经常会用到定时功能单体应用中我们使用sping自带的Schedule或者使用Quartz即可在分布式应用中我们就要集成分布式定时器比如Quartz(Quartz配合数据库表也是支持分布式定时任务的)还有Elastic-Job、XXL-JOB等等。Elastic-job 当当网基于quartz 二次开发的弹性分布式任务调度系统功能丰富强大采用zookeeper实现分布式协调实现任务高可用以及分片。Elastic-Job是一个分布式调度的解决方案由当当网开源它由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成使用Elastic-Job可以快速实现分布式任务调度。XXL-JOB 是一个分布式任务调度平台XXL是作者徐雪里姓名拼音的首字母其核心设计目标是开发迅速、学习简单、轻量级、易扩展。将调度行为抽象形成“调度中心”公共平台而平台自身并不承担业务逻辑“调度中心”负责发起调度请求。将任务抽象成分散的JobHandler交由“执行器”统一管理“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。因此“调度”和“任务”两部分可以相互解耦提高系统整体稳定性和扩展性。分布式对象存储项目中经常会有文件上传功能比如图片音频视频。在分布式架构中我们将文件存储在节点服务器上显然是不行的这时候我们就需要引入分布式文件存储。常见方案有MinIo、阿里的OSS收费阿里FastDFS等等。MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java、Net、Python、Javacript、Golang语言。FastDFS是一个开源的轻量级分布式文件系统它对文件进行管理功能包括文件存储、文件同步、文件访问文件上传、文件下载等解决了大容量存储和的问题。特别适合以文件为载体的在线服务如相册网站、视频网站等等。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询