02-项目结构

微服务架构图
02-项目结构

谷粒项目属于前后端分离开发:内网部署,外网部署。
外网部署:面向公众访问的前端项目
内网部署:后端服务器项目

02-项目结构

请求流程:
通过任意客户端给后端服务发送请求, 请求先通过Nginx集群。Nginx 将服务转交给Api 网关(SpringCloud GateWay,网关的功能:根据当前请求动态路由到哪个业务模块,当调用的服务模块是集群的时候,网关可以根据当前情况进行负载均衡调用服务模块;当某些服务模块出现问题,可以由网关级别对服务模块进行同一的熔断及降级(Alibaba 提供的SpringClound 组件:Sentinel);网关还能有认证授权,看请求的数据是否合法,是合法的才将请求放行;网关能进行限流,在请求数量大的时候将请求流量控制,保证后台业务集群很容易的处理完业务),再由网关将请求传送到业务中,业务的处理用SpringBoot 来写微服务。
服务与服务之间有可能会相互调用,这个过程用SpringClound 的Feign 组件进行编写。有些请求还需要登录以后再处理,所以就要将这些请求送到OAuth 认证中心进行处理(比如一些社交登录),整合应用中的安全与权限控制使用SpringSecurity 进行控制。

02-项目结构

数据存储的解决方案:
服务要保存一些数据或者要使用缓存等功能时, 缓存使用Redis 的集群,可以是分片集群(Shard) + 哨兵集群(Sentinel); 持久化存储数据使用MySql 进行存储,可以做成读写分离,或者分库分表。 服务与服务之间可以使用消息队列(RabbitMQ)集群来进行异步解耦,也包括完成分布式事务的最终一致性; 检索商品信息使用ElasticSearch; 有些服务在运行期间可能要存储图片,视频… 这里使用阿里云的对象存储服务:OSS.

02-项目结构
项目上线以后,能快速定位项目中的问题:使用ELK 对日志进行相关处理。 使用ELK 中的LogStash 收集业务中的各种日志,把这些信息存储到ES 中,然后用Klbana (可视化界面) 从ES 中检索出相关的可视化信息帮我们快速定位线上问题的所在。

02-项目结构

在分布式系统中,每个服务都可能部署在很多在机器上,在它们互相调用的时候就得知道彼此都在哪里,所以就将所有的服务都注册到注册中心中,别的服务可以从注册中心中发现其他服务所在的位置(注册中心使用SpringClound的 Alibaba的Nacos); 配置中心也使用注册中心使用SpringClound的 Alibaba的Nacos,所有服务都可以从配置中心中动态获取配置。 在服务之间调用时可能会出现问题,当出现问题时候使用服务追踪(SpringClound 的Sleuth + Zipkin),追踪整个服务调用链,看哪里出现问题,把每个服务的信息交给开源项目:Prometheus 进行聚合分析,再由Grafana 进行可视化展示,通过Prometheus 的Altermanager 实时得到服务的告警信息,通过邮件或短信的形式告知开发人员。

持续集成和持续部署:
02-项目结构
由于项目的微服务众多,每个都打包部署到服务器太麻烦。有了持续集成,开发人员将修改后的代码提交给GitHub,运维人员通过自动化工具Jenkins Pipeline ,从GitHub 中获取到代码,将它打包成Docker 镜像,最终使用KBS 来集成整个Docker 服务,将服务以Docker 容器的形式来运行。

微服务架构图
02-项目结构