客户端可以是pc端,也可以是手机,或者其它的移动设备,当客户端向后台发送请求的时候,首先需要经过我们的路由器,路由器根据我们的VIP(虚拟IP地址)将请求转换给具体的虚拟路由器(keepalived+Nginx),为了保证高可用,此时的虚拟路由器是需要做高可用配置的(至少两台以上的服务)。主要用来解决单点故障。
Nginx单点可以解决5万的并发,并且Nginx还能够做限流(IP限流,或者访问速率限流),并且Nginx还具备缓存的功能。后期为了解决更高的并发,我们可以加入openResty,这样单点就可以解决10k到1000k的并发。
虚拟路由器将请求转发给我们的网关(Gateway) GateWay的主要作用如下
1. 将用户的请求转发给具体的微服务。
2. 限流,微服务网关需要使用服务器发布,譬如Tomcat,所以这一块所解决的并发是有限的,主要为后台的商品,订单,用户微服务模块提供保护。
3. 统一的鉴权。从而判断用户是否能够进行对应的操作。
请求这个时候,就会到达具体的微服务,因为微服务与微服务之间需要进行相互的调用,所以我们需要使用Feign进行微服务的调用。模块与模块之间需要有公用的JAVABean和工具类。所以我们把Feign和通用JavaBean和工具类,都封装成一个一个的微服务。
还有Ribbon负载均衡,和HyStrix服务的熔断降级,我们都需要做成一个一个的微服务。
我们会把分布式的事务处理,oauth2.0的授权服务,消息服务,canel数据同步监听服务,支付等等其它的功能,都做成我们的公共的微服务组件。方便调用。
我们使用spring cloud Bus 来做微服务各个文件的监听服务。
整个项目,我们使用服务的注册与发现组件(Nacos/Consul/Eureka/Zookeeper........),服务的监控组件HystrAIx DashBorad,我们使用统一的服务配置中心ConfigServer.我们使用的远程仓库是Github.
整个项目,我们数据层的支持如下:
1. 数据的检索,使用的是ES集群。
2. 项目中的文件采用的是FastDFS集群。
3. 数据持久化层采用的MySQL集群,底层采用的是分库分表。
4. 缓存使用的redis集群。